Search Linux Wireless

Re: rx racing against removing interfaces?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tuesday 27 March 2007 01:05, Johannes Berg wrote:
> Isn't there a race there when you remove interfaces and at the same time
> __ieee80211_rx is running? I don't see anything that should stop that,
> and if it happens we'll probably blow up pretty spectacularly with
> accesses to a freed netdev, or even sending it frames...

Well, IMHO __ieee80211_rx should be internal to mac80211 and not be exported.
(Same goes for the IRQ-unsafe txstatus report). We can't (and we really don't
want to) call synchronously into the stack from any driver. We want to
defer the packet processing work to a tasklet. So we always want to
call the _irqsafe functions. Why do we? Because of locking issues.
1) There's no need to hold the lowlevel driver IRQ spinlock while
processing the packet in the upper layers. We want to release it. Easiest
and non-racy way to do this is to use the _irqsafe function and its tasklet.
2) We want to prevent recursion back into the driver through a callback,
which would result in lock recursion (we had these problems in softmac, as
it is synchronous in most rx parts).

So why do I tell you this?
I think there's no way we can call __ieee80211_rx after removing the
interface, as the tasklet should be stopped first. But someone should
verify if I'm right here.
But anyway, the driver shouldn't be able to call __ieee80211_rx after the
device is down, too, as the driver has to make sure IRQs are stopped
when the device is brought down.

So we have kind of implicit locking here, but I think it's ok.

-- 
Greetings Michael.
-
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux