mt76: fix memory leak if device probing fails
authorLorenzo Bianconi <lorenzo@kernel.org>
Tue, 13 Oct 2020 08:33:49 +0000 (10:33 +0200)
committerFelix Fietkau <nbd@nbd.name>
Fri, 4 Dec 2020 13:31:11 +0000 (14:31 +0100)
Run mt76_free_device instead of ieee80211_free_hw if device probing
fails in order to remove the already allocated mt76 workqueue

Fixes: a86f1d01f5ce5 ("mt76: move mt76 workqueue in common code")
Fixes: f1d962369d568 ("mt76: mt7915: implement HE per-rate tx power support")
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7603/pci.c
drivers/net/wireless/mediatek/mt76/mt7615/mmio.c
drivers/net/wireless/mediatek/mt76/mt76x0/pci.c
drivers/net/wireless/mediatek/mt76/mt76x2/pci.c
drivers/net/wireless/mediatek/mt76/mt7915/pci.c

index a5845da3547a93830f59508b5dd247fd804bc0f4..06fa28f645f28e4aa61803b3d59ede9c0dced1d6 100644 (file)
@@ -57,7 +57,8 @@ mt76pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 
        return 0;
 error:
-       ieee80211_free_hw(mt76_hw(dev));
+       mt76_free_device(&dev->mt76);
+
        return ret;
 }
 
index b108324aa81642197de27f7ba92cf11c0dde2351..a7f92fa0488f45bc7e4a756af147e2a72160894d 100644 (file)
@@ -240,7 +240,8 @@ int mt7615_mmio_probe(struct device *pdev, void __iomem *mem_base,
 
        return 0;
 error:
-       ieee80211_free_hw(mt76_hw(dev));
+       mt76_free_device(&dev->mt76);
+
        return ret;
 }
 
index dda11c704abaa62c8f420f4ee156cf96dd2298f7..b87d8e136cb9af3730a5d5df649767a2caf053b3 100644 (file)
@@ -194,7 +194,8 @@ mt76x0e_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        return 0;
 
 error:
-       ieee80211_free_hw(mt76_hw(dev));
+       mt76_free_device(&dev->mt76);
+
        return ret;
 }
 
index 4d50dad29ddffae5f364744946a92bd9fdcf72b5..ecaf85b483ac3f5b5915861fb6ec6a24757252dc 100644 (file)
@@ -90,7 +90,8 @@ mt76x2e_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        return 0;
 
 error:
-       ieee80211_free_hw(mt76_hw(dev));
+       mt76_free_device(&dev->mt76);
+
        return ret;
 }
 
index fe62b4d853e482f1b0ccd954ec659002966b947e..3ac5bbb94d29417fe72f3dc6fad4070128b64579 100644 (file)
@@ -140,7 +140,7 @@ static int mt7915_pci_probe(struct pci_dev *pdev,
        dev = container_of(mdev, struct mt7915_dev, mt76);
        ret = mt7915_alloc_device(pdev, dev);
        if (ret)
-               return ret;
+               goto error;
 
        mt76_mmio_init(&dev->mt76, pcim_iomap_table(pdev)[0]);
        mdev->rev = (mt7915_l1_rr(dev, MT_HW_CHIPID) << 16) |
@@ -163,7 +163,8 @@ static int mt7915_pci_probe(struct pci_dev *pdev,
 
        return 0;
 error:
-       ieee80211_free_hw(mt76_hw(dev));
+       mt76_free_device(&dev->mt76);
+
        return ret;
 }