lkml.org 
[lkml]   [2021]   [Jan]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/4] tpm: in case of error properly cleanup in tpmm_chip_alloc
    Date
    From: Lino Sanfilippo <l.sanfilippo@kunbus.com>

    In tpmm_chip_alloc() a resource management action handler is installed to
    release the chip->dev in case of error. This will result in the chip being
    freed if it was the last reference. If the installation of the handler was
    not successful an error is returned to the caller.
    However in this case the chip->dev reference is not put and thus the chip
    is never freed. Fix this by releasing the reference "by hand" in case that
    the action handler installation failed.

    Signed-off-by: Lino Sanfilippo <l.sanfilippo@kunbus.com>
    ---
    drivers/char/tpm/tpm-chip.c | 6 +++++-
    1 file changed, 5 insertions(+), 1 deletion(-)

    diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
    index ddaeceb..e242d2e 100644
    --- a/drivers/char/tpm/tpm-chip.c
    +++ b/drivers/char/tpm/tpm-chip.c
    @@ -423,11 +423,15 @@ struct tpm_chip *tpmm_chip_alloc(struct device *pdev,
    (void (*)(void *)) put_device,
    &chip->dev);
    if (rc)
    - return ERR_PTR(rc);
    + goto put_dev;

    dev_set_drvdata(pdev, chip);

    return chip;
    +
    +put_dev:
    + put_device(&chip->dev);
    + return ERR_PTR(rc);
    }
    EXPORT_SYMBOL_GPL(tpmm_chip_alloc);

    --
    2.7.4
    \
     
     \ /
      Last update: 2021-01-16 02:26    [W:4.825 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site