]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
wifi: mac80211: Fix ack frame idr leak when mesh has no route
authorNicolas Cavallari <nicolas.cavallari@green-communications.fr>
Thu, 27 Oct 2022 14:01:33 +0000 (16:01 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 8 Dec 2022 10:15:39 +0000 (11:15 +0100)
[ Upstream commit 39e7b5de9853bd92ddbfa4b14165babacd7da0ba ]

When trying to transmit an data frame with tx_status to a destination
that have no route in the mesh, then it is dropped without recrediting
the ack_status_frames idr.

Once it is exhausted, wpa_supplicant starts failing to do SAE with
NL80211_CMD_FRAME and logs "nl80211: Frame command failed".

Use ieee80211_free_txskb() instead of kfree_skb() to fix it.

Signed-off-by: Nicolas Cavallari <nicolas.cavallari@green-communications.fr>
Link: https://lore.kernel.org/r/20221027140133.1504-1-nicolas.cavallari@green-communications.fr
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/mac80211/mesh_pathtbl.c

index 30a95a2ff196ae850e47ec9d8a67c667e529b243..78945dc9dcd7b9207fc761911b6f5ec3806e2ba7 100644 (file)
@@ -794,7 +794,7 @@ int mesh_path_send_to_gates(struct mesh_path *mpath)
 void mesh_path_discard_frame(struct ieee80211_sub_if_data *sdata,
                             struct sk_buff *skb)
 {
-       kfree_skb(skb);
+       ieee80211_free_txskb(&sdata->local->hw, skb);
        sdata->u.mesh.mshstats.dropped_frames_no_route++;
 }