summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChih-Kang Chang <gary.chang@realtek.com>2025-11-14 14:01:15 +0800
committerPing-Ke Shih <pkshih@realtek.com>2025-11-18 09:14:41 +0800
commit3a12581fc292997f5ca6dafe3238afd39b77e798 (patch)
tree80623bb4781231aa2e022a8f732a14037f82eba3
parentef42cf705ca32c07a58133817567ac06ef74dc19 (diff)
downloadlinux-3a12581fc292997f5ca6dafe3238afd39b77e798.tar.gz
linux-3a12581fc292997f5ca6dafe3238afd39b77e798.zip
wifi: rtw89: flush TX queue before deleting key
In the wpa_supplicant rekey flow, it sends an EAPOL packet 4/4 through nl80211_tx_control_port() and triggers wake_tx_queue() in the driver. Then, it sends nl80211_new_key() to configure a new key in mac80211. However, in wake_tx_queue(), a workqueue is used to process the TX packet, which might cause the driver to process the EAPOL packet later than nl80211_new_key(). This results in the EAPOL packet 4/4 being transmitted with the new key and IV, causing it to be dropped by the AP. Therefore, needs to flush TX queue before deleting the old key to ensure that the EAPOL 4/4 packet is transmitted using the old key. Signed-off-by: Chih-Kang Chang <gary.chang@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20251114060128.35363-2-pkshih@realtek.com
-rw-r--r--drivers/net/wireless/realtek/rtw89/mac80211.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/net/wireless/realtek/rtw89/mac80211.c b/drivers/net/wireless/realtek/rtw89/mac80211.c
index 6f7571c7c274..4a7364432428 100644
--- a/drivers/net/wireless/realtek/rtw89/mac80211.c
+++ b/drivers/net/wireless/realtek/rtw89/mac80211.c
@@ -969,6 +969,7 @@ static int rtw89_ops_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
}
break;
case DISABLE_KEY:
+ flush_work(&rtwdev->txq_work);
rtw89_hci_flush_queues(rtwdev, BIT(rtwdev->hw->queues) - 1,
false);
rtw89_mac_flush_txq(rtwdev, BIT(rtwdev->hw->queues) - 1, false);