]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: ath11k: avoid bit operation on key flags
authorRameshkumar Sundaram <rameshkumar.sundaram@oss.qualcomm.com>
Fri, 3 Oct 2025 09:21:58 +0000 (14:51 +0530)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Mon, 6 Oct 2025 16:48:55 +0000 (09:48 -0700)
Bitwise operations with WMI_KEY_PAIRWISE (defined as 0) are ineffective
and misleading. This results in pairwise key validations added in
commit 97acb0259cc9 ("wifi: ath11k: fix group data packet drops
during rekey") to always evaluate false and clear key commands for
pairwise keys are not honored.

Since firmware supports overwriting the new key without explicitly
clearing the previous one, there is no visible impact currently.
However, to restore consistency with the previous behavior and improve
clarity, replace bitwise operations with direct assignments and
comparisons for key flags.

Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.9.0.1-02146-QCAHKSWPL_SILICONZ-1
Tested-on: WCN6855 hw2.1 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.41

Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
Closes: https://lore.kernel.org/linux-wireless/aLlaetkalDvWcB7b@stanley.mountain
Fixes: 97acb0259cc9 ("wifi: ath11k: fix group data packet drops during rekey")
Signed-off-by: Rameshkumar Sundaram <rameshkumar.sundaram@oss.qualcomm.com>
Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com>
Link: https://patch.msgid.link/20251003092158.1080637-1-rameshkumar.sundaram@oss.qualcomm.com
[update copyright per current guidance]
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath11k/mac.c

index 106e2530b64e97a70ae8d4897b39e36edf597cc8..0e41b5a91d66da872c2520a95c3d4af379a504da 100644 (file)
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: BSD-3-Clause-Clear
 /*
  * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2025 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
  */
 
 #include <net/mac80211.h>
@@ -4417,9 +4417,9 @@ static int ath11k_mac_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
        }
 
        if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
-               flags |= WMI_KEY_PAIRWISE;
+               flags = WMI_KEY_PAIRWISE;
        else
-               flags |= WMI_KEY_GROUP;
+               flags = WMI_KEY_GROUP;
 
        ath11k_dbg(ar->ab, ATH11K_DBG_MAC,
                   "%s for peer %pM on vdev %d flags 0x%X, type = %d, num_sta %d\n",
@@ -4456,7 +4456,7 @@ static int ath11k_mac_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
 
        is_ap_with_no_sta = (vif->type == NL80211_IFTYPE_AP &&
                             !arvif->num_stations);
-       if ((flags & WMI_KEY_PAIRWISE) || cmd == SET_KEY || is_ap_with_no_sta) {
+       if (flags == WMI_KEY_PAIRWISE || cmd == SET_KEY || is_ap_with_no_sta) {
                ret = ath11k_install_key(arvif, key, cmd, peer_addr, flags);
                if (ret) {
                        ath11k_warn(ab, "ath11k_install_key failed (%d)\n", ret);
@@ -4470,7 +4470,7 @@ static int ath11k_mac_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
                        goto exit;
                }
 
-               if ((flags & WMI_KEY_GROUP) && cmd == SET_KEY && is_ap_with_no_sta)
+               if (flags == WMI_KEY_GROUP && cmd == SET_KEY && is_ap_with_no_sta)
                        arvif->reinstall_group_keys = true;
        }