cvs commit: src/sys/dev/if_ndis if_ndis.c
wpaul at FreeBSD.org
Sat Feb 4 11:42:50 PST 2006
wpaul 2006-02-04 19:42:50 UTC
FreeBSD src repository
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
This fixes a crash than can occur when activating a wireless NIC in
close proximity to a very busy wireless network, reported by Ryan
MFC after: 3 days
Revision Changes Path
1.117 +34 -14 src/sys/dev/if_ndis/if_ndis.c
More information about the cvs-src