diff mbox series

rtlwifi: prevent memory leak in rtl_usb_probe

Message ID 20190925012022.13727-1-navid.emamdoost@gmail.com (mailing list archive)
State Accepted
Commit 3f93616951138a598d930dcaec40f2bfd9ce43bb
Delegated to: Kalle Valo
Headers show
Series rtlwifi: prevent memory leak in rtl_usb_probe | expand

Commit Message

Navid Emamdoost Sept. 25, 2019, 1:20 a.m. UTC
In rtl_usb_probe if allocation for usb_data fails the allocated hw
should be released. In addition the allocated rtlpriv->usb_data should
be released on error handling path.

Signed-off-by: Navid Emamdoost <navid.emamdoost@gmail.com>
---
 drivers/net/wireless/realtek/rtlwifi/usb.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Kalle Valo Oct. 1, 2019, 9:20 a.m. UTC | #1
Navid Emamdoost <navid.emamdoost@gmail.com> wrote:

> In rtl_usb_probe if allocation for usb_data fails the allocated hw
> should be released. In addition the allocated rtlpriv->usb_data should
> be released on error handling path.
> 
> Signed-off-by: Navid Emamdoost <navid.emamdoost@gmail.com>

Patch applied to wireless-drivers-next.git, thanks.

3f9361695113 rtlwifi: prevent memory leak in rtl_usb_probe
diff mbox series

Patch

diff --git a/drivers/net/wireless/realtek/rtlwifi/usb.c b/drivers/net/wireless/realtek/rtlwifi/usb.c
index 4b59f3b46b28..348b0072cdd6 100644
--- a/drivers/net/wireless/realtek/rtlwifi/usb.c
+++ b/drivers/net/wireless/realtek/rtlwifi/usb.c
@@ -1021,8 +1021,10 @@  int rtl_usb_probe(struct usb_interface *intf,
 	rtlpriv->hw = hw;
 	rtlpriv->usb_data = kcalloc(RTL_USB_MAX_RX_COUNT, sizeof(u32),
 				    GFP_KERNEL);
-	if (!rtlpriv->usb_data)
+	if (!rtlpriv->usb_data) {
+		ieee80211_free_hw(hw);
 		return -ENOMEM;
+	}
 
 	/* this spin lock must be initialized early */
 	spin_lock_init(&rtlpriv->locks.usb_lock);
@@ -1083,6 +1085,7 @@  int rtl_usb_probe(struct usb_interface *intf,
 	_rtl_usb_io_handler_release(hw);
 	usb_put_dev(udev);
 	complete(&rtlpriv->firmware_loading_complete);
+	kfree(rtlpriv->usb_data);
 	return -ENODEV;
 }
 EXPORT_SYMBOL(rtl_usb_probe);