2020-06-21 16:04:27

by Lorenzo Bianconi

[permalink] [raw]
Subject: [PATCH v2 wireless-drivers] mt76: mt7663u: fix memory leaks in mt7663u_probe

Fix the two following memory leaks in mt7663u_probe:
1- if device power-own times out, remove ieee80211 hw device.
2- if mt76u queues allocation fails, remove pending urbs.

Fixes: eb99cc95c3b65 ("mt76: mt7615: introduce mt7663u support")
Signed-off-by: Lorenzo Bianconi <[email protected]>
---
Changes since v1:
- properly set return value if device power-own fails
---
.../net/wireless/mediatek/mt76/mt7615/usb.c | 11 +++++-----
drivers/net/wireless/mediatek/mt76/usb.c | 22 ++++++++++++++-----
2 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/usb.c b/drivers/net/wireless/mediatek/mt76/mt7615/usb.c
index a50077eb24d7..c7763e209e00 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/usb.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/usb.c
@@ -329,25 +329,26 @@ static int mt7663u_probe(struct usb_interface *usb_intf,
if (!mt76_poll_msec(dev, MT_CONN_ON_MISC, MT_TOP_MISC2_FW_PWR_ON,
FW_STATE_PWR_ON << 1, 500)) {
dev_err(dev->mt76.dev, "Timeout for power on\n");
- return -EIO;
+ ret = -EIO;
+ goto error;
}

alloc_queues:
ret = mt76u_alloc_mcu_queue(&dev->mt76);
if (ret)
- goto error;
+ goto error_free_q;

ret = mt76u_alloc_queues(&dev->mt76);
if (ret)
- goto error;
+ goto error_free_q;

ret = mt7663u_register_device(dev);
if (ret)
- goto error_freeq;
+ goto error_free_q;

return 0;

-error_freeq:
+error_free_q:
mt76u_queues_deinit(&dev->mt76);
error:
mt76u_deinit(&dev->mt76);
diff --git a/drivers/net/wireless/mediatek/mt76/usb.c b/drivers/net/wireless/mediatek/mt76/usb.c
index fb97ea25b4d4..2e89b0514ff6 100644
--- a/drivers/net/wireless/mediatek/mt76/usb.c
+++ b/drivers/net/wireless/mediatek/mt76/usb.c
@@ -1066,11 +1066,16 @@ static int mt76u_alloc_tx(struct mt76_dev *dev)

static void mt76u_free_tx(struct mt76_dev *dev)
{
- struct mt76_queue *q;
- int i, j;
+ int i;

for (i = 0; i < IEEE80211_NUM_ACS; i++) {
+ struct mt76_queue *q;
+ int j;
+
q = dev->q_tx[i].q;
+ if (!q)
+ continue;
+
for (j = 0; j < q->ndesc; j++)
usb_free_urb(q->entry[j].urb);
}
@@ -1078,17 +1083,22 @@ static void mt76u_free_tx(struct mt76_dev *dev)

void mt76u_stop_tx(struct mt76_dev *dev)
{
- struct mt76_queue_entry entry;
- struct mt76_queue *q;
- int i, j, ret;
+ int ret;

ret = wait_event_timeout(dev->tx_wait, !mt76_has_tx_pending(&dev->phy),
HZ / 5);
if (!ret) {
+ struct mt76_queue_entry entry;
+ struct mt76_queue *q;
+ int i, j;
+
dev_err(dev->dev, "timed out waiting for pending tx\n");

for (i = 0; i < IEEE80211_NUM_ACS; i++) {
q = dev->q_tx[i].q;
+ if (!q)
+ continue;
+
for (j = 0; j < q->ndesc; j++)
usb_kill_urb(q->entry[j].urb);
}
@@ -1100,6 +1110,8 @@ void mt76u_stop_tx(struct mt76_dev *dev)
*/
for (i = 0; i < IEEE80211_NUM_ACS; i++) {
q = dev->q_tx[i].q;
+ if (!q)
+ continue;

/* Assure we are in sync with killed tasklet. */
spin_lock_bh(&q->lock);
--
2.26.2


2020-06-22 14:22:00

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH v2 wireless-drivers] mt76: mt7663u: fix memory leaks in mt7663u_probe

Lorenzo Bianconi <[email protected]> writes:

> Fix the two following memory leaks in mt7663u_probe:
> 1- if device power-own times out, remove ieee80211 hw device.
> 2- if mt76u queues allocation fails, remove pending urbs.

One logical change per patch, please. If you have to create a list of
changes in the commit log that's a good sign that you need to split the
patch :)

--
https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches

2020-06-22 14:41:45

by Lorenzo Bianconi

[permalink] [raw]
Subject: Re: [PATCH v2 wireless-drivers] mt76: mt7663u: fix memory leaks in mt7663u_probe

> Lorenzo Bianconi <[email protected]> writes:
>
> > Fix the two following memory leaks in mt7663u_probe:
> > 1- if device power-own times out, remove ieee80211 hw device.
> > 2- if mt76u queues allocation fails, remove pending urbs.
>
> One logical change per patch, please. If you have to create a list of
> changes in the commit log that's a good sign that you need to split the
> patch :)

Hi Kalle,

both of them are memory leaks in the error path of the same routine (mt7663u_probe()).
Do I need to split them even in this case? If so I am fine with it.
Do I need to send a v3?

Regards,
Lorenzo

>
> --
> https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
>


Attachments:
(No filename) (722.00 B)
signature.asc (235.00 B)
Download all attachments

2020-06-22 15:01:47

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH v2 wireless-drivers] mt76: mt7663u: fix memory leaks in mt7663u_probe

Lorenzo Bianconi <[email protected]> writes:

>> Lorenzo Bianconi <[email protected]> writes:
>>
>> > Fix the two following memory leaks in mt7663u_probe:
>> > 1- if device power-own times out, remove ieee80211 hw device.
>> > 2- if mt76u queues allocation fails, remove pending urbs.
>>
>> One logical change per patch, please. If you have to create a list of
>> changes in the commit log that's a good sign that you need to split the
>> patch :)
>
> both of them are memory leaks in the error path of the same routine (mt7663u_probe()).
> Do I need to split them even in this case? If so I am fine with it.
> Do I need to send a v3?

Oh, I didn't notice that they were in the same function. So I guess this
sort of gray area and no need to send v3 because of this.

--
https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches

2020-06-22 15:04:10

by Lorenzo Bianconi

[permalink] [raw]
Subject: Re: [PATCH v2 wireless-drivers] mt76: mt7663u: fix memory leaks in mt7663u_probe

> Lorenzo Bianconi <[email protected]> writes:
>
> >> Lorenzo Bianconi <[email protected]> writes:
> >>
> >> > Fix the two following memory leaks in mt7663u_probe:
> >> > 1- if device power-own times out, remove ieee80211 hw device.
> >> > 2- if mt76u queues allocation fails, remove pending urbs.
> >>
> >> One logical change per patch, please. If you have to create a list of
> >> changes in the commit log that's a good sign that you need to split the
> >> patch :)
> >
> > both of them are memory leaks in the error path of the same routine (mt7663u_probe()).
> > Do I need to split them even in this case? If so I am fine with it.
> > Do I need to send a v3?
>
> Oh, I didn't notice that they were in the same function. So I guess this
> sort of gray area and no need to send v3 because of this.

ack, I will take into account for the next time, thanks :)

Regards,
Lorenzo

>
> --
> https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
>


Attachments:
(No filename) (0.99 kB)
signature.asc (235.00 B)
Download all attachments

2020-06-23 08:45:47

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH v2 wireless-drivers] mt76: mt7663u: fix memory leaks in mt7663u_probe

Lorenzo Bianconi <[email protected]> wrote:

> Fix the two following memory leaks in mt7663u_probe:
> 1- if device power-own times out, remove ieee80211 hw device.
> 2- if mt76u queues allocation fails, remove pending urbs.
>
> Fixes: eb99cc95c3b65 ("mt76: mt7615: introduce mt7663u support")
> Signed-off-by: Lorenzo Bianconi <[email protected]>

Patch applied to wireless-drivers.git, thanks.

b1e79d105516 mt76: mt7663u: fix memory leaks in mt7663u_probe

--
https://patchwork.kernel.org/patch/11616619/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches