lkml.org 
[lkml]   [2021]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.13 718/800] staging: rtl8712: fix error handling in r871xu_drv_init
    Date
    From: Pavel Skripkin <paskripkin@gmail.com>

    [ Upstream commit d1d3e3cdfda8eb91f0e24be7ec8be1e6e01b3a1c ]

    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: 2865d42c78a9 ("staging: r8712u: Add the new driver to the mainline kernel")
    Signed-off-by: Pavel Skripkin <paskripkin@gmail.com>
    Link: https://lore.kernel.org/r/febb00f72354449bb4d305f373d6d2f47e539ab4.1623620630.git.paskripkin@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/staging/rtl8712/os_intfs.c | 4 ----
    drivers/staging/rtl8712/usb_intf.c | 24 ++++++++++++++----------
    2 files changed, 14 insertions(+), 14 deletions(-)

    diff --git a/drivers/staging/rtl8712/os_intfs.c b/drivers/staging/rtl8712/os_intfs.c
    index 0c3ae8495afb..2214aca09730 100644
    --- a/drivers/staging/rtl8712/os_intfs.c
    +++ b/drivers/staging/rtl8712/os_intfs.c
    @@ -328,8 +328,6 @@ int r8712_init_drv_sw(struct _adapter *padapter)

    void r8712_free_drv_sw(struct _adapter *padapter)
    {
    - struct net_device *pnetdev = padapter->pnetdev;
    -
    r8712_free_cmd_priv(&padapter->cmdpriv);
    r8712_free_evt_priv(&padapter->evtpriv);
    r8712_DeInitSwLeds(padapter);
    @@ -339,8 +337,6 @@ void r8712_free_drv_sw(struct _adapter *padapter)
    _r8712_free_sta_priv(&padapter->stapriv);
    _r8712_free_recv_priv(&padapter->recvpriv);
    mp871xdeinit(padapter);
    - if (pnetdev)
    - free_netdev(pnetdev);
    }

    static void enable_video_mode(struct _adapter *padapter, int cbw40_value)
    diff --git a/drivers/staging/rtl8712/usb_intf.c b/drivers/staging/rtl8712/usb_intf.c
    index dc21e7743349..b760bc355937 100644
    --- a/drivers/staging/rtl8712/usb_intf.c
    +++ b/drivers/staging/rtl8712/usb_intf.c
    @@ -361,7 +361,7 @@ static int r871xu_drv_init(struct usb_interface *pusb_intf,
    /* step 1. */
    pnetdev = r8712_init_netdev();
    if (!pnetdev)
    - goto error;
    + goto put_dev;
    padapter = netdev_priv(pnetdev);
    disable_ht_for_spec_devid(pdid, padapter);
    pdvobjpriv = &padapter->dvobjpriv;
    @@ -381,16 +381,16 @@ static int r871xu_drv_init(struct usb_interface *pusb_intf,
    * initialize the dvobj_priv
    */
    if (!padapter->dvobj_init) {
    - goto error;
    + goto put_dev;
    } else {
    status = padapter->dvobj_init(padapter);
    if (status != _SUCCESS)
    - goto error;
    + goto free_netdev;
    }
    /* step 4. */
    status = r8712_init_drv_sw(padapter);
    if (status)
    - goto error;
    + goto dvobj_deinit;
    /* step 5. read efuse/eeprom data and get mac_addr */
    {
    int i, offset;
    @@ -570,17 +570,20 @@ static int r871xu_drv_init(struct usb_interface *pusb_intf,
    }
    /* step 6. Load the firmware asynchronously */
    if (rtl871x_load_fw(padapter))
    - goto error;
    + goto deinit_drv_sw;
    spin_lock_init(&padapter->lock_rx_ff0_filter);
    mutex_init(&padapter->mutex_start);
    return 0;
    -error:
    +
    +deinit_drv_sw:
    + r8712_free_drv_sw(padapter);
    +dvobj_deinit:
    + padapter->dvobj_deinit(padapter);
    +free_netdev:
    + free_netdev(pnetdev);
    +put_dev:
    usb_put_dev(udev);
    usb_set_intfdata(pusb_intf, NULL);
    - if (padapter && padapter->dvobj_deinit)
    - padapter->dvobj_deinit(padapter);
    - if (pnetdev)
    - free_netdev(pnetdev);
    return -ENODEV;
    }

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

    /* decrease the reference count of the usb device structure
    * when disconnect
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-07-12 10:53    [W:4.087 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site