From 68c4eedafd61e2fc9a3246cfb5d148fdfe254d64 Mon Sep 17 00:00:00 2001 From: Lorenzo Bianconi Date: Tue, 13 Oct 2020 10:33:49 +0200 Subject: [PATCH] mt76: fix memory leak if device probing fails 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 --- mt7603/pci.c | 3 ++- mt7615/mmio.c | 3 ++- mt76x0/pci.c | 3 ++- mt76x2/pci.c | 3 ++- mt7915/pci.c | 5 +++-- 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/mt7603/pci.c b/mt7603/pci.c index a5845da3..06fa28f6 100644 --- a/mt7603/pci.c +++ b/mt7603/pci.c @@ -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; } diff --git a/mt7615/mmio.c b/mt7615/mmio.c index b108324a..a7f92fa0 100644 --- a/mt7615/mmio.c +++ b/mt7615/mmio.c @@ -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; } diff --git a/mt76x0/pci.c b/mt76x0/pci.c index dda11c70..b87d8e13 100644 --- a/mt76x0/pci.c +++ b/mt76x0/pci.c @@ -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; } diff --git a/mt76x2/pci.c b/mt76x2/pci.c index 4d50dad2..ecaf85b4 100644 --- a/mt76x2/pci.c +++ b/mt76x2/pci.c @@ -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; } diff --git a/mt7915/pci.c b/mt7915/pci.c index edc34192..3e7f1a30 100644 --- a/mt7915/pci.c +++ b/mt7915/pci.c @@ -108,7 +108,7 @@ static int mt7915_pci_probe(struct pci_dev *pdev, ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); if (ret) - return ret; + goto error; mdev = mt76_alloc_device(&pdev->dev, sizeof(*dev), &mt7915_ops, &drv_ops); @@ -138,7 +138,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; }