aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/boot/compressed/aslr.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/boot/compressed/aslr.c')
-rw-r--r--arch/x86/boot/compressed/aslr.c34
1 files changed, 1 insertions, 33 deletions
diff --git a/arch/x86/boot/compressed/aslr.c b/arch/x86/boot/compressed/aslr.c
index 7083c16cccba..bb1376381985 100644
--- a/arch/x86/boot/compressed/aslr.c
+++ b/arch/x86/boot/compressed/aslr.c
@@ -14,13 +14,6 @@
14static const char build_str[] = UTS_RELEASE " (" LINUX_COMPILE_BY "@" 14static const char build_str[] = UTS_RELEASE " (" LINUX_COMPILE_BY "@"
15 LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION; 15 LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION;
16 16
17struct kaslr_setup_data {
18 __u64 next;
19 __u32 type;
20 __u32 len;
21 __u8 data[1];
22} kaslr_setup_data;
23
24#define I8254_PORT_CONTROL 0x43 17#define I8254_PORT_CONTROL 0x43
25#define I8254_PORT_COUNTER0 0x40 18#define I8254_PORT_COUNTER0 0x40
26#define I8254_CMD_READBACK 0xC0 19#define I8254_CMD_READBACK 0xC0
@@ -302,29 +295,7 @@ static unsigned long find_random_addr(unsigned long minimum,
302 return slots_fetch_random(); 295 return slots_fetch_random();
303} 296}
304 297
305static void add_kaslr_setup_data(struct boot_params *params, __u8 enabled) 298unsigned char *choose_kernel_location(unsigned char *input,
306{
307 struct setup_data *data;
308
309 kaslr_setup_data.type = SETUP_KASLR;
310 kaslr_setup_data.len = 1;
311 kaslr_setup_data.next = 0;
312 kaslr_setup_data.data[0] = enabled;
313
314 data = (struct setup_data *)(unsigned long)params->hdr.setup_data;
315
316 while (data && data->next)
317 data = (struct setup_data *)(unsigned long)data->next;
318
319 if (data)
320 data->next = (unsigned long)&kaslr_setup_data;
321 else
322 params->hdr.setup_data = (unsigned long)&kaslr_setup_data;
323
324}
325
326unsigned char *choose_kernel_location(struct boot_params *params,
327 unsigned char *input,
328 unsigned long input_size, 299 unsigned long input_size,
329 unsigned char *output, 300 unsigned char *output,
330 unsigned long output_size) 301 unsigned long output_size)
@@ -335,17 +306,14 @@ unsigned char *choose_kernel_location(struct boot_params *params,
335#ifdef CONFIG_HIBERNATION 306#ifdef CONFIG_HIBERNATION
336 if (!cmdline_find_option_bool("kaslr")) { 307 if (!cmdline_find_option_bool("kaslr")) {
337 debug_putstr("KASLR disabled by default...\n"); 308 debug_putstr("KASLR disabled by default...\n");
338 add_kaslr_setup_data(params, 0);
339 goto out; 309 goto out;
340 } 310 }
341#else 311#else
342 if (cmdline_find_option_bool("nokaslr")) { 312 if (cmdline_find_option_bool("nokaslr")) {
343 debug_putstr("KASLR disabled by cmdline...\n"); 313 debug_putstr("KASLR disabled by cmdline...\n");
344 add_kaslr_setup_data(params, 0);
345 goto out; 314 goto out;
346 } 315 }
347#endif 316#endif
348 add_kaslr_setup_data(params, 1);
349 317
350 /* Record the various known unsafe memory ranges. */ 318 /* Record the various known unsafe memory ranges. */
351 mem_avoid_init((unsigned long)input, input_size, 319 mem_avoid_init((unsigned long)input, input_size,