diff options
author | Jesper Juhl <jesper.juhl@gmail.com> | 2007-07-20 03:31:48 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-20 11:44:20 -0400 |
commit | 178554ae75739e91dc4d7c3e42a3db95448cc5bf (patch) | |
tree | 12c9ec848b2c6b463c4f12801e802ee75ff31311 /drivers/char/tpm/tpm_bios.c | |
parent | 22982a5687d8abf7bafe6d307585464f47089f18 (diff) |
Memory leak in tpm_ascii_bios_measurements_open()
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 <jesper.juhl@gmail.com>
Cc: Seiji Munetoh <munetoh@jp.ibm.com>
Cc: Stefan Berger <stefanb@us.ibm.com>
Cc: Reiner Sailer <sailer@watson.ibm.com>
Cc: Kylene Hall <kjhall@us.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/char/tpm/tpm_bios.c')
-rw-r--r-- | drivers/char/tpm/tpm_bios.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/char/tpm/tpm_bios.c b/drivers/char/tpm/tpm_bios.c index 4eba32b23b2..4b26ce48189 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, | |||
427 | return -ENOMEM; | 427 | return -ENOMEM; |
428 | 428 | ||
429 | if ((err = read_log(log))) | 429 | if ((err = read_log(log))) |
430 | return err; | 430 | goto out_free; |
431 | 431 | ||
432 | /* now register seq file */ | 432 | /* now register seq file */ |
433 | err = seq_open(file, &tpm_ascii_b_measurments_seqops); | 433 | err = seq_open(file, &tpm_ascii_b_measurments_seqops); |
@@ -435,10 +435,15 @@ static int tpm_ascii_bios_measurements_open(struct inode *inode, | |||
435 | seq = file->private_data; | 435 | seq = file->private_data; |
436 | seq->private = log; | 436 | seq->private = log; |
437 | } else { | 437 | } else { |
438 | kfree(log->bios_event_log); | 438 | goto out_free; |
439 | kfree(log); | ||
440 | } | 439 | } |
440 | |||
441 | out: | ||
441 | return err; | 442 | return err; |
443 | out_free: | ||
444 | kfree(log->bios_event_log); | ||
445 | kfree(log); | ||
446 | goto out; | ||
442 | } | 447 | } |
443 | 448 | ||
444 | const struct file_operations tpm_ascii_bios_measurements_ops = { | 449 | const struct file_operations tpm_ascii_bios_measurements_ops = { |