2012-12-26 20:51:14

by Jesper Juhl

[permalink] [raw]
Subject: [PATCH] rtlwifi: Don't leak on error in _rtl_usb_receive()

We fail to release 'urb' if '_rtl_prep_rx_urb()' fails in
_rtl_usb_receive().
This patch should take care of the leak.

Signed-off-by: Jesper Juhl <[email protected]>
---
drivers/net/wireless/rtlwifi/usb.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)

note: compile tested only.

diff --git a/drivers/net/wireless/rtlwifi/usb.c b/drivers/net/wireless/rtlwifi/usb.c
index 29f0969..75c29e6 100644
--- a/drivers/net/wireless/rtlwifi/usb.c
+++ b/drivers/net/wireless/rtlwifi/usb.c
@@ -640,6 +640,7 @@ static int _rtl_usb_receive(struct ieee80211_hw *hw)
RT_TRACE(rtlpriv, COMP_USB, DBG_EMERG,
"Failed to prep_rx_urb!!\n");
err = PTR_ERR(skb);
+ usb_free_urb(urb);
goto err_out;
}

--
1.7.1


--
Jesper Juhl <[email protected]> http://www.chaosbits.net/
Don't top-post http://www.catb.org/jargon/html/T/top-post.html
Plain text mails only, please.



2012-12-26 21:15:24

by Larry Finger

[permalink] [raw]
Subject: Re: [PATCH] rtlwifi: Don't leak on error in _rtl_usb_receive()

On 12/26/2012 02:51 PM, Jesper Juhl wrote:
> We fail to release 'urb' if '_rtl_prep_rx_urb()' fails in
> _rtl_usb_receive().
> This patch should take care of the leak.
>
> Signed-off-by: Jesper Juhl <[email protected]>
> ---
> drivers/net/wireless/rtlwifi/usb.c | 1 +
> 1 files changed, 1 insertions(+), 0 deletions(-)
>
> note: compile tested only.

This looks correct to me. I have never seen that RT_TRACE() fire, thus such an
error must be uncommon, at least on my system.

Acked-by: Larry Finger <[email protected]>

Thanks,

Larry

>
> diff --git a/drivers/net/wireless/rtlwifi/usb.c b/drivers/net/wireless/rtlwifi/usb.c
> index 29f0969..75c29e6 100644
> --- a/drivers/net/wireless/rtlwifi/usb.c
> +++ b/drivers/net/wireless/rtlwifi/usb.c
> @@ -640,6 +640,7 @@ static int _rtl_usb_receive(struct ieee80211_hw *hw)
> RT_TRACE(rtlpriv, COMP_USB, DBG_EMERG,
> "Failed to prep_rx_urb!!\n");
> err = PTR_ERR(skb);
> + usb_free_urb(urb);
> goto err_out;
> }
>
>