On Sun, 26 Jan 2025 at 03:08, Aubrey Li <aubrey.li@xxxxxxxxxxxxxxx> wrote: > > Commit 088984c8d54c ("ACPI: PRM: Find EFI_MEMORY_RUNTIME block for PRM > handler and context") added unnecessary strict handler address checks, > caused the PRM module to fail in translating memory error addresses. > > Both static data buffer address and acpi parameter buffer address may > be NULL if they are not needed, as described in section 4.1.2 PRM Handler > Information Structure of Platform Runtime Mechanism specification [1]. > > Here are two examples from real hardware: > > ----PRMT.dsl---- > > - staic data address is not used > [10Ch 0268 2] Revision : 0000 > [10Eh 0270 2] Length : 002C > [110h 0272 16] Handler GUID : F6A58D47-E04F-4F5A-86B8-2A50D4AA109B > [120h 0288 8] Handler address : 0000000065CE51F4 > [128h 0296 8] Satic Data Address : 0000000000000000 > [130h 0304 8] ACPI Parameter Address : 000000006522A718 > > - ACPI parameter address is not used > [1B0h 0432 2] Revision : 0000 > [1B2h 0434 2] Length : 002C > [1B4h 0436 16] Handler GUID : 657E8AE6-A8FC-4877-BB28-42E7DE1899A5 > [1C4h 0452 8] Handler address : 0000000065C567C8 > [1CCh 0460 8] Satic Data Address : 000000006113FB98 > [1D4h 0468 8] ACPI Parameter Address : 0000000000000000 > > Fixes: 088984c8d54c ("ACPI: PRM: Find EFI_MEMORY_RUNTIME block for PRM handler and context") > Reported-and-tested-by: Shi Liu <aurelianliu@xxxxxxxxxxx> > Cc: All applicable <stable@xxxxxxxxxxxxxxx> > Signed-off-by: Aubrey Li <aubrey.li@xxxxxxxxxxxxxxx> > Link: https://uefi.org/sites/default/files/resources/Platform%20Runtime%20Mechanism%20-%20with%20legal%20notice.pdf # [1] > --- > drivers/acpi/prmt.c | 4 +--- > 1 file changed, 1 insertion(+), 3 deletions(-) > Acked-by: Ard Biesheuvel <ardb@xxxxxxxxxx> > diff --git a/drivers/acpi/prmt.c b/drivers/acpi/prmt.c > index 747f83f7114d..e549914a636c 100644 > --- a/drivers/acpi/prmt.c > +++ b/drivers/acpi/prmt.c > @@ -287,9 +287,7 @@ static acpi_status acpi_platformrt_space_handler(u32 function, > if (!handler || !module) > goto invalid_guid; > > - if (!handler->handler_addr || > - !handler->static_data_buffer_addr || > - !handler->acpi_param_buffer_addr) { > + if (!handler->handler_addr) { > buffer->prm_status = PRM_HANDLER_ERROR; > return AE_OK; > } > -- > 2.34.1 >