diff options
author | weongyo <weongyo@FreeBSD.org> | 2008-05-30 07:17:51 +0000 |
---|---|---|
committer | weongyo <weongyo@FreeBSD.org> | 2008-05-30 07:17:51 +0000 |
commit | f7fc034d213ec17f1051950b8c6e9701ef31959e (patch) | |
tree | 213b1813b333d6550220584313db3ac1ca9ff695 /sys/dev | |
parent | 1ea90a0deae5bb3d69f5f91d039927b404236885 (diff) | |
download | FreeBSD-src-f7fc034d213ec17f1051950b8c6e9701ef31959e.zip FreeBSD-src-f7fc034d213ec17f1051950b8c6e9701ef31959e.tar.gz |
Fix a panic that it's occurred when NDIS init handler returned a error
by unknown reasons. In this case, sc->ifp is still NULL so it will
cause a page fault during calling ndis_detach()
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/if_ndis/if_ndis.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/sys/dev/if_ndis/if_ndis.c b/sys/dev/if_ndis/if_ndis.c index 692473f..1329965 100644 --- a/sys/dev/if_ndis/if_ndis.c +++ b/sys/dev/if_ndis/if_ndis.c @@ -996,15 +996,18 @@ ndis_detach(dev) sc = device_get_softc(dev); NDIS_LOCK(sc); ifp = sc->ifp; - ifp->if_flags &= ~IFF_UP; + if (ifp != NULL) + ifp->if_flags &= ~IFF_UP; if (device_is_attached(dev)) { NDIS_UNLOCK(sc); ndis_stop(sc); - if (sc->ndis_80211) - ieee80211_ifdetach(ifp->if_l2com); - else - ether_ifdetach(ifp); + if (ifp != NULL) { + if (sc->ndis_80211) + ieee80211_ifdetach(ifp->if_l2com); + else + ether_ifdetach(ifp); + } } else NDIS_UNLOCK(sc); |