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),
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to