Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 7288ff5

Browse files
x2018gregkh
authored andcommitted
staging: rtl8712: fix a potential memory leak in r871xu_drv_init()
In r871xu_drv_init(), if r8712_init_drv_sw() fails, then the memory allocated by r8712_alloc_io_queue() in r8712_usb_dvobj_init() is not properly released as there is no action will be performed by r8712_usb_dvobj_deinit(). To properly release it, we should call r8712_free_io_queue() in r8712_usb_dvobj_deinit(). Besides, in r871xu_dev_remove(), r8712_usb_dvobj_deinit() will be called by r871x_dev_unload() under condition `padapter->bup` and r8712_free_io_queue() is called by r8712_free_drv_sw(). However, r8712_usb_dvobj_deinit() does not rely on `padapter->bup` and calling r8712_free_io_queue() in r8712_free_drv_sw() is negative for better understading the code. So I move r8712_usb_dvobj_deinit() into r871xu_dev_remove(), and remove r8712_free_io_queue() from r8712_free_drv_sw(). Reviewed-by: Dan Carpenter <[email protected]> Signed-off-by: Xiaoke Wang <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent a461466 commit 7288ff5

File tree

2 files changed

+3
-4
lines changed

2 files changed

+3
-4
lines changed

drivers/staging/rtl8712/os_intfs.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,6 @@ void r8712_free_drv_sw(struct _adapter *padapter)
332332
r8712_free_evt_priv(&padapter->evtpriv);
333333
r8712_DeInitSwLeds(padapter);
334334
r8712_free_mlme_priv(&padapter->mlmepriv);
335-
r8712_free_io_queue(padapter);
336335
_free_xmit_priv(&padapter->xmitpriv);
337336
_r8712_free_sta_priv(&padapter->stapriv);
338337
_r8712_free_recv_priv(&padapter->recvpriv);

drivers/staging/rtl8712/usb_intf.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,7 @@ static uint r8712_usb_dvobj_init(struct _adapter *padapter)
265265

266266
static void r8712_usb_dvobj_deinit(struct _adapter *padapter)
267267
{
268+
r8712_free_io_queue(padapter);
268269
}
269270

270271
void rtl871x_intf_stop(struct _adapter *padapter)
@@ -302,9 +303,6 @@ void r871x_dev_unload(struct _adapter *padapter)
302303
rtl8712_hal_deinit(padapter);
303304
}
304305

305-
/*s6.*/
306-
if (padapter->dvobj_deinit)
307-
padapter->dvobj_deinit(padapter);
308306
padapter->bup = false;
309307
}
310308
}
@@ -607,6 +605,8 @@ static void r871xu_dev_remove(struct usb_interface *pusb_intf)
607605
/* Stop driver mlme relation timer */
608606
r8712_stop_drv_timers(padapter);
609607
r871x_dev_unload(padapter);
608+
if (padapter->dvobj_deinit)
609+
padapter->dvobj_deinit(padapter);
610610
r8712_free_drv_sw(padapter);
611611
free_netdev(pnetdev);
612612

0 commit comments

Comments
 (0)