| From a216a264a85da73fc6b31673854e84e772350c7a Mon Sep 17 00:00:00 2001 |
| From: Navid Emamdoost <navid.emamdoost@gmail.com> |
| Date: Tue, 24 Sep 2019 20:20:21 -0500 |
| Subject: [PATCH] rtlwifi: prevent memory leak in rtl_usb_probe |
| |
| commit 3f93616951138a598d930dcaec40f2bfd9ce43bb upstream. |
| |
| 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> |
| Signed-off-by: Kalle Valo <kvalo@codeaurora.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/net/wireless/realtek/rtlwifi/usb.c b/drivers/net/wireless/realtek/rtlwifi/usb.c |
| index 34d68dbf4b4c..de770bbc3aa2 100644 |
| --- a/drivers/net/wireless/realtek/rtlwifi/usb.c |
| +++ b/drivers/net/wireless/realtek/rtlwifi/usb.c |
| @@ -1033,8 +1033,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); |
| @@ -1095,6 +1097,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); |
| -- |
| 2.7.4 |
| |