hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/char/tpm/eventlog/acpi.c
....@@ -90,16 +90,21 @@
9090 return -ENODEV;
9191
9292 if (tbl->header.length <
93
- sizeof(*tbl) + sizeof(struct acpi_tpm2_phy))
93
+ sizeof(*tbl) + sizeof(struct acpi_tpm2_phy)) {
94
+ acpi_put_table((struct acpi_table_header *)tbl);
9495 return -ENODEV;
96
+ }
9597
9698 tpm2_phy = (void *)tbl + sizeof(*tbl);
9799 len = tpm2_phy->log_area_minimum_length;
98100
99101 start = tpm2_phy->log_area_start_address;
100
- if (!start || !len)
102
+ if (!start || !len) {
103
+ acpi_put_table((struct acpi_table_header *)tbl);
101104 return -ENODEV;
105
+ }
102106
107
+ acpi_put_table((struct acpi_table_header *)tbl);
103108 format = EFI_TCG2_EVENT_LOG_FORMAT_TCG_2;
104109 } else {
105110 /* Find TCPA entry in RSDT (ACPI_LOGICAL_ADDRESSING) */
....@@ -120,8 +125,10 @@
120125 break;
121126 }
122127
128
+ acpi_put_table((struct acpi_table_header *)buff);
123129 format = EFI_TCG2_EVENT_LOG_FORMAT_TCG_1_2;
124130 }
131
+
125132 if (!len) {
126133 dev_warn(&chip->dev, "%s: TCPA log area empty\n", __func__);
127134 return -EIO;
....@@ -136,8 +143,12 @@
136143
137144 ret = -EIO;
138145 virt = acpi_os_map_iomem(start, len);
139
- if (!virt)
146
+ if (!virt) {
147
+ dev_warn(&chip->dev, "%s: Failed to map ACPI memory\n", __func__);
148
+ /* try EFI log next */
149
+ ret = -ENODEV;
140150 goto err;
151
+ }
141152
142153 memcpy_fromio(log->bios_event_log, virt, len);
143154
....@@ -156,5 +167,4 @@
156167 kfree(log->bios_event_log);
157168 log->bios_event_log = NULL;
158169 return ret;
159
-
160170 }