> +++ b/net/wireless/mlme.c
> @@ -340,6 +340,8 @@ int cfg80211_mlme_deauth(struct
> cfg80211_registered_device *rdev,
>
> ASSERT_WDEV_LOCK(wdev);
>
> + wdev->conn_owner_nlportid = 0;
Is this really correct? The deauth might not be to the current_bss, as
you can see in the following if statement:
> if (local_state_change &&
> (!wdev->current_bss ||
> !ether_addr_equal(wdev->current_bss->pub.bssid, bssid)))
It seems that perhaps this should go into some other place, perhaps
only be reset when current_bss is also reset to NULL?
> @@ -14539,13 +14554,21 @@ static int nl80211_netlink_notify(struct
> notifier_block * nb,
> spin_unlock(&rdev-
> >destroy_list_lock);
> schedule_work(&rdev->destroy_work);
> }
> - } else if (schedule_scan_stop) {
> +
> + continue;
> + }
This also doesn't seem right - the same socket could possibly own both
an interface and a connection? If the connection is on the same
interface you might not really want to do both - though it shouldn't
hurt if all the cancel_work is in the right place - but it could be a
different interface?
johannes