diff options
Diffstat (limited to 'arch/x86/kernel/process_64.c')
-rw-r--r-- | arch/x86/kernel/process_64.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c index 4523ff88a69d..aa89eabf09e0 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c | |||
@@ -16,6 +16,7 @@ | |||
16 | 16 | ||
17 | #include <stdarg.h> | 17 | #include <stdarg.h> |
18 | 18 | ||
19 | #include <linux/stackprotector.h> | ||
19 | #include <linux/cpu.h> | 20 | #include <linux/cpu.h> |
20 | #include <linux/errno.h> | 21 | #include <linux/errno.h> |
21 | #include <linux/sched.h> | 22 | #include <linux/sched.h> |
@@ -117,6 +118,17 @@ static inline void play_dead(void) | |||
117 | void cpu_idle(void) | 118 | void cpu_idle(void) |
118 | { | 119 | { |
119 | current_thread_info()->status |= TS_POLLING; | 120 | current_thread_info()->status |= TS_POLLING; |
121 | |||
122 | /* | ||
123 | * If we're the non-boot CPU, nothing set the PDA stack | ||
124 | * canary up for us - and if we are the boot CPU we have | ||
125 | * a 0 stack canary. This is a good place for updating | ||
126 | * it, as we wont ever return from this function (so the | ||
127 | * invalid canaries already on the stack wont ever | ||
128 | * trigger): | ||
129 | */ | ||
130 | boot_init_stack_canary(); | ||
131 | |||
120 | /* endless idle loop with no priority at all */ | 132 | /* endless idle loop with no priority at all */ |
121 | while (1) { | 133 | while (1) { |
122 | tick_nohz_stop_sched_tick(1); | 134 | tick_nohz_stop_sched_tick(1); |
@@ -627,7 +639,6 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) | |||
627 | (unsigned long)task_stack_page(next_p) + | 639 | (unsigned long)task_stack_page(next_p) + |
628 | THREAD_SIZE - KERNEL_STACK_OFFSET); | 640 | THREAD_SIZE - KERNEL_STACK_OFFSET); |
629 | #ifdef CONFIG_CC_STACKPROTECTOR | 641 | #ifdef CONFIG_CC_STACKPROTECTOR |
630 | write_pda(stack_canary, next_p->stack_canary); | ||
631 | /* | 642 | /* |
632 | * Build time only check to make sure the stack_canary is at | 643 | * Build time only check to make sure the stack_canary is at |
633 | * offset 40 in the pda; this is a gcc ABI requirement | 644 | * offset 40 in the pda; this is a gcc ABI requirement |