mac80211: flush keys for AP mode on ieee80211_do_stop
Userspace can add keys to an AP mode interface before start_ap has been called. If there have been no calls to start_ap/stop_ap in the mean time, the keys will still be around when the interface is brought down. Signed-off-by: Felix Fietkau <nbd@openwrt.org> [adjust comments, fix AP_VLAN case] Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
805dbe17d1
commit
10b6848786
1 changed files with 6 additions and 5 deletions
|
@ -898,6 +898,8 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
|
||||||
list_del(&sdata->u.vlan.list);
|
list_del(&sdata->u.vlan.list);
|
||||||
mutex_unlock(&local->mtx);
|
mutex_unlock(&local->mtx);
|
||||||
RCU_INIT_POINTER(sdata->vif.chanctx_conf, NULL);
|
RCU_INIT_POINTER(sdata->vif.chanctx_conf, NULL);
|
||||||
|
/* see comment in the default case below */
|
||||||
|
ieee80211_free_keys(sdata, true);
|
||||||
/* no need to tell driver */
|
/* no need to tell driver */
|
||||||
break;
|
break;
|
||||||
case NL80211_IFTYPE_MONITOR:
|
case NL80211_IFTYPE_MONITOR:
|
||||||
|
@ -923,17 +925,16 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
|
||||||
/*
|
/*
|
||||||
* When we get here, the interface is marked down.
|
* When we get here, the interface is marked down.
|
||||||
* Free the remaining keys, if there are any
|
* Free the remaining keys, if there are any
|
||||||
* (shouldn't be, except maybe in WDS mode?)
|
* (which can happen in AP mode if userspace sets
|
||||||
|
* keys before the interface is operating, and maybe
|
||||||
|
* also in WDS mode)
|
||||||
*
|
*
|
||||||
* Force the key freeing to always synchronize_net()
|
* Force the key freeing to always synchronize_net()
|
||||||
* to wait for the RX path in case it is using this
|
* to wait for the RX path in case it is using this
|
||||||
* interface enqueuing frames * at this very time on
|
* interface enqueuing frames at this very time on
|
||||||
* another CPU.
|
* another CPU.
|
||||||
*/
|
*/
|
||||||
ieee80211_free_keys(sdata, true);
|
ieee80211_free_keys(sdata, true);
|
||||||
|
|
||||||
/* fall through */
|
|
||||||
case NL80211_IFTYPE_AP:
|
|
||||||
skb_queue_purge(&sdata->skb_queue);
|
skb_queue_purge(&sdata->skb_queue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue