提交 10b68487 编写于 作者: F Felix Fietkau 提交者: Johannes Berg

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: NFelix Fietkau <nbd@openwrt.org>
[adjust comments, fix AP_VLAN case]
Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
上级 805dbe17
...@@ -898,6 +898,8 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, ...@@ -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, ...@@ -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);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册