Author: bz
Date: Wed Jun 22 11:45:30 2016
New Revision: 302083
URL: https://svnweb.freebsd.org/changeset/base/302083

Log:
  After r302054 unloading an network interface driver on a kernel
  without VIMAGE support would dereference a NULL point unconditionally
  leading to a panic.  Wrap the entire VIMAGE related code with #ifdefs
  rather than just the decision making part to save an extra bit of
  resources.
  
  Reported by:  np
  Sponsored by: The FreeBSD Foundation
  MFC After:    13 days
  Approved by:  re (marius)

Modified:
  head/sys/net/if.c

Modified: head/sys/net/if.c
==============================================================================
--- head/sys/net/if.c   Wed Jun 22 11:38:26 2016        (r302082)
+++ head/sys/net/if.c   Wed Jun 22 11:45:30 2016        (r302083)
@@ -931,10 +931,13 @@ if_detach_internal(struct ifnet *ifp, in
        int i;
        struct domain *dp;
        struct ifnet *iter;
-       int found = 0, shutdown;
+       int found = 0;
+#ifdef VIMAGE
+       int shutdown;
 
        shutdown = (ifp->if_vnet->vnet_state > SI_SUB_VNET &&
                 ifp->if_vnet->vnet_state < SI_SUB_VNET_DONE) ? 1 : 0;
+#endif
        IFNET_WLOCK();
        TAILQ_FOREACH(iter, &V_ifnet, if_link)
                if (iter == ifp) {
@@ -987,6 +990,7 @@ if_detach_internal(struct ifnet *ifp, in
 
        if_down(ifp);
 
+#ifdef VIMAGE
        /*
         * On VNET shutdown abort here as the stack teardown will do all
         * the work top-down for us.
@@ -1001,6 +1005,7 @@ if_detach_internal(struct ifnet *ifp, in
                 */
                goto finish_vnet_shutdown;
        }
+#endif
 
        /*
         * At this point we are not tearing down a VNET and are either
@@ -1066,7 +1071,9 @@ if_detach_internal(struct ifnet *ifp, in
 
        rt_flushifroutes(ifp);
 
+#ifdef VIMAGE
 finish_vnet_shutdown:
+#endif
        /*
         * We cannot hold the lock over dom_ifdetach calls as they might
         * sleep, for example trying to drain a callout, thus open up the
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to