x86/head/64: Load GDT after switch to virtual addresses
Load the GDT right after switching to virtual addresses to make sure there is a defined GDT for exception handling. Signed-off-by: Joerg Roedel <jroedel@suse.de> Signed-off-by: Borislav Petkov <bp@suse.de> Reviewed-by: Kees Cook <keescook@chromium.org> Link: https://lkml.kernel.org/r/20200907131613.12703-31-joro@8bytes.org
This commit is contained in:
parent
866b556efa
commit
e04b883363
@ -158,6 +158,14 @@ SYM_CODE_START(secondary_startup_64)
|
||||
1:
|
||||
UNWIND_HINT_EMPTY
|
||||
|
||||
/*
|
||||
* We must switch to a new descriptor in kernel space for the GDT
|
||||
* because soon the kernel won't have access anymore to the userspace
|
||||
* addresses where we're currently running on. We have to do that here
|
||||
* because in 32bit we couldn't load a 64bit linear address.
|
||||
*/
|
||||
lgdt early_gdt_descr(%rip)
|
||||
|
||||
/* Check if nx is implemented */
|
||||
movl $0x80000001, %eax
|
||||
cpuid
|
||||
@ -185,14 +193,6 @@ SYM_CODE_START(secondary_startup_64)
|
||||
pushq $0
|
||||
popfq
|
||||
|
||||
/*
|
||||
* We must switch to a new descriptor in kernel space for the GDT
|
||||
* because soon the kernel won't have access anymore to the userspace
|
||||
* addresses where we're currently running on. We have to do that here
|
||||
* because in 32bit we couldn't load a 64bit linear address.
|
||||
*/
|
||||
lgdt early_gdt_descr(%rip)
|
||||
|
||||
/* set up data segments */
|
||||
xorl %eax,%eax
|
||||
movl %eax,%ds
|
||||
|
Loading…
x
Reference in New Issue
Block a user