diff options
author | Jesper Juhl <jj@chaosbits.net> | 2012-01-14 15:52:17 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-01-16 15:01:15 -0500 |
commit | 74b8cc3d592e5e884123eb99960a9f064223eaab (patch) | |
tree | 293597e27723e538e60d5fa734de152070b9e136 /net | |
parent | 7a532fe7131216a02c81a6c1b1f8632da1195a58 (diff) |
Net, mac80211: Fix resource leak in ieee80211_rx_h_mesh_fwding()
We may leak the 'fwd_skb' we skb_copy() in ieee80211_rx_h_mesh_fwding() if
we take the 'else' branch in the 'if' statement just below. If we take
that branch we'll end up returning from the function and since we've not
assigned 'fwd_skb' to anything at that point, we leak it when the variable
goes out of scope.
The simple fix seems to be to just kfree_skb(fwd_skb); just before we
return. That is what this patch does.
Signed-off-by: Jesper Juhl <jj@chaosbits.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/mac80211/rx.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index f407427c642f..751409120769 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
@@ -1979,6 +1979,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx) | |||
1979 | mesh_path_error_tx(ifmsh->mshcfg.element_ttl, fwd_hdr->addr3, | 1979 | mesh_path_error_tx(ifmsh->mshcfg.element_ttl, fwd_hdr->addr3, |
1980 | 0, reason, fwd_hdr->addr2, sdata); | 1980 | 0, reason, fwd_hdr->addr2, sdata); |
1981 | IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_no_route); | 1981 | IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_no_route); |
1982 | kfree_skb(fwd_skb); | ||
1982 | return RX_DROP_MONITOR; | 1983 | return RX_DROP_MONITOR; |
1983 | } | 1984 | } |
1984 | 1985 | ||