Skip to content

Commit

Permalink
efi/x86: Drop the special GDT for the EFI thunk
Browse files Browse the repository at this point in the history
Instead of using efi_gdt64 to switch back to 64-bit mode and then
switching to the real boot-time GDT, just switch to the boot-time GDT
directly. The two GDT's are identical other than efi_gdt64 not including
the 32-bit code segment.

Signed-off-by: Arvind Sankar <nivedita@alum.mit.edu>
Link: https://lore.kernel.org/r/20200523221513.1642948-1-nivedita@alum.mit.edu
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
  • Loading branch information
Arvind Sankar authored and Ard Biesheuvel committed May 23, 2020
1 parent 6e99d32 commit 9241dfe
Showing 1 changed file with 3 additions and 16 deletions.
19 changes: 3 additions & 16 deletions arch/x86/boot/compressed/efi_thunk_64.S
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,6 @@ SYM_FUNC_START(__efi64_thunk)
push %rbx

leaq 1f(%rip), %rbp
leaq efi_gdt64(%rip), %rbx
movl %ebx, 2(%rbx) /* Fixup the gdt base address */

movl %ds, %eax
push %rax
Expand All @@ -48,7 +46,8 @@ SYM_FUNC_START(__efi64_thunk)
movl %r8d, 0xc(%rsp)
movl %r9d, 0x10(%rsp)

sgdt 0x14(%rsp)
leaq 0x14(%rsp), %rbx
sgdt (%rbx)

/*
* Switch to gdt with 32-bit segments. This is the firmware GDT
Expand All @@ -68,8 +67,7 @@ SYM_FUNC_START(__efi64_thunk)
pushq %rax
lretq

1: lgdt 0x14(%rsp)
addq $32, %rsp
1: addq $32, %rsp
movq %rdi, %rax

pop %rbx
Expand Down Expand Up @@ -175,14 +173,3 @@ SYM_DATA_END(efi32_boot_cs)
SYM_DATA_START(efi32_boot_ds)
.word 0
SYM_DATA_END(efi32_boot_ds)

SYM_DATA_START(efi_gdt64)
.word efi_gdt64_end - efi_gdt64
.long 0 /* Filled out by user */
.word 0
.quad 0x0000000000000000 /* NULL descriptor */
.quad 0x00af9a000000ffff /* __KERNEL_CS */
.quad 0x00cf92000000ffff /* __KERNEL_DS */
.quad 0x0080890000000000 /* TS descriptor */
.quad 0x0000000000000000 /* TS continued */
SYM_DATA_END_LABEL(efi_gdt64, SYM_L_LOCAL, efi_gdt64_end)

0 comments on commit 9241dfe

Please sign in to comment.