]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: rtw89: flush TX queue before deleting key
authorChih-Kang Chang <gary.chang@realtek.com>
Fri, 14 Nov 2025 06:01:15 +0000 (14:01 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Tue, 18 Nov 2025 01:14:41 +0000 (09:14 +0800)
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
drivers/net/wireless/realtek/rtw89/mac80211.c

index 6f7571c7c2741a6059e1cf415553d7de850c1609..4a7364432428be0dc371474077ff289c12ccad9b 100644 (file)
@@ -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);