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

Reply via email to