ACPI, APEI, EINJ: Refuse to inject into the zero page
authorTony Luck <tony.luck@intel.com>
Tue, 19 Apr 2022 21:19:21 +0000 (14:19 -0700)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 22 Apr 2022 14:52:27 +0000 (16:52 +0200)
Some validation tests dynamically inject errors into memory used by
applications to check that the system can recover from a variety of
poison consumption sceenarios.

But sometimes the virtual address picked by these tests is mapped to
the zero page.

This causes additional unexpected machine checks as other processes that
map the zero page also consume the poison.

Disallow injection to the zero page.

Signed-off-by: Tony Luck <tony.luck@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/apei/einj.c

index 95cc2a9f3e05878d5ba481b143397a8c363b5a52..d4326ec12d29620f9f343b4ec18649a4e883eabe 100644 (file)
@@ -549,6 +549,9 @@ static int einj_error_inject(u32 type, u32 flags, u64 param1, u64 param2,
             !arch_is_platform_page(base_addr)))
                return -EINVAL;
 
+       if (is_zero_pfn(base_addr >> PAGE_SHIFT))
+               return -EADDRINUSE;
+
 inject:
        mutex_lock(&einj_mutex);
        rc = __einj_error_inject(type, flags, param1, param2, param3, param4);