blob: eb8db1a6c55f85b34b446d69ef4023f0f4aeb7fa [file] [log] [blame]
From 70e027ce4ac9e4de16829c88ee846b7e12f14953 Mon Sep 17 00:00:00 2001
From: Michael-CY Lee <michael-cy.lee@mediatek.com>
Date: Mon, 25 Mar 2024 16:26:34 +0800
Subject: [PATCH 58/61] mtk: wifi: mt76: mt7996: assign link address to the
header of broadcast mgmt.
AAD calculation should use link addr as input for broadcast mgmt. skb.
This commit assigns link address to the header of cloned broadcast mgmt.
for the correct AAD calculation.
CR-Id: WCNCR00289305
Signed-off-by: Michael-CY Lee <michael-cy.lee@mediatek.com>
Change-Id: Ieeee17cc2121fdbc9eb34f171f2d4da583d91154
---
net/mac80211/offchannel.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/net/mac80211/offchannel.c b/net/mac80211/offchannel.c
index a571be0..15948f9 100644
--- a/net/mac80211/offchannel.c
+++ b/net/mac80211/offchannel.c
@@ -981,16 +981,26 @@ int ieee80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
if (is_multicast_ether_addr(mgmt->da) && hweight16(links) > 1) {
unsigned int link;
struct sk_buff *dskb;
+ struct ieee80211_hdr *hdr;
+ struct ieee80211_bss_conf *conf;
for_each_set_bit(link, &links, IEEE80211_MLD_MAX_NUM_LINKS) {
+ conf = rcu_dereference(sdata->vif.link_conf[link]);
+ if (!conf)
+ continue;
+
dskb = skb_clone(skb, GFP_ATOMIC);
- if (dskb) {
- ieee80211_tx_skb_tid(sdata, dskb, 7, link);
- } else {
+ if (!dskb) {
ret = -ENOMEM;
kfree_skb(skb);
goto out_unlock;
}
+
+ /* Assign link address */
+ hdr = (void *)dskb->data;
+ memcpy(hdr->addr2, conf->addr, ETH_ALEN);
+ memcpy(hdr->addr3, conf->addr, ETH_ALEN);
+ ieee80211_tx_skb_tid(sdata, dskb, 7, link);
}
kfree_skb(skb);
} else {
--
2.39.2