Re: [PATCH] tpm: Fix memory leak in tpmm_chip_alloc

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2022/3/12 0:34, Jarkko Sakkinen wrote:
On Thu, 2022-03-10 at 11:33 +0800, Guozihua (Scott) wrote:


On 2022/3/7 21:45, Jarkko Sakkinen wrote:
On Mon, Mar 07, 2022 at 06:48:27PM +0800, GUO Zihua wrote:
Fix a memory leak in tpmm_chip_alloc. devm_add_action_or_reset would
call put_device on error, while tpm->devs is left untouched. Call
put_device on tpm->devs as well if devm_add_action_or_reset returns an
error.

Fixes: fdc915f7f719 ("tpm: expose spaces via a device link /dev/tpmrm")
Signed-off-by: GUO Zihua <guozihua@xxxxxxxxxx>
---
   drivers/char/tpm/tpm-chip.c | 13 +++++++++----
   1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
index b009e7479b70..0a92334e8c40 100644
--- a/drivers/char/tpm/tpm-chip.c
+++ b/drivers/char/tpm/tpm-chip.c
@@ -308,6 +308,12 @@ static int tpm_class_shutdown(struct device *dev)
         return 0;
   }
+static void tpm_chip_free(struct tpm_chip *chip)
+{
+       put_device(&chip->devs);
+       put_device(&chip->dev);
+}
+
   /**
    * tpm_chip_alloc() - allocate a new struct tpm_chip instance
    * @pdev: device to which the chip is associated
@@ -396,8 +402,7 @@ struct tpm_chip *tpm_chip_alloc(struct device *pdev,
         return chip;
  out:
-       put_device(&chip->devs);
-       put_device(&chip->dev);
+       tpm_chip_free(chip);
         return ERR_PTR(rc);
   }
   EXPORT_SYMBOL_GPL(tpm_chip_alloc);
@@ -420,8 +425,8 @@ struct tpm_chip *tpmm_chip_alloc(struct device *pdev,
                 return chip;
        rc = devm_add_action_or_reset(pdev,
-                                     (void (*)(void *)) put_device,
-                                     &chip->dev);
+                                     (void (*)(void *)) tpm_chip_free,
+                                     chip);
         if (rc)
                 return ERR_PTR(rc);
--
2.17.1


Please test against the latest in

git://git.kernel.org/pub/scm/linux/kernel/git/jarkko/linux-tpmdd.git

and share your results.

BR, Jarkko
.

Hi Jarkko,

I'll do that. Do we have a test set for TPM? Or do we just build and run
it and see if everything works as expected?

This is an error handling optimization BTW.

There is kselftest in tools/testing/kselftes/tpm2 that you can use
but do not have to.

BR, Jarkko



Hi Jarkko,

The code on the master branch on git://git.kernel.org/pub/scm/linux/kernel/git/jarkko/linux-tpmdd.git seems to be quite different from what I saw on linux upstream. Namely tpm_chip->devs does not exist on linux-tpmdd. Has this member been deleted?

--
Best
GUO Zihua



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux Kernel]     [Linux Kernel Hardening]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux