lkml.org 
[lkml]   [2018]   [Oct]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 07/45] clocksource/drivers/timer-atmel-pit: Properly handle error cases
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

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

    From: Alexandre Belloni <alexandre.belloni@bootlin.com>

    commit 52bf4a900d9cede3eb14982d0f2c5e6db6d97cc3 upstream.

    The smatch utility reports a possible leak:

    smatch warnings:
    drivers/clocksource/timer-atmel-pit.c:183 at91sam926x_pit_dt_init() warn: possible memory leak of 'data'

    Ensure data is freed before exiting with an error.

    Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/clocksource/timer-atmel-pit.c | 20 ++++++++++++++------
    1 file changed, 14 insertions(+), 6 deletions(-)

    --- a/drivers/clocksource/timer-atmel-pit.c
    +++ b/drivers/clocksource/timer-atmel-pit.c
    @@ -180,26 +180,29 @@ static int __init at91sam926x_pit_dt_ini
    data->base = of_iomap(node, 0);
    if (!data->base) {
    pr_err("Could not map PIT address\n");
    - return -ENXIO;
    + ret = -ENXIO;
    + goto exit;
    }

    data->mck = of_clk_get(node, 0);
    if (IS_ERR(data->mck)) {
    pr_err("Unable to get mck clk\n");
    - return PTR_ERR(data->mck);
    + ret = PTR_ERR(data->mck);
    + goto exit;
    }

    ret = clk_prepare_enable(data->mck);
    if (ret) {
    pr_err("Unable to enable mck\n");
    - return ret;
    + goto exit;
    }

    /* Get the interrupts property */
    data->irq = irq_of_parse_and_map(node, 0);
    if (!data->irq) {
    pr_err("Unable to get IRQ from DT\n");
    - return -EINVAL;
    + ret = -EINVAL;
    + goto exit;
    }

    /*
    @@ -227,7 +230,7 @@ static int __init at91sam926x_pit_dt_ini
    ret = clocksource_register_hz(&data->clksrc, pit_rate);
    if (ret) {
    pr_err("Failed to register clocksource\n");
    - return ret;
    + goto exit;
    }

    /* Set up irq handler */
    @@ -236,7 +239,8 @@ static int __init at91sam926x_pit_dt_ini
    "at91_tick", data);
    if (ret) {
    pr_err("Unable to setup IRQ\n");
    - return ret;
    + clocksource_unregister(&data->clksrc);
    + goto exit;
    }

    /* Set up and register clockevents */
    @@ -254,6 +258,10 @@ static int __init at91sam926x_pit_dt_ini
    clockevents_register_device(&data->clkevt);

    return 0;
    +
    +exit:
    + kfree(data);
    + return ret;
    }
    TIMER_OF_DECLARE(at91sam926x_pit, "atmel,at91sam9260-pit",
    at91sam926x_pit_dt_init);

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