]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: ath12k: Fix memory corruption during MLO multicast tx
authorP Praneesh <praneesh.p@oss.qualcomm.com>
Wed, 2 Apr 2025 17:57:14 +0000 (23:27 +0530)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Mon, 7 Apr 2025 15:21:58 +0000 (08:21 -0700)
The struct sk_buff's control buffer is shared by mac80211's struct
ieee80211_tx_info and ath12k's struct ath12k_skb_cb. When the driver wants
to transmit an skb, it caches all the mac80211-specific information from
struct ieee80211_tx_info, then performs a memset on the control buffer
before writing the ath12k-specific information using struct ath12k_skb_cb.
However, during multicast tx, the key is being filled into the driver data,
which overwrites some crucial members like link_id and flags in struct
ath12k_skb_cb. This causes invalid information retrieval when the driver
accesses these fields during ath12k_dp_tx(). Fix this issue by removing
the key filling logic during MLO multicast tx, as it is not used anywhere
in the tx path.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.4.1-00199-QCAHKSWPL_SILICONZ-1
Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3

Fixes: 2f50de725677 ("wifi: ath12k: Add support for MLO Multicast handling in driver")
Signed-off-by: P Praneesh <praneesh.p@oss.qualcomm.com>
Link: https://patch.msgid.link/20250402175714.2667270-1-praneesh.p@oss.qualcomm.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath12k/mac.c

index 5a6630d6e9b95be5629225fdcdc7139afe1aa6a7..2b6bdc3d2b11a8a5f5733352826c724c671fd49a 100644 (file)
@@ -7497,7 +7497,6 @@ static void ath12k_mac_op_tx(struct ieee80211_hw *hw,
                                                                info_flags);
 
                        skb_cb = ATH12K_SKB_CB(msdu_copied);
-                       info = IEEE80211_SKB_CB(msdu_copied);
                        skb_cb->link_id = link_id;
 
                        /* For open mode, skip peer find logic */
@@ -7520,7 +7519,6 @@ static void ath12k_mac_op_tx(struct ieee80211_hw *hw,
                        if (key) {
                                skb_cb->cipher = key->cipher;
                                skb_cb->flags |= ATH12K_SKB_CIPHER_SET;
-                               info->control.hw_key = key;
 
                                hdr = (struct ieee80211_hdr *)msdu_copied->data;
                                if (!ieee80211_has_protected(hdr->frame_control))