Author: gallatin Date: Wed Jul 4 14:25:38 2018 New Revision: 335957 URL: https://svnweb.freebsd.org/changeset/base/335957
Log: mxge: fix panic at module unload r333175 (multicast changes) exposed a bug where mxge was not checking to see if the driver was being unloaded while handing ioctls that touch hardware. As a result, now that in6m_disconnect() is run from an async gtaskq, it was busy-waiting in mxge_send_cmd() while the mcast list was destroyed. Modified: head/sys/dev/mxge/if_mxge.c Modified: head/sys/dev/mxge/if_mxge.c ============================================================================== --- head/sys/dev/mxge/if_mxge.c Wed Jul 4 14:20:19 2018 (r335956) +++ head/sys/dev/mxge/if_mxge.c Wed Jul 4 14:25:38 2018 (r335957) @@ -4193,6 +4193,10 @@ mxge_ioctl(struct ifnet *ifp, u_long command, caddr_t case SIOCADDMULTI: case SIOCDELMULTI: mtx_lock(&sc->driver_mtx); + if (sc->dying) { + mtx_unlock(&sc->driver_mtx); + return (EINVAL); + } mxge_set_multicast_list(sc); mtx_unlock(&sc->driver_mtx); break; @@ -4278,6 +4282,10 @@ mxge_ioctl(struct ifnet *ifp, u_long command, caddr_t case SIOCGIFMEDIA: mtx_lock(&sc->driver_mtx); + if (sc->dying) { + mtx_unlock(&sc->driver_mtx); + return (EINVAL); + } mxge_media_probe(sc); mtx_unlock(&sc->driver_mtx); err = ifmedia_ioctl(ifp, (struct ifreq *)data, _______________________________________________ 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"