diff options
author | wpaul <wpaul@FreeBSD.org> | 2006-02-04 19:42:49 +0000 |
---|---|---|
committer | wpaul <wpaul@FreeBSD.org> | 2006-02-04 19:42:49 +0000 |
commit | 6861e36921baf8f75582b54208ee7f1e93f010cf (patch) | |
tree | e41bb0c06f079574642a7ba51f17c52571c2e5b9 /usr.bin | |
parent | 1f5e50bc4722f6ef14571e6030274a47d7c1ff5d (diff) | |
download | FreeBSD-src-6861e36921baf8f75582b54208ee7f1e93f010cf.zip FreeBSD-src-6861e36921baf8f75582b54208ee7f1e93f010cf.tar.gz |
When ndis_attach() runs, it has to very briefly initialize the card
in order to query the underlying Windows driver for the station address
and some other properties. There is a slim chance that the card may
receive a packet and indicate it up to us before ndis_attach() can call
ndis_halt_nic(). This is bad, because both the softc structure and
the ifnet structure aren't fully initialized yet: many pointers are
still NULL, so if we make it into ndis_rxeof(), we will panic.
To fix this, we need to do the following:
- Move the calls to IoAllocateWorkItem() to before the call to ndis_init_nic().
- Move the initialization of the RX DPC and status callback function pointers
to before ndis_init_nic() as well.
- Modify ndis_rxeof() to check if the IFF_DRV_RUNNING flag is set. If it
isn't, we return any supplied NDIS_PACKETs to the NIC without processing
them.
This fixes a crash than can occur when activating a wireless NIC in
close proximity to a very busy wireless network, reported by Ryan
Beasley (ryan%^$!ATgoddamnbastard-****!!!DOTorg.
MFC after: 3 days
Diffstat (limited to 'usr.bin')
0 files changed, 0 insertions, 0 deletions