x86/boot: Add "acpi_rsdp=" early parsing
KASLR may randomly choose offsets which are located in movable memory regions resulting in the movable memory becoming immovable. The ACPI SRAT (System/Static Resource Affinity Table) describes memory ranges including ranges of memory provided by hot-added memory devices. In order to access SRAT, one needs the Root System Description Pointer (RSDP) with which to find the Root/Extended System Description Table (R/XSDT) which then contains the system description tables of which SRAT is one of. In case the RSDP address has been passed on the command line (kexec-ing a second kernel) parse it from there. [ bp: Rewrite the commit message and cleanup the code. ] Signed-off-by: Chao Fan <fanc.fnst@cn.fujitsu.com> Signed-off-by: Borislav Petkov <bp@suse.de> Cc: bhe@redhat.com Cc: caoj.fnst@cn.fujitsu.com Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: indou.takao@jp.fujitsu.com Cc: Ingo Molnar <mingo@redhat.com> Cc: Juergen Gross <jgross@suse.com> Cc: kasong@redhat.com Cc: Kees Cook <keescook@chromium.org> Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com> Cc: msys.mizuma@gmail.com Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Tom Lendacky <thomas.lendacky@amd.com> Cc: x86-ml <x86@kernel.org> Link: https://lkml.kernel.org/r/20190123110850.12433-3-fanc.fnst@cn.fujitsu.com
This commit is contained in:
parent
de50ce20cd
commit
3c98e71b42
|
@ -0,0 +1,32 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
#define BOOT_CTYPE_H
|
||||
#include "misc.h"
|
||||
#include "error.h"
|
||||
#include "../string.h"
|
||||
|
||||
#ifdef CONFIG_ACPI
|
||||
|
||||
/*
|
||||
* Max length of 64-bit hex address string is 19, prefix "0x" + 16 hex
|
||||
* digits, and '\0' for termination.
|
||||
*/
|
||||
#define MAX_ADDR_LEN 19
|
||||
|
||||
static acpi_physical_address get_acpi_rsdp(void)
|
||||
{
|
||||
acpi_physical_address addr = 0;
|
||||
|
||||
#ifdef CONFIG_KEXEC
|
||||
char val[MAX_ADDR_LEN] = { };
|
||||
int ret;
|
||||
|
||||
ret = cmdline_find_option("acpi_rsdp", val, MAX_ADDR_LEN);
|
||||
if (ret < 0)
|
||||
return 0;
|
||||
|
||||
if (kstrtoull(val, 16, &addr))
|
||||
return 0;
|
||||
#endif
|
||||
return addr;
|
||||
}
|
||||
#endif /* CONFIG_ACPI */
|
|
@ -25,6 +25,9 @@
|
|||
#include <asm/bootparam.h>
|
||||
#include <asm/bootparam_utils.h>
|
||||
|
||||
#define BOOT_CTYPE_H
|
||||
#include <linux/acpi.h>
|
||||
|
||||
#define BOOT_BOOT_H
|
||||
#include "../ctype.h"
|
||||
|
||||
|
|
Loading…
Reference in New Issue