[PATCH] Fix memory leakage

Eugene Krasnikov k.eugene.e at gmail.com
Tue Jun 11 04:01:43 EDT 2013


Whenever skb is requested from mac80211 do not forget
to free it.

Signed-off-by: Eugene Krasnikov <k.eugene.e at gmail.com>
---
 main.c | 16 ++++++++++++----
 smd.c  |  2 --
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/main.c b/main.c
index 6d28277..b685371 100644
--- a/main.c
+++ b/main.c
@@ -361,7 +361,11 @@ static void wcn36xx_bss_info_changed(struct ieee80211_hw *hw,
 	if (changed & BSS_CHANGED_AP_PROBE_RESP) {
 		wcn36xx_dbg(WCN36XX_DBG_MAC, "mac bss changed ap probe resp");
 		skb = ieee80211_proberesp_get(hw, vif);
-		wcn36xx_smd_update_proberesp_tmpl(wcn, skb);
+		if (skb) {
+			wcn36xx_smd_update_proberesp_tmpl(wcn, skb);
+			dev_kfree_skb(skb);
+		} else
+			wcn36xx_error("failed to alloc probereq skb");
 	}
 
 	if (changed & BSS_CHANGED_BEACON_ENABLED) {
@@ -371,12 +375,16 @@ static void wcn36xx_bss_info_changed(struct ieee80211_hw *hw,
 
 		if (bss_conf->enable_beacon) {
 			wcn->beacon_enable = true;
-			skb = ieee80211_beacon_get_tim(hw, vif, &tim_off,
-						       &tim_len);
 			wcn36xx_smd_config_bss(wcn, wcn->iftype,
 					       wcn->addresses[0].addr, false,
 					       wcn->beacon_interval);
-			wcn36xx_smd_send_beacon(wcn, skb, tim_off, 0);
+			skb = ieee80211_beacon_get_tim(hw, vif, &tim_off,
+						       &tim_len);
+			if (skb) {
+				wcn36xx_smd_send_beacon(wcn, skb, tim_off, 0);
+				dev_kfree_skb(skb);
+			} else
+				wcn36xx_error("failed to alloc beacon skb");
 
 			if (vif->type == NL80211_IFTYPE_ADHOC ||
 			    vif->type == NL80211_IFTYPE_MESH_POINT)
diff --git a/smd.c b/smd.c
index a730ee4..c83481e 100644
--- a/smd.c
+++ b/smd.c
@@ -936,8 +936,6 @@ int wcn36xx_smd_update_proberesp_tmpl(struct wcn36xx *wcn, struct sk_buff *skb)
 		    "hal update probe rsp len %d bssid %pM",
 		    msg.probe_resp_template_len, msg.bssid);
 
-	dev_kfree_skb(skb);
-
 	return wcn36xx_smd_send_and_wait(wcn, msg.header.len);
 };
 
-- 
1.7.11.3




More information about the wcn36xx mailing list