In tpm_bios_measurements_open(), get_device() is called on the device
embedded in struct tpm_chip. In the error path, however, put_device() is
not called. This could result in a reference count leak, which could
prevent the device from being properly released. This commit makes sure
to call put_device() when the tpm_bios_measurements_open() fails.

Signed-off-by: Joe Hattori <[email protected]>
---
 drivers/char/tpm/eventlog/common.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/char/tpm/eventlog/common.c 
b/drivers/char/tpm/eventlog/common.c
index 639c3f395a5a..df213ec428ca 100644
--- a/drivers/char/tpm/eventlog/common.c
+++ b/drivers/char/tpm/eventlog/common.c
@@ -44,11 +44,13 @@ static int tpm_bios_measurements_open(struct inode *inode,
 
        /* now register seq file */
        err = seq_open(file, seqops);
-       if (!err) {
-               seq = file->private_data;
-               seq->private = chip;
+       if (err) {
+               put_device(&chip->dev);
+               return err;
        }
 
+       seq = file->private_data;
+       seq->private = chip;
        return err;
 }
 
-- 
2.34.1


Reply via email to