ACPI: PRM: Skip handlers with NULL handler_address or NULL VA

[ Upstream commit 311942ce763e21dacef7e53996d5a1e19b8adab1 ]

If handler_address or mapped VA is NULL, the related buffer address and
VA can be ignored, so make acpi_parse_prmt() skip the current handler
in those cases.

Signed-off-by: Shang song (Lenovo) <shangsong2@foxmail.com>
Link: https://patch.msgid.link/20250826030229.834901-1-shangsong2@foxmail.com
[ rjw: Subject and changelog edits ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Shang song (Lenovo)
2025-08-25 23:02:29 -04:00
committed by Greg Kroah-Hartman
parent 3e12147902
commit 338f490a04

View File

@@ -150,15 +150,28 @@ acpi_parse_prmt(union acpi_subtable_headers *header, const unsigned long end)
th = &tm->handlers[cur_handler];
guid_copy(&th->guid, (guid_t *)handler_info->handler_guid);
/*
* Print an error message if handler_address is NULL, the parse of VA also
* can be skipped.
*/
if (unlikely(!handler_info->handler_address)) {
pr_info("Skipping handler with NULL address for GUID: %pUL",
(guid_t *)handler_info->handler_guid);
continue;
}
th->handler_addr =
(void *)efi_pa_va_lookup(&th->guid, handler_info->handler_address);
/*
* Print a warning message if handler_addr is zero which is not expected to
* ever happen.
* Print a warning message and skip the parse of VA if handler_addr is zero
* which is not expected to ever happen.
*/
if (unlikely(!th->handler_addr))
if (unlikely(!th->handler_addr)) {
pr_warn("Failed to find VA of handler for GUID: %pUL, PA: 0x%llx",
&th->guid, handler_info->handler_address);
continue;
}
th->static_data_buffer_addr =
efi_pa_va_lookup(&th->guid, handler_info->static_data_buffer_address);