lkml.org 
[lkml]   [2018]   [May]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 282/329] regulator: gpio: Fix some error handling paths in gpio_regulator_probe()
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

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

    From: Christophe Jaillet <christophe.jaillet@wanadoo.fr>

    [ Upstream commit ed8cffda27dea6fd3dafb3ee881c5a786edac9ca ]

    Re-order error handling code and gotos to avoid leaks in error handling
    paths.

    Fixes: 9f946099fe19 ("regulator: gpio: fix parsing of gpio list")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/regulator/gpio-regulator.c | 16 +++++++---------
    1 file changed, 7 insertions(+), 9 deletions(-)

    --- a/drivers/regulator/gpio-regulator.c
    +++ b/drivers/regulator/gpio-regulator.c
    @@ -268,8 +268,7 @@ static int gpio_regulator_probe(struct p
    drvdata->desc.name = kstrdup(config->supply_name, GFP_KERNEL);
    if (drvdata->desc.name == NULL) {
    dev_err(&pdev->dev, "Failed to allocate supply name\n");
    - ret = -ENOMEM;
    - goto err;
    + return -ENOMEM;
    }

    if (config->nr_gpios != 0) {
    @@ -289,7 +288,7 @@ static int gpio_regulator_probe(struct p
    dev_err(&pdev->dev,
    "Could not obtain regulator setting GPIOs: %d\n",
    ret);
    - goto err_memstate;
    + goto err_memgpio;
    }
    }

    @@ -300,7 +299,7 @@ static int gpio_regulator_probe(struct p
    if (drvdata->states == NULL) {
    dev_err(&pdev->dev, "Failed to allocate state data\n");
    ret = -ENOMEM;
    - goto err_memgpio;
    + goto err_stategpio;
    }
    drvdata->nr_states = config->nr_states;

    @@ -321,7 +320,7 @@ static int gpio_regulator_probe(struct p
    default:
    dev_err(&pdev->dev, "No regulator type set\n");
    ret = -EINVAL;
    - goto err_memgpio;
    + goto err_memstate;
    }

    /* build initial state from gpio init data. */
    @@ -358,22 +357,21 @@ static int gpio_regulator_probe(struct p
    if (IS_ERR(drvdata->dev)) {
    ret = PTR_ERR(drvdata->dev);
    dev_err(&pdev->dev, "Failed to register regulator: %d\n", ret);
    - goto err_stategpio;
    + goto err_memstate;
    }

    platform_set_drvdata(pdev, drvdata);

    return 0;

    -err_stategpio:
    - gpio_free_array(drvdata->gpios, drvdata->nr_gpios);
    err_memstate:
    kfree(drvdata->states);
    +err_stategpio:
    + gpio_free_array(drvdata->gpios, drvdata->nr_gpios);
    err_memgpio:
    kfree(drvdata->gpios);
    err_name:
    kfree(drvdata->desc.name);
    -err:
    return ret;
    }


    \
     
     \ /
      Last update: 2018-05-28 16:04    [W:3.905 / U:0.788 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site