projects/linux·commit 178554ae

Memory leak in tpm_ascii_bios_measurements_open()

178554ae · Jesper Juhl <[email protected]> · 2007-07-20 00:31:48 -07:00

Coverity found a memory leak in tpm_ascii_bios_measurements_open().

If "read_log(log)" fails, then we may leak 'log' and
'log->bios_event_log'.

Signed-off-by: Jesper Juhl <[email protected]>
Cc: Seiji Munetoh <[email protected]>
Cc: Stefan Berger <[email protected]>
Cc: Reiner Sailer <[email protected]>
Cc: Kylene Hall <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
Commit
178554ae75739e91dc4d7c3e42a3db95448cc5bf
Parents
22982a56

Changes

1 files changed · +8 −3

FileStatusAddDelContent
drivers/char/tpm/tpm_bios.cmodified+8−3View file

drivers/char/tpm/tpm_bios.c

View file
diff --git a/drivers/char/tpm/tpm_bios.c b/drivers/char/tpm/tpm_bios.c
index 4eba32b..4b26ce4 100644
--- a/drivers/char/tpm/tpm_bios.c
+++ b/drivers/char/tpm/tpm_bios.c
@@ -427,7 +427,7 @@ static int tpm_ascii_bios_measurements_open(struct inode *inode,
return -ENOMEM;
if ((err = read_log(log)))
- return err;
+ goto out_free;
/* now register seq file */
err = seq_open(file, &tpm_ascii_b_measurments_seqops);
@@ -435,10 +435,15 @@ static int tpm_ascii_bios_measurements_open(struct inode *inode,
seq = file->private_data;
seq->private = log;
} else {
- kfree(log->bios_event_log);
- kfree(log);
+ goto out_free;
}
+
+out:
return err;
+out_free:
+ kfree(log->bios_event_log);
+ kfree(log);
+ goto out;
}
const struct file_operations tpm_ascii_bios_measurements_ops = {