Commit 24f2e027 authored by Kees Cook's avatar Kees Cook Committed by Rafael J. Wysocki

x86, kaslr: boot-time selectable with hibernation

Changes kASLR from being compile-time selectable (blocked by
CONFIG_HIBERNATION), to being boot-time selectable (with hibernation
available by default) via the "kaslr" kernel command line.
Signed-off-by: default avatarKees Cook <keescook@chromium.org>
Acked-by: default avatarPavel Machek <pavel@ucw.cz>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent a6e15a39
...@@ -1474,6 +1474,13 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -1474,6 +1474,13 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
js= [HW,JOY] Analog joystick js= [HW,JOY] Analog joystick
See Documentation/input/joystick.txt. See Documentation/input/joystick.txt.
kaslr/nokaslr [X86]
Enable/disable kernel and module base offset ASLR
(Address Space Layout Randomization) if built into
the kernel. When CONFIG_HIBERNATION is selected,
kASLR is disabled by default. When kASLR is enabled,
hibernation will be disabled.
keepinitrd [HW,ARM] keepinitrd [HW,ARM]
kernelcore=nn[KMG] [KNL,X86,IA-64,PPC] This parameter kernelcore=nn[KMG] [KNL,X86,IA-64,PPC] This parameter
...@@ -2110,10 +2117,6 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -2110,10 +2117,6 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
noapic [SMP,APIC] Tells the kernel to not make use of any noapic [SMP,APIC] Tells the kernel to not make use of any
IOAPICs that may be present in the system. IOAPICs that may be present in the system.
nokaslr [X86]
Disable kernel and module base offset ASLR (Address
Space Layout Randomization) if built into the kernel.
noautogroup Disable scheduler automatic task group creation. noautogroup Disable scheduler automatic task group creation.
nobats [PPC] Do not use BATs for mapping kernel lowmem nobats [PPC] Do not use BATs for mapping kernel lowmem
......
...@@ -1672,7 +1672,6 @@ config RELOCATABLE ...@@ -1672,7 +1672,6 @@ config RELOCATABLE
config RANDOMIZE_BASE config RANDOMIZE_BASE
bool "Randomize the address of the kernel image" bool "Randomize the address of the kernel image"
depends on RELOCATABLE depends on RELOCATABLE
depends on !HIBERNATION
default n default n
---help--- ---help---
Randomizes the physical and virtual address at which the Randomizes the physical and virtual address at which the
......
...@@ -289,10 +289,17 @@ unsigned char *choose_kernel_location(unsigned char *input, ...@@ -289,10 +289,17 @@ unsigned char *choose_kernel_location(unsigned char *input,
unsigned long choice = (unsigned long)output; unsigned long choice = (unsigned long)output;
unsigned long random; unsigned long random;
#ifdef CONFIG_HIBERNATION
if (!cmdline_find_option_bool("kaslr")) {
debug_putstr("KASLR disabled by default...\n");
goto out;
}
#else
if (cmdline_find_option_bool("nokaslr")) { if (cmdline_find_option_bool("nokaslr")) {
debug_putstr("KASLR disabled...\n"); debug_putstr("KASLR disabled by cmdline...\n");
goto out; goto out;
} }
#endif
/* Record the various known unsafe memory ranges. */ /* Record the various known unsafe memory ranges. */
mem_avoid_init((unsigned long)input, input_size, mem_avoid_init((unsigned long)input, input_size,
......
...@@ -1153,6 +1153,11 @@ static int __init nohibernate_setup(char *str) ...@@ -1153,6 +1153,11 @@ static int __init nohibernate_setup(char *str)
return 1; return 1;
} }
static int __init kaslr_nohibernate_setup(char *str)
{
return nohibernate_setup(str);
}
__setup("noresume", noresume_setup); __setup("noresume", noresume_setup);
__setup("resume_offset=", resume_offset_setup); __setup("resume_offset=", resume_offset_setup);
__setup("resume=", resume_setup); __setup("resume=", resume_setup);
...@@ -1160,3 +1165,4 @@ __setup("hibernate=", hibernate_setup); ...@@ -1160,3 +1165,4 @@ __setup("hibernate=", hibernate_setup);
__setup("resumewait", resumewait_setup); __setup("resumewait", resumewait_setup);
__setup("resumedelay=", resumedelay_setup); __setup("resumedelay=", resumedelay_setup);
__setup("nohibernate", nohibernate_setup); __setup("nohibernate", nohibernate_setup);
__setup("kaslr", kaslr_nohibernate_setup);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment