Thread (107 messages) 107 messages, 8 authors, 2020-03-17

Re: [PATCH 25/62] x86/head/64: Install boot GDT

From: Andy Lutomirski <luto@kernel.org>
Date: 2020-02-11 22:29:39
Also in: kvm, lkml

On Tue, Feb 11, 2020 at 5:53 AM Joerg Roedel [off-list ref] wrote:
quoted hunk ↗ jump to hunk
From: Joerg Roedel <redacted>

Handling exceptions during boot requires a working GDT. The kernel GDT
is not yet ready for use, so install a temporary boot GDT.

Signed-off-by: Joerg Roedel <redacted>
---
 arch/x86/kernel/head_64.S | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)
diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S
index 4bbc770af632..5a3cde971cb7 100644
--- a/arch/x86/kernel/head_64.S
+++ b/arch/x86/kernel/head_64.S
@@ -72,6 +72,20 @@ SYM_CODE_START_NOALIGN(startup_64)
        /* Set up the stack for verify_cpu(), similar to initial_stack below */
        leaq    (__end_init_task - SIZEOF_PTREGS)(%rip), %rsp

+       /* Setup boot GDT descriptor and load boot GDT */
+       leaq    boot_gdt(%rip), %rax
+       movq    %rax, boot_gdt_base(%rip)
+       lgdt    boot_gdt_descr(%rip)
+
+       /* GDT loaded - switch to __KERNEL_CS so IRET works reliably */
+       pushq   $__KERNEL_CS
+       leaq    .Lon_kernel_cs(%rip), %rax
+       pushq   %rax
+       lretq
+
+.Lon_kernel_cs:
+       UNWIND_HINT_EMPTY
I would suggest fixing at least SS as well.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help