]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: ath12k: Resolve multicast packet drop by populating key_cipher in ath12k_instal...
authorAaradhana Sahu <aaradhana.sahu@oss.qualcomm.com>
Thu, 3 Apr 2025 08:22:06 +0000 (13:52 +0530)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Sat, 12 Apr 2025 04:19:28 +0000 (21:19 -0700)
Currently, the key_cipher in the ath12k_vif structure, which represents the
group cipher of the MLD AP, is populated when the link address matches the
ieee80211_vif address within ath12k_install_key().

However, in MLD AP, the link address and ieee80211_vif address can differ.
Due to this key_cipher is not populated and multicast packets don't get the
correct cipher information and resulting multicast packets drop.

To fix this, compare the link address with the arvif->bssid instead of the
ieee80211_vif address.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00209-QCAHKSWPL_SILICONZ-1

Fixes: 3dd2c68f206ef ("wifi: ath12k: prepare vif data structure for MLO handling")
Signed-off-by: Aaradhana Sahu <aaradhana.sahu@oss.qualcomm.com>
Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com>
Link: https://patch.msgid.link/20250403082207.3323938-2-aaradhana.sahu@oss.qualcomm.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath12k/mac.c

index eb0c461559b9b5a6b499583307126d8c8f8360df..1bc8e81ad525d5d59dc0f150a71bce51fadeb8b0 100644 (file)
@@ -4668,7 +4668,6 @@ static int ath12k_install_key(struct ath12k_link_vif *arvif,
                .macaddr = macaddr,
        };
        struct ath12k_vif *ahvif = arvif->ahvif;
-       struct ieee80211_vif *vif = ath12k_ahvif_to_vif(ahvif);
 
        lockdep_assert_wiphy(ath12k_ar_to_hw(ar)->wiphy);
 
@@ -4721,7 +4720,7 @@ install:
        if (!wait_for_completion_timeout(&ar->install_key_done, 1 * HZ))
                return -ETIMEDOUT;
 
-       if (ether_addr_equal(macaddr, vif->addr))
+       if (ether_addr_equal(macaddr, arvif->bssid))
                ahvif->key_cipher = key->cipher;
 
        return ar->install_key_status ? -EINVAL : 0;