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'.
Unified · Split
| @@ -427,7 +427,7 @@ static int tpm_ascii_bios_measurements_open(struct inode *inode, · 426 unmodified lines | ||
| 427 | 427 | return -ENOMEM; |
| 428 | 428 | |
| 429 | 429 | if ((err = read_log(log))) |
| 430 | − return err; | |
| 430 | + goto out_free; | |
| 431 | 431 | |
| 432 | 432 | /* now register seq file */ |
| 433 | 433 | err = seq_open(file, &tpm_ascii_b_measurments_seqops); |
| @@ -435,10 +435,15 @@ static int tpm_ascii_bios_measurements_open(struct inode *inode, · 1 unmodified line | ||
| 435 | 435 | seq = file->private_data; |
| 436 | 436 | seq->private = log; |
| 437 | 437 | } else { |
| 438 | − kfree(log->bios_event_log); | |
| 439 | − kfree(log); | |
| 438 | + goto out_free; | |
| 440 | 439 | } |
| 440 | + | |
| 441 | +out: | |
| 441 | 442 | return err; |
| 443 | +out_free: | |
| 444 | + kfree(log->bios_event_log); | |
| 445 | + kfree(log); | |
| 446 | + goto out; | |
| 442 | 447 | } |
| 443 | 448 | |
| 444 | 449 | const struct file_operations tpm_ascii_bios_measurements_ops = { |