mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
tpm: acpi: Call acpi_put_table() to fix memory leak
commit8740a12ca2upstream. The start and length of the event log area are obtained from TPM2 or TCPA table, so we call acpi_get_table() to get the ACPI information, but the acpi_get_table() should be coupled with acpi_put_table() to release the ACPI memory, add the acpi_put_table() properly to fix the memory leak. While we are at it, remove the redundant empty line at the end of the tpm_read_log_acpi(). Fixes:0bfb237460("tpm: Move eventlog files to a subdirectory") Fixes:85467f63a0("tpm: Add support for event log pointer found in TPM2 ACPI table") Cc: stable@vger.kernel.org Signed-off-by: Hanjun Guo <guohanjun@huawei.com> Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org> Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
b51d5fed9f
commit
8ddc48068a
@@ -90,16 +90,21 @@ int tpm_read_log_acpi(struct tpm_chip *chip)
|
|||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
if (tbl->header.length <
|
if (tbl->header.length <
|
||||||
sizeof(*tbl) + sizeof(struct acpi_tpm2_phy))
|
sizeof(*tbl) + sizeof(struct acpi_tpm2_phy)) {
|
||||||
|
acpi_put_table((struct acpi_table_header *)tbl);
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
tpm2_phy = (void *)tbl + sizeof(*tbl);
|
tpm2_phy = (void *)tbl + sizeof(*tbl);
|
||||||
len = tpm2_phy->log_area_minimum_length;
|
len = tpm2_phy->log_area_minimum_length;
|
||||||
|
|
||||||
start = tpm2_phy->log_area_start_address;
|
start = tpm2_phy->log_area_start_address;
|
||||||
if (!start || !len)
|
if (!start || !len) {
|
||||||
|
acpi_put_table((struct acpi_table_header *)tbl);
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
acpi_put_table((struct acpi_table_header *)tbl);
|
||||||
format = EFI_TCG2_EVENT_LOG_FORMAT_TCG_2;
|
format = EFI_TCG2_EVENT_LOG_FORMAT_TCG_2;
|
||||||
} else {
|
} else {
|
||||||
/* Find TCPA entry in RSDT (ACPI_LOGICAL_ADDRESSING) */
|
/* Find TCPA entry in RSDT (ACPI_LOGICAL_ADDRESSING) */
|
||||||
@@ -120,8 +125,10 @@ int tpm_read_log_acpi(struct tpm_chip *chip)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
acpi_put_table((struct acpi_table_header *)buff);
|
||||||
format = EFI_TCG2_EVENT_LOG_FORMAT_TCG_1_2;
|
format = EFI_TCG2_EVENT_LOG_FORMAT_TCG_1_2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!len) {
|
if (!len) {
|
||||||
dev_warn(&chip->dev, "%s: TCPA log area empty\n", __func__);
|
dev_warn(&chip->dev, "%s: TCPA log area empty\n", __func__);
|
||||||
return -EIO;
|
return -EIO;
|
||||||
@@ -156,5 +163,4 @@ err:
|
|||||||
kfree(log->bios_event_log);
|
kfree(log->bios_event_log);
|
||||||
log->bios_event_log = NULL;
|
log->bios_event_log = NULL;
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user