Search Linux Wireless

Re: [RFC PATCH] mac80211: Fix circular locking dependency in ARP filter handling

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

 



On Mon, 2010-06-07 at 16:06 +0300, Juuso Oikarinen wrote:

> --- a/net/mac80211/iface.c
> +++ b/net/mac80211/iface.c
> @@ -477,6 +477,9 @@ static int ieee80211_stop(struct net_device *dev)
>  		cancel_work_sync(&sdata->u.mgd.chswitch_work);
>  		cancel_work_sync(&sdata->u.mgd.monitor_work);
>  		cancel_work_sync(&sdata->u.mgd.beacon_connection_loss_work);
> +#ifdef CONFIG_INET
> +		cancel_work_sync(&sdata->u.mgd.arp_config_work);
> +#endif

No can do, this is under RTNL and thus can't block waiting for a work
that acquires the RTNL ... the work might already be running, waiting
for the RTNL, by the time you get here. This will also get you a lockdep
complaint.

This is why 

> @@ -379,7 +379,8 @@ static int ieee80211_ifa_changed(struct notifier_block *nb,
>  	ifmgd = &sdata->u.mgd;
>  	mutex_lock(&ifmgd->mtx);
>  	if (ifmgd->associated)
> -		ieee80211_set_arp_filter(sdata);
> +		ieee80211_queue_work(&sdata->local->hw,
> +				     &sdata->u.mgd.arp_config_work);
>  	mutex_unlock(&ifmgd->mtx);

No need to do change it here since the rtnl is held outside.

Also, and this applies to the change in mlme.c too, you must never put
work that acquires the rtnl onto the mac80211 workqueue ... that's what
you were trying to fix to start with!

But because the interface might go away before your work runs, you're in
a stupid situation where you can't really use a per-interface work
either ... I think you probably need to have the work in ieee80211_local
and iterate the interface list.

johannes

--
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