lkml.org 
[lkml]   [2020]   [May]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.4 19/32] usb: phy: twl6030-usb: Fix a resource leak in an error handling path in 'twl6030_usb_probe()'
    Date
    From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>

    [ Upstream commit f058764d19000d98aef72010468db1f69faf9fa0 ]

    A call to 'regulator_get()' is hidden in 'twl6030_usb_ldo_init()'. A
    corresponding put must be performed in the error handling path, as
    already done in the remove function.

    While at it, also move a 'free_irq()' call in the error handling path in
    order to be consistent.

    Reviewed-by: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Signed-off-by: Felipe Balbi <balbi@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/usb/phy/phy-twl6030-usb.c | 12 +++++++++---
    1 file changed, 9 insertions(+), 3 deletions(-)

    diff --git a/drivers/usb/phy/phy-twl6030-usb.c b/drivers/usb/phy/phy-twl6030-usb.c
    index bfebf1f2e991..9a7e655d5280 100644
    --- a/drivers/usb/phy/phy-twl6030-usb.c
    +++ b/drivers/usb/phy/phy-twl6030-usb.c
    @@ -377,7 +377,7 @@ static int twl6030_usb_probe(struct platform_device *pdev)
    if (status < 0) {
    dev_err(&pdev->dev, "can't get IRQ %d, err %d\n",
    twl->irq1, status);
    - return status;
    + goto err_put_regulator;
    }

    status = request_threaded_irq(twl->irq2, NULL, twl6030_usb_irq,
    @@ -386,8 +386,7 @@ static int twl6030_usb_probe(struct platform_device *pdev)
    if (status < 0) {
    dev_err(&pdev->dev, "can't get IRQ %d, err %d\n",
    twl->irq2, status);
    - free_irq(twl->irq1, twl);
    - return status;
    + goto err_free_irq1;
    }

    twl->asleep = 0;
    @@ -396,6 +395,13 @@ static int twl6030_usb_probe(struct platform_device *pdev)
    dev_info(&pdev->dev, "Initialized TWL6030 USB module\n");

    return 0;
    +
    +err_free_irq1:
    + free_irq(twl->irq1, twl);
    +err_put_regulator:
    + regulator_put(twl->usb3v3);
    +
    + return status;
    }

    static int twl6030_usb_remove(struct platform_device *pdev)
    --
    2.25.1
    \
     
     \ /
      Last update: 2020-05-22 16:56    [W:4.163 / U:0.128 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site