Matt DeVillier has submitted this change. ( https://review.coreboot.org/c/coreboot/+/74715 )
Change subject: acpi: Add missing cbfs_unmap() ......................................................................
acpi: Add missing cbfs_unmap()
cbfs_map() can allocate memory, so cbfs_unmap() should be called before leaving the function.
BUG=b:278264488 TEST=Built and run with additional debugs on Skyrim device to confirm that data are correctly unmapped
Change-Id: Ibf7ba6842f42404ad8bb415f8e7fda10403cbe2e Signed-off-by: Grzegorz Bernacki bernacki@google.com Reviewed-on: https://review.coreboot.org/c/coreboot/+/74715 Tested-by: build bot (Jenkins) no-reply@coreboot.org Reviewed-by: Jakub Czapiga jacz@semihalf.com Reviewed-by: Tim Van Patten timvp@google.com --- M src/acpi/acpi.c 1 file changed, 32 insertions(+), 0 deletions(-)
Approvals: build bot (Jenkins): Verified Jakub Czapiga: Looks good to me, but someone else must approve Tim Van Patten: Looks good to me, approved
diff --git a/src/acpi/acpi.c b/src/acpi/acpi.c index a57d498..10b0707 100644 --- a/src/acpi/acpi.c +++ b/src/acpi/acpi.c @@ -1905,6 +1905,7 @@ || dsdt_file->length < sizeof(acpi_header_t) || memcmp(dsdt_file->signature, "DSDT", 4) != 0) { printk(BIOS_ERR, "Invalid DSDT file, skipping ACPI tables\n"); + cbfs_unmap(dsdt_file); return current; }
@@ -1914,6 +1915,7 @@ || slic_file->length < sizeof(acpi_header_t) || (memcmp(slic_file->signature, "SLIC", 4) != 0 && memcmp(slic_file->signature, "MSDM", 4) != 0))) { + cbfs_unmap(slic_file); slic_file = 0; }
@@ -1998,8 +2000,17 @@ current += slic_file->length; current = acpi_align_current(current); acpi_add_table(rsdp, slic); + cbfs_unmap(slic_file); }
+ /* + * cbfs_unmap() uses mem_pool_free() which works correctly only + * if freeing is done in reverse order than memory allocation. + * This is why unmapping of dsdt_file must be done after + * unmapping slic file. + */ + cbfs_unmap(dsdt_file); + printk(BIOS_DEBUG, "ACPI: * SSDT\n"); ssdt = (acpi_header_t *)current; acpi_create_ssdt_generator(ssdt, ACPI_TABLE_CREATOR);