On Tue, Jun 23, 2020 at 08:06:35AM -0400, Stefan Berger wrote:
From: Stefan Berger <stefanb@xxxxxxxxxxxxx>I found at least one regression from this patch. Please remove my
Recent extensions of the TPM2 ACPI table added 3 more fields
including 12 bytes of start method specific parameters and Log Area
Minimum Length (u32) and Log Area Start Address (u64). So, we extend
the existing structure with these fields to allow non-UEFI systems
to access the TPM2's log.
The specification that has the new fields is the following:
TCG ACPI Specification
Family "1.2" and "2.0"
Version 1.2, Revision 8
Adapt all existing table size calculations to use
offsetof(struct acpi_table_tpm2, start_method_specific)
[where start_method_specific is a newly added field]
rather than sizeof(struct acpi_table_tpm2) so that the addition
of the new fields does not affect current systems that may not
have them.
reviewed-by comment form the next version.
Should have:
Link: https://trustedcomputinggroup.org/wp-content/uploads/TCG_ACPIGeneralSpecification_v1.20_r8.pdf
Please, add this.
Signed-off-by: Stefan Berger <stefanb@xxxxxxxxxxxxx>Should be
Cc: linux-acpi@xxxxxxxxxxxxxxx
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@xxxxxxxxxxxxxxx>
---
drivers/char/tpm/tpm_crb.c | 13 ++++++++++---
drivers/char/tpm/tpm_tis.c | 4 +++-
include/acpi/actbl3.h | 5 +++--
3 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c
index a9dcf31eadd2..0565aa5482f9 100644
--- a/drivers/char/tpm/tpm_crb.c
+++ b/drivers/char/tpm/tpm_crb.c
@@ -669,7 +669,9 @@ static int crb_acpi_add(struct acpi_device *device)
status = acpi_get_table(ACPI_SIG_TPM2, 1,
(struct acpi_table_header **) &buf);
- if (ACPI_FAILURE(status) || buf->header.length < sizeof(*buf)) {
+ if (ACPI_FAILURE(status) || buf->header.length <
+ offsetof(struct acpi_table_tpm2,
+ start_method_specific)) {
dev_err(dev, FW_BUG "failed to get TPM2 ACPI table\n");
return -EINVAL;
}
@@ -684,14 +686,19 @@ static int crb_acpi_add(struct acpi_device *device)
return -ENOMEM;
if (sm == ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC) {
- if (buf->header.length < (sizeof(*buf) + sizeof(*crb_smc))) {
+ if (buf->header.length <
+ (offsetof(struct acpi_table_tpm2,
+ start_method_specific) +
offsetof(struct acpti_table_tpm2, log_area_minimum_length)