aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/tpm
diff options
context:
space:
mode:
authorJesper Juhl <jesper.juhl@gmail.com>2007-07-20 03:31:48 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-07-20 11:44:20 -0400
commit178554ae75739e91dc4d7c3e42a3db95448cc5bf (patch)
tree12c9ec848b2c6b463c4f12801e802ee75ff31311 /drivers/char/tpm
parent22982a5687d8abf7bafe6d307585464f47089f18 (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')
-rw-r--r--drivers/char/tpm/tpm_bios.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/char/tpm/tpm_bios.c b/drivers/char/tpm/tpm_bios.c
index 4eba32b23b29..4b26ce48189b 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
441out:
441 return err; 442 return err;
443out_free:
444 kfree(log->bios_event_log);
445 kfree(log);
446 goto out;
442} 447}
443 448
444const struct file_operations tpm_ascii_bios_measurements_ops = { 449const struct file_operations tpm_ascii_bios_measurements_ops = {