Commit 311942ce authored by Shang song (Lenovo)'s avatar Shang song (Lenovo) Committed by Rafael J. Wysocki
Browse files

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



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: default avatarShang song (Lenovo) <shangsong2@foxmail.com>
Link: https://patch.msgid.link/20250826030229.834901-1-shangsong2@foxmail.com


[ rjw: Subject and changelog edits ]
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent b320789d
Loading
Loading
Loading
Loading
+16 −3
Original line number Diff line number Diff line
@@ -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);