blob: fd0a117a862216b37acde2facbeb716679348609 [file] [log] [blame]
developer8bb192d2023-08-31 11:46:57 +08001From b63b83d4a4af7c51cd4cac1616863829b9308fd4 Mon Sep 17 00:00:00 2001
developerd8ca5d32023-08-30 19:05:17 +08002From: Bo Jiao <Bo.Jiao@mediatek.com>
3Date: Wed, 30 Aug 2023 18:44:01 +0800
developer8bb192d2023-08-31 11:46:57 +08004Subject: [PATCH 03/15] wifi: mt76: mt7915: fix potential memory leak of beacon
developerd8ca5d32023-08-30 19:05:17 +08005 commands
6
7Fix potential memory leak when setting beacon and inband discovery
8commands.
9
10Signed-off-by: Bo Jiao <Bo.Jiao@mediatek.com>
11Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
12---
13 mt7915/mcu.c | 10 ++++++++--
14 1 file changed, 8 insertions(+), 2 deletions(-)
15
16diff --git a/mt7915/mcu.c b/mt7915/mcu.c
developer8bb192d2023-08-31 11:46:57 +080017index 35cd4fb0..74fafedb 100644
developerd8ca5d32023-08-30 19:05:17 +080018--- a/mt7915/mcu.c
19+++ b/mt7915/mcu.c
developer8bb192d2023-08-31 11:46:57 +080020@@ -1927,8 +1927,10 @@ mt7915_mcu_add_inband_discov(struct mt7915_dev *dev, struct ieee80211_vif *vif,
developerd8ca5d32023-08-30 19:05:17 +080021 skb = ieee80211_get_unsol_bcast_probe_resp_tmpl(hw, vif);
22 }
23
24- if (!skb)
25+ if (!skb) {
26+ dev_kfree_skb(rskb);
27 return -EINVAL;
28+ }
29
30 info = IEEE80211_SKB_CB(skb);
31 info->control.vif = vif;
developer8bb192d2023-08-31 11:46:57 +080032@@ -1940,6 +1942,7 @@ mt7915_mcu_add_inband_discov(struct mt7915_dev *dev, struct ieee80211_vif *vif,
developerd8ca5d32023-08-30 19:05:17 +080033
34 if (skb->len > MT7915_MAX_BEACON_SIZE) {
35 dev_err(dev->mt76.dev, "inband discovery size limit exceed\n");
36+ dev_kfree_skb(rskb);
37 dev_kfree_skb(skb);
38 return -EINVAL;
39 }
developer8bb192d2023-08-31 11:46:57 +080040@@ -1996,11 +1999,14 @@ int mt7915_mcu_add_beacon(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
developerd8ca5d32023-08-30 19:05:17 +080041 goto out;
42
43 skb = ieee80211_beacon_get_template(hw, vif, &offs, 0);
44- if (!skb)
45+ if (!skb) {
46+ dev_kfree_skb(rskb);
47 return -EINVAL;
48+ }
49
50 if (skb->len > MT7915_MAX_BEACON_SIZE) {
51 dev_err(dev->mt76.dev, "Bcn size limit exceed\n");
52+ dev_kfree_skb(rskb);
53 dev_kfree_skb(skb);
54 return -EINVAL;
55 }
56--
572.39.2
58