lkml.org 
[lkml]   [2021]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 477/593] firmware: stratix10-svc: Fix a resource leak in an error handling path
    Date
    From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>

    [ Upstream commit d99247f9b542533ddbf87a3481a05473b8e48194 ]

    If an error occurs after a successful 'kfifo_alloc()' call, it must be
    undone by a corresponding 'kfifo_free()' call, as already done in the
    remove function.

    While at it, move the 'platform_device_put()' call to this new error
    handling path and explicitly return 0 in the success path.

    Fixes: b5dc75c915cd ("firmware: stratix10-svc: extend svc to support new RSU features")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Link: https://lore.kernel.org/r/0ca3f3ab139c53e846804455a1e7599ee8ae896a.1621621271.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/firmware/stratix10-svc.c | 22 +++++++++++++++-------
    1 file changed, 15 insertions(+), 7 deletions(-)

    diff --git a/drivers/firmware/stratix10-svc.c b/drivers/firmware/stratix10-svc.c
    index 3aa489dba30a..2a7687911c09 100644
    --- a/drivers/firmware/stratix10-svc.c
    +++ b/drivers/firmware/stratix10-svc.c
    @@ -1034,24 +1034,32 @@ static int stratix10_svc_drv_probe(struct platform_device *pdev)

    /* add svc client device(s) */
    svc = devm_kzalloc(dev, sizeof(*svc), GFP_KERNEL);
    - if (!svc)
    - return -ENOMEM;
    + if (!svc) {
    + ret = -ENOMEM;
    + goto err_free_kfifo;
    + }

    svc->stratix10_svc_rsu = platform_device_alloc(STRATIX10_RSU, 0);
    if (!svc->stratix10_svc_rsu) {
    dev_err(dev, "failed to allocate %s device\n", STRATIX10_RSU);
    - return -ENOMEM;
    + ret = -ENOMEM;
    + goto err_free_kfifo;
    }

    ret = platform_device_add(svc->stratix10_svc_rsu);
    - if (ret) {
    - platform_device_put(svc->stratix10_svc_rsu);
    - return ret;
    - }
    + if (ret)
    + goto err_put_device;
    +
    dev_set_drvdata(dev, svc);

    pr_info("Intel Service Layer Driver Initialized\n");

    + return 0;
    +
    +err_put_device:
    + platform_device_put(svc->stratix10_svc_rsu);
    +err_free_kfifo:
    + kfifo_free(&controller->svc_fifo);
    return ret;
    }

    --
    2.30.2


    \
     
     \ /
      Last update: 2021-07-12 09:13    [W:4.025 / U:0.216 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site