aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/boot/compressed/aslr.c
diff options
context:
space:
mode:
authorKees Cook <keescook@chromium.org>2013-10-10 17:18:14 -0700
committerH. Peter Anvin <hpa@linux.intel.com>2013-10-13 03:12:07 -0700
commit8ab3820fd5b2896d66da7bb2a906bc382e63e7bc (patch)
tree50f6f4458f86eb66552c13bef81169e44d27dc28 /arch/x86/boot/compressed/aslr.c
parentx86, boot: Move CPU flags out of cpucheck (diff)
downloadlinux-dev-8ab3820fd5b2896d66da7bb2a906bc382e63e7bc.tar.xz
linux-dev-8ab3820fd5b2896d66da7bb2a906bc382e63e7bc.zip
x86, kaslr: Return location from decompress_kernel
This allows decompress_kernel to return a new location for the kernel to be relocated to. Additionally, enforces CONFIG_PHYSICAL_START as the minimum relocation position when building with CONFIG_RELOCATABLE. With CONFIG_RANDOMIZE_BASE set, the choose_kernel_location routine will select a new location to decompress the kernel, though here it is presently a no-op. The kernel command line option "nokaslr" is introduced to bypass these routines. Signed-off-by: Kees Cook <keescook@chromium.org> Link: http://lkml.kernel.org/r/1381450698-28710-3-git-send-email-keescook@chromium.org Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Diffstat (limited to 'arch/x86/boot/compressed/aslr.c')
-rw-r--r--arch/x86/boot/compressed/aslr.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/arch/x86/boot/compressed/aslr.c b/arch/x86/boot/compressed/aslr.c
new file mode 100644
index 000000000000..b73cc66d201e
--- /dev/null
+++ b/arch/x86/boot/compressed/aslr.c
@@ -0,0 +1,23 @@
+#include "misc.h"
+
+#ifdef CONFIG_RANDOMIZE_BASE
+
+unsigned char *choose_kernel_location(unsigned char *input,
+ unsigned long input_size,
+ unsigned char *output,
+ unsigned long output_size)
+{
+ unsigned long choice = (unsigned long)output;
+
+ if (cmdline_find_option_bool("nokaslr")) {
+ debug_putstr("KASLR disabled...\n");
+ goto out;
+ }
+
+ /* XXX: choose random location. */
+
+out:
+ return (unsigned char *)choice;
+}
+
+#endif /* CONFIG_RANDOMIZE_BASE */