mt76: mt7915: fix possible memory leak in mt7915_mcu_add_beacon
authorLorenzo Bianconi <lorenzo@kernel.org>
Mon, 14 Sep 2020 18:29:01 +0000 (20:29 +0200)
committerFelix Fietkau <nbd@nbd.name>
Thu, 24 Sep 2020 16:10:20 +0000 (18:10 +0200)
Release mcu message memory in case of failure in mt7915_mcu_add_beacon
routine

Fixes: e57b7901469fc ("mt76: add mac80211 driver for MT7915 PCIe-based chipsets")
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7915/mcu.c

index d43de43..c1b3b7a 100644 (file)
@@ -2428,14 +2428,6 @@ int mt7915_mcu_add_beacon(struct ieee80211_hw *hw,
        struct bss_info_bcn *bcn;
        int len = MT7915_BEACON_UPDATE_SIZE + MAX_BEACON_SIZE;
 
-       rskb = mt7915_mcu_alloc_sta_req(dev, mvif, NULL, len);
-       if (IS_ERR(rskb))
-               return PTR_ERR(rskb);
-
-       tlv = mt7915_mcu_add_tlv(rskb, BSS_INFO_OFFLOAD, sizeof(*bcn));
-       bcn = (struct bss_info_bcn *)tlv;
-       bcn->enable = en;
-
        skb = ieee80211_beacon_get_template(hw, vif, &offs);
        if (!skb)
                return -EINVAL;
@@ -2446,6 +2438,16 @@ int mt7915_mcu_add_beacon(struct ieee80211_hw *hw,
                return -EINVAL;
        }
 
+       rskb = mt7915_mcu_alloc_sta_req(dev, mvif, NULL, len);
+       if (IS_ERR(rskb)) {
+               dev_kfree_skb(skb);
+               return PTR_ERR(rskb);
+       }
+
+       tlv = mt7915_mcu_add_tlv(rskb, BSS_INFO_OFFLOAD, sizeof(*bcn));
+       bcn = (struct bss_info_bcn *)tlv;
+       bcn->enable = en;
+
        if (mvif->band_idx) {
                info = IEEE80211_SKB_CB(skb);
                info->hw_queue |= MT_TX_HW_QUEUE_EXT_PHY;