lkml.org 
[lkml]   [2019]   [Apr]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 30/70] staging: comedi: ni_usb6501: Fix possible double-free of ->usb_rx_buf
    Date
    From: Ian Abbott <abbotti@mev.co.uk>

    commit af4b54a2e5ba18259ff9aac445bf546dd60d037e upstream.

    `ni6501_alloc_usb_buffers()` is called from `ni6501_auto_attach()` to
    allocate RX and TX buffers for USB transfers. It allocates
    `devpriv->usb_rx_buf` followed by `devpriv->usb_tx_buf`. If the
    allocation of `devpriv->usb_tx_buf` fails, it frees
    `devpriv->usb_rx_buf`, leaving the pointer set dangling, and returns an
    error. Later, `ni6501_detach()` will be called from the core comedi
    module code to clean up. `ni6501_detach()` also frees both
    `devpriv->usb_rx_buf` and `devpriv->usb_tx_buf`, but
    `devpriv->usb_rx_buf` may have already beed freed, leading to a
    double-free error. Fix it bu removing the call to
    `kfree(devpriv->usb_rx_buf)` from `ni6501_alloc_usb_buffers()`, relying
    on `ni6501_detach()` to free the memory.

    Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/staging/comedi/drivers/ni_usb6501.c | 4 +---
    1 file changed, 1 insertion(+), 3 deletions(-)

    --- a/drivers/staging/comedi/drivers/ni_usb6501.c
    +++ b/drivers/staging/comedi/drivers/ni_usb6501.c
    @@ -472,10 +472,8 @@ static int ni6501_alloc_usb_buffers(stru

    size = usb_endpoint_maxp(devpriv->ep_tx);
    devpriv->usb_tx_buf = kzalloc(size, GFP_KERNEL);
    - if (!devpriv->usb_tx_buf) {
    - kfree(devpriv->usb_rx_buf);
    + if (!devpriv->usb_tx_buf)
    return -ENOMEM;
    - }

    return 0;
    }

    \
     
     \ /
      Last update: 2019-04-24 19:51    [W:2.279 / U:0.088 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site