Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 4 Feb 2006 19:42:50 +0000 (UTC)
From:      Bill Paul <wpaul@FreeBSD.org>
To:        src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/dev/if_ndis if_ndis.c
Message-ID:  <200602041942.k14Jgodw041995@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200602041942.k14Jgodw041995>