svn commit: r206017 - head/sys/netgraph
Alexander Motin
mav at FreeBSD.org
Wed Mar 31 22:16:05 UTC 2010
Author: mav
Date: Wed Mar 31 22:16:05 2010
New Revision: 206017
URL: http://svn.freebsd.org/changeset/base/206017
Log:
Make ng_ksocket fulfill lower protocol stack layers alignment requirements
on platforms with strict alignment constraints.
This fixes kernel panics on arm and probably other architectures.
PR: sparc64/80410
Modified:
head/sys/netgraph/ng_ksocket.c
Modified: head/sys/netgraph/ng_ksocket.c
==============================================================================
--- head/sys/netgraph/ng_ksocket.c Wed Mar 31 22:11:19 2010 (r206016)
+++ head/sys/netgraph/ng_ksocket.c Wed Mar 31 22:16:05 2010 (r206017)
@@ -902,12 +902,24 @@ ng_ksocket_rcvdata(hook_p hook, item_p i
struct sockaddr *sa = NULL;
int error;
struct mbuf *m;
+#ifdef ALIGNED_POINTER
+ struct mbuf *n;
+#endif /* ALIGNED_POINTER */
struct sa_tag *stag;
/* Extract data */
NGI_GET_M(item, m);
NG_FREE_ITEM(item);
-
+#ifdef ALIGNED_POINTER
+ if (!ALIGNED_POINTER(mtod(m, caddr_t), uint32_t)) {
+ n = m_defrag(m, M_NOWAIT);
+ if (n == NULL) {
+ m_freem(m);
+ return (ENOBUFS);
+ }
+ m = n;
+ }
+#endif /* ALIGNED_POINTER */
/*
* Look if socket address is stored in packet tags.
* If sockaddr is ours, or provided by a third party (zero id),
More information about the svn-src-all
mailing list