lkml.org 
[lkml]   [2018]   [Nov]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.18 75/83] cw1200: Dont leak memory if krealloc failes
    Date
    3.18-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Johannes Thumshirn <jthumshirn@suse.de>

    commit 9afdd6128c39f42398041bb2e017d8df0dcebcd1 upstream.

    The call to krealloc() in wsm_buf_reserve() directly assigns the newly
    returned memory to buf->begin. This is all fine except when krealloc()
    failes we loose the ability to free the old memory pointed to by
    buf->begin. If we just create a temporary variable to assign memory to
    and assign the memory to it we can mitigate the memory leak.

    Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de>
    Cc: Johannes Berg <johannes@sipsolutions.net>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/net/wireless/cw1200/wsm.c | 16 +++++++++-------
    1 file changed, 9 insertions(+), 7 deletions(-)

    --- a/drivers/net/wireless/cw1200/wsm.c
    +++ b/drivers/net/wireless/cw1200/wsm.c
    @@ -1807,16 +1807,18 @@ static int wsm_buf_reserve(struct wsm_bu
    {
    size_t pos = buf->data - buf->begin;
    size_t size = pos + extra_size;
    + u8 *tmp;

    size = round_up(size, FWLOAD_BLOCK_SIZE);

    - buf->begin = krealloc(buf->begin, size, GFP_KERNEL | GFP_DMA);
    - if (buf->begin) {
    - buf->data = &buf->begin[pos];
    - buf->end = &buf->begin[size];
    - return 0;
    - } else {
    - buf->end = buf->data = buf->begin;
    + tmp = krealloc(buf->begin, size, GFP_KERNEL | GFP_DMA);
    + if (!tmp) {
    + wsm_buf_deinit(buf);
    return -ENOMEM;
    }
    +
    + buf->begin = tmp;
    + buf->data = &buf->begin[pos];
    + buf->end = &buf->begin[size];
    + return 0;
    }

    \
     
     \ /
      Last update: 2018-11-29 15:17    [W:2.203 / U:0.384 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site