Author: hrs
Date: Wed Sep  2 16:30:45 2015
New Revision: 287402
URL: https://svnweb.freebsd.org/changeset/base/287402

Log:
  Fix a panic which was reproducible by an infinite loop of
  "ifconfig epair0 create && ifconfig epair0a destroy".
  
  This was caused by an uninitialized function pointer in
  softc->media.

Modified:
  head/sys/net/if_epair.c

Modified: head/sys/net/if_epair.c
==============================================================================
--- head/sys/net/if_epair.c     Wed Sep  2 16:06:25 2015        (r287401)
+++ head/sys/net/if_epair.c     Wed Sep  2 16:30:45 2015        (r287402)
@@ -809,6 +809,14 @@ epair_clone_create(struct if_clone *ifc,
            netisr_get_cpuid(sca->ifp->if_index % netisr_get_cpucount());
        scb->cpuid =
            netisr_get_cpuid(scb->ifp->if_index % netisr_get_cpucount());
+
+       /* Initialise pseudo media types. */
+       ifmedia_init(&sca->media, 0, epair_media_change, epair_media_status);
+       ifmedia_add(&sca->media, IFM_ETHER | IFM_10G_T, 0, NULL);
+       ifmedia_set(&sca->media, IFM_ETHER | IFM_10G_T);
+       ifmedia_init(&scb->media, 0, epair_media_change, epair_media_status);
+       ifmedia_add(&scb->media, IFM_ETHER | IFM_10G_T, 0, NULL);
+       ifmedia_set(&scb->media, IFM_ETHER | IFM_10G_T);
        
        /* Finish initialization of interface <n>a. */
        ifp = sca->ifp;
@@ -867,14 +875,6 @@ epair_clone_create(struct if_clone *ifc,
        strlcpy(name, sca->ifp->if_xname, len);
        DPRINTF("name='%s/%db' created sca=%p scb=%p\n", name, unit, sca, scb);
 
-       /* Initialise pseudo media types. */
-       ifmedia_init(&sca->media, 0, epair_media_change, epair_media_status);
-       ifmedia_add(&sca->media, IFM_ETHER | IFM_10G_T, 0, NULL);
-       ifmedia_set(&sca->media, IFM_ETHER | IFM_10G_T);
-       ifmedia_init(&scb->media, 0, epair_media_change, epair_media_status);
-       ifmedia_add(&scb->media, IFM_ETHER | IFM_10G_T, 0, NULL);
-       ifmedia_set(&scb->media, IFM_ETHER | IFM_10G_T);
-
        /* Tell the world, that we are ready to rock. */
        sca->ifp->if_drv_flags |= IFF_DRV_RUNNING;
        scb->ifp->if_drv_flags |= IFF_DRV_RUNNING;
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to