Skip to content

Commit

Permalink
x86/head/64: Switch to initial stack earlier
Browse files Browse the repository at this point in the history
Make sure there is a stack once the kernel runs from virtual addresses.
At this stage any secondary CPU which boots will have lost its stack
because the kernel switched to a new page-table which does not map the
real-mode stack anymore.

This is needed for handling early #VC exceptions caused by instructions
like CPUID.

Signed-off-by: Joerg Roedel <[email protected]>
Signed-off-by: Borislav Petkov <[email protected]>
Reviewed-by: Kees Cook <[email protected]>
Link: https://lkml.kernel.org/r/[email protected]
  • Loading branch information
joergroedel authored and suryasaimadhu committed Sep 7, 2020
1 parent 7b99819 commit 3add38c
Showing 1 changed file with 6 additions and 3 deletions.
9 changes: 6 additions & 3 deletions arch/x86/kernel/head_64.S
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,12 @@ SYM_CODE_START(secondary_startup_64)
movl initial_gs+4(%rip),%edx
wrmsr

/*
* Setup a boot time stack - Any secondary CPU will have lost its stack
* by now because the cr3-switch above unmaps the real-mode stack
*/
movq initial_stack(%rip), %rsp

/* Check if nx is implemented */
movl $0x80000001, %eax
cpuid
Expand All @@ -212,9 +218,6 @@ SYM_CODE_START(secondary_startup_64)
/* Make changes effective */
movq %rax, %cr0

/* Setup a boot time stack */
movq initial_stack(%rip), %rsp

/* zero EFLAGS after setting rsp */
pushq $0
popfq
Expand Down

0 comments on commit 3add38c

Please sign in to comment.