cvs commit: src/sys/dev/if_ndis if_ndis.c

Bill Paul wpaul at FreeBSD.org
Sat Feb 4 11:42:50 PST 2006


wpaul       2006-02-04 19:42:50 UTC

  FreeBSD src repository

  Modified files:
    sys/dev/if_ndis      if_ndis.c 
  Log:
  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
  
  Revision  Changes    Path
  1.117     +34 -14    src/sys/dev/if_ndis/if_ndis.c


More information about the cvs-src mailing list