developer | 5f1d3ca | 2024-04-25 05:25:22 +0800 | [diff] [blame^] | 1 | From c1553f36bfb1b80be2306a50d98c0a2d256725b7 Mon Sep 17 00:00:00 2001 |
developer | 0415fc3 | 2024-04-19 18:29:00 +0800 | [diff] [blame] | 2 | From: Peter Chiu <chui-hao.chiu@mediatek.com> |
| 3 | Date: Tue, 6 Feb 2024 15:03:49 +0800 |
| 4 | Subject: [PATCH 49/61] mtk: mac80211: remove links when removing AP_VLAN |
| 5 | interface |
| 6 | |
| 7 | Remove links information when removing AP_VLAN interface. |
| 8 | Without this patch, there would be a kernel crash when station disconnect |
| 9 | from AP. |
| 10 | |
developer | 0415fc3 | 2024-04-19 18:29:00 +0800 | [diff] [blame] | 11 | Signed-off-by: Peter Chiu <chui-hao.chiu@mediatek.com> |
developer | 0415fc3 | 2024-04-19 18:29:00 +0800 | [diff] [blame] | 12 | --- |
| 13 | net/mac80211/cfg.c | 14 ++++++++++++++ |
| 14 | net/mac80211/iface.c | 4 ++-- |
| 15 | net/mac80211/mlme.c | 1 - |
| 16 | net/wireless/util.c | 8 ++++++++ |
| 17 | 4 files changed, 24 insertions(+), 3 deletions(-) |
| 18 | |
| 19 | diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c |
| 20 | index 871623d..c3b9d10 100644 |
| 21 | --- a/net/mac80211/cfg.c |
| 22 | +++ b/net/mac80211/cfg.c |
| 23 | @@ -4929,6 +4929,20 @@ static void ieee80211_del_intf_link(struct wiphy *wiphy, |
| 24 | { |
| 25 | struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); |
| 26 | |
| 27 | + if (wdev->iftype == NL80211_IFTYPE_AP_VLAN) { |
| 28 | + int i; |
| 29 | + |
| 30 | + sdata->vif.valid_links = 0; |
| 31 | + sdata->vif.active_links = 0; |
| 32 | + sdata->vif.dormant_links = 0; |
| 33 | + for (i = 0; i < IEEE80211_MLD_MAX_NUM_LINKS; i++) { |
| 34 | + rcu_assign_pointer(sdata->link[i], NULL); |
| 35 | + rcu_assign_pointer(sdata->vif.link_conf[i], NULL); |
| 36 | + } |
| 37 | + |
| 38 | + return; |
| 39 | + } |
| 40 | + |
| 41 | lockdep_assert_wiphy(sdata->local->hw.wiphy); |
| 42 | |
| 43 | ieee80211_vif_set_links(sdata, wdev->valid_links, 0); |
| 44 | diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c |
developer | 5f1d3ca | 2024-04-25 05:25:22 +0800 | [diff] [blame^] | 45 | index be52a83..e41bf5c 100644 |
developer | 0415fc3 | 2024-04-19 18:29:00 +0800 | [diff] [blame] | 46 | --- a/net/mac80211/iface.c |
| 47 | +++ b/net/mac80211/iface.c |
developer | 5f1d3ca | 2024-04-25 05:25:22 +0800 | [diff] [blame^] | 48 | @@ -397,8 +397,8 @@ static int ieee80211_check_concurrent_iface(struct ieee80211_sub_if_data *sdata, |
| 49 | sdata->link[i] == &sdata->deflink) |
| 50 | continue; |
| 51 | |
developer | 0415fc3 | 2024-04-19 18:29:00 +0800 | [diff] [blame] | 52 | - sdata->link[i] = nsdata->link[i]; |
| 53 | - sdata->vif.link_conf[i] = nsdata->vif.link_conf[i]; |
| 54 | + rcu_assign_pointer(sdata->link[i], nsdata->link[i]); |
| 55 | + rcu_assign_pointer(sdata->vif.link_conf[i], nsdata->vif.link_conf[i]); |
| 56 | } |
| 57 | } |
| 58 | } |
| 59 | diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c |
| 60 | index e4564de..ebdcf57 100644 |
| 61 | --- a/net/mac80211/mlme.c |
| 62 | +++ b/net/mac80211/mlme.c |
| 63 | @@ -1829,7 +1829,6 @@ void ieee80211_send_4addr_nullfunc(struct ieee80211_local *local, |
| 64 | { |
| 65 | struct sk_buff *skb; |
| 66 | struct ieee80211_hdr *nullfunc; |
| 67 | - u8 assoc_link_id = ifmgd->assoc_data->assoc_link_id; |
| 68 | __le16 fc; |
| 69 | |
| 70 | if (WARN_ON(sdata->vif.type != NL80211_IFTYPE_STATION)) |
| 71 | diff --git a/net/wireless/util.c b/net/wireless/util.c |
| 72 | index 2bde8a3..d03f612 100644 |
| 73 | --- a/net/wireless/util.c |
| 74 | +++ b/net/wireless/util.c |
| 75 | @@ -2826,6 +2826,14 @@ void cfg80211_remove_links(struct wireless_dev *wdev) |
| 76 | { |
| 77 | unsigned int link_id; |
| 78 | |
| 79 | + if (wdev->iftype == NL80211_IFTYPE_AP_VLAN) { |
| 80 | + struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); |
| 81 | + |
| 82 | + if (rdev->ops->del_intf_link) |
| 83 | + rdev->ops->del_intf_link(&rdev->wiphy, wdev, 0); |
| 84 | + |
| 85 | + return; |
| 86 | + } |
| 87 | /* |
| 88 | * links are controlled by upper layers (userspace/cfg) |
| 89 | * only for AP mode, so only remove them here for AP |
| 90 | -- |
developer | 5f1d3ca | 2024-04-25 05:25:22 +0800 | [diff] [blame^] | 91 | 2.18.0 |
developer | 0415fc3 | 2024-04-19 18:29:00 +0800 | [diff] [blame] | 92 | |