lkml.org 
[lkml]   [2015]   [Dec]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3] staging: wilc1000: fix double mutex_unlock on failure path in wilc_wlan_cleanup()
    Date
    If hif_read_reg() or hif_write_reg() fail in wilc_wlan_cleanup(),
    it calls release_bus() and continues execution. But it leads to double
    release_bus() call that means double unlock of g_linux_wlan->hif_cs mutex.

    Found by Linux Driver Verification project (linuxtesting.org).

    Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
    ---
    drivers/staging/wilc1000/wilc_wlan.c | 5 +++--
    1 file changed, 3 insertions(+), 2 deletions(-)

    diff --git a/drivers/staging/wilc1000/wilc_wlan.c b/drivers/staging/wilc1000/wilc_wlan.c
    index 83af51b..b8c4a63 100644
    --- a/drivers/staging/wilc1000/wilc_wlan.c
    +++ b/drivers/staging/wilc1000/wilc_wlan.c
    @@ -1381,15 +1381,16 @@ void wilc_wlan_cleanup(struct net_device *dev)
    ret = wilc->hif_func->hif_read_reg(wilc, WILC_GP_REG_0, &reg);
    if (!ret) {
    PRINT_ER("Error while reading reg\n");
    - release_bus(wilc, RELEASE_ALLOW_SLEEP);
    + goto unlock;
    }
    PRINT_ER("Writing ABORT reg\n");
    ret = wilc->hif_func->hif_write_reg(wilc, WILC_GP_REG_0,
    (reg | ABORT_INT));
    if (!ret) {
    PRINT_ER("Error while writing reg\n");
    - release_bus(wilc, RELEASE_ALLOW_SLEEP);
    + goto unlock;
    }
    +unlock:
    release_bus(wilc, RELEASE_ALLOW_SLEEP);
    wilc->hif_func->hif_deinit(NULL);
    }
    --
    1.9.1


    \
     
     \ /
      Last update: 2015-12-22 19:01    [W:5.846 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site