Skip to content

Commit d1d3e3c

Browse files
pskrgaggregkh
authored andcommitted
staging: rtl8712: fix error handling in r871xu_drv_init
Previous error handling path was unique for all possible errors and there was unnecessary branching. Also, one step for freeing drv_sw was missing. All these problems was fixed by restructuring error handling path. Also, moved out free_netdev() from r8712_free_drv_sw() for correct error handling. Fixes: 2865d42 ("staging: r8712u: Add the new driver to the mainline kernel") Signed-off-by: Pavel Skripkin <[email protected]> Link: https://lore.kernel.org/r/febb00f72354449bb4d305f373d6d2f47e539ab4.1623620630.git.paskripkin@gmail.com Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 69d998f commit d1d3e3c

File tree

2 files changed

+13
-13
lines changed

2 files changed

+13
-13
lines changed

drivers/staging/rtl8712/os_intfs.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -328,8 +328,6 @@ int r8712_init_drv_sw(struct _adapter *padapter)
328328

329329
void r8712_free_drv_sw(struct _adapter *padapter)
330330
{
331-
struct net_device *pnetdev = padapter->pnetdev;
332-
333331
r8712_free_cmd_priv(&padapter->cmdpriv);
334332
r8712_free_evt_priv(&padapter->evtpriv);
335333
r8712_DeInitSwLeds(padapter);
@@ -339,8 +337,6 @@ void r8712_free_drv_sw(struct _adapter *padapter)
339337
_r8712_free_sta_priv(&padapter->stapriv);
340338
_r8712_free_recv_priv(&padapter->recvpriv);
341339
mp871xdeinit(padapter);
342-
if (pnetdev)
343-
free_netdev(pnetdev);
344340
}
345341

346342
static void enable_video_mode(struct _adapter *padapter, int cbw40_value)

drivers/staging/rtl8712/usb_intf.c

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,7 @@ static int r871xu_drv_init(struct usb_interface *pusb_intf,
360360
/* step 1. */
361361
pnetdev = r8712_init_netdev();
362362
if (!pnetdev)
363-
goto error;
363+
goto put_dev;
364364
padapter = netdev_priv(pnetdev);
365365
disable_ht_for_spec_devid(pdid, padapter);
366366
pdvobjpriv = &padapter->dvobjpriv;
@@ -382,12 +382,12 @@ static int r871xu_drv_init(struct usb_interface *pusb_intf,
382382

383383
status = padapter->dvobj_init(padapter);
384384
if (status != _SUCCESS)
385-
goto error;
385+
goto free_netdev;
386386

387387
/* step 4. */
388388
status = r8712_init_drv_sw(padapter);
389389
if (status)
390-
goto error;
390+
goto dvobj_deinit;
391391
/* step 5. read efuse/eeprom data and get mac_addr */
392392
{
393393
int i, offset;
@@ -567,17 +567,20 @@ static int r871xu_drv_init(struct usb_interface *pusb_intf,
567567
}
568568
/* step 6. Load the firmware asynchronously */
569569
if (rtl871x_load_fw(padapter))
570-
goto error;
570+
goto deinit_drv_sw;
571571
spin_lock_init(&padapter->lock_rx_ff0_filter);
572572
mutex_init(&padapter->mutex_start);
573573
return 0;
574-
error:
574+
575+
deinit_drv_sw:
576+
r8712_free_drv_sw(padapter);
577+
dvobj_deinit:
578+
padapter->dvobj_deinit(padapter);
579+
free_netdev:
580+
free_netdev(pnetdev);
581+
put_dev:
575582
usb_put_dev(udev);
576583
usb_set_intfdata(pusb_intf, NULL);
577-
if (padapter && padapter->dvobj_deinit)
578-
padapter->dvobj_deinit(padapter);
579-
if (pnetdev)
580-
free_netdev(pnetdev);
581584
return -ENODEV;
582585
}
583586

@@ -609,6 +612,7 @@ static void r871xu_dev_remove(struct usb_interface *pusb_intf)
609612
r8712_stop_drv_timers(padapter);
610613
r871x_dev_unload(padapter);
611614
r8712_free_drv_sw(padapter);
615+
free_netdev(pnetdev);
612616

613617
/* decrease the reference count of the usb device structure
614618
* when disconnect

0 commit comments

Comments
 (0)