Skip to content

Commit

Permalink
Revert "x86/efi: Fixup GOT in all boot code paths"
Browse files Browse the repository at this point in the history
This reverts commit 9cb0e39.

It causes my Sony Vaio Pro 11 to immediately reboot at startup.

Acked-by: Ingo Molnar <mingo@kernel.org>
Cc: Peter Anvin <hpa@zytor.com>
Cc: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Matt Fleming <matt.fleming@intel.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Linus Torvalds committed Sep 23, 2014
1 parent 98f75b8 commit f367039
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 81 deletions.
54 changes: 14 additions & 40 deletions arch/x86/boot/compressed/head_32.S
Original file line number Diff line number Diff line change
Expand Up @@ -30,33 +30,6 @@
#include <asm/boot.h>
#include <asm/asm-offsets.h>

/*
* Adjust our own GOT
*
* The relocation base must be in %ebx
*
* It is safe to call this macro more than once, because in some of the
* code paths multiple invocations are inevitable, e.g. via the efi*
* entry points.
*
* Relocation is only performed the first time.
*/
.macro FIXUP_GOT
cmpb $1, got_fixed(%ebx)
je 2f

leal _got(%ebx), %edx
leal _egot(%ebx), %ecx
1:
cmpl %ecx, %edx
jae 2f
addl %ebx, (%edx)
addl $4, %edx
jmp 1b
2:
movb $1, got_fixed(%ebx)
.endm

__HEAD
ENTRY(startup_32)
#ifdef CONFIG_EFI_STUB
Expand All @@ -83,9 +56,6 @@ ENTRY(efi_pe_entry)
add %esi, 88(%eax)
pushl %eax

movl %esi, %ebx
FIXUP_GOT

call make_boot_params
cmpl $0, %eax
je fail
Expand All @@ -111,10 +81,6 @@ ENTRY(efi32_stub_entry)
leal efi32_config(%esi), %eax
add %esi, 88(%eax)
pushl %eax

movl %esi, %ebx
FIXUP_GOT

2:
call efi_main
cmpl $0, %eax
Expand Down Expand Up @@ -224,7 +190,19 @@ relocated:
shrl $2, %ecx
rep stosl

FIXUP_GOT
/*
* Adjust our own GOT
*/
leal _got(%ebx), %edx
leal _egot(%ebx), %ecx
1:
cmpl %ecx, %edx
jae 2f
addl %ebx, (%edx)
addl $4, %edx
jmp 1b
2:

/*
* Do the decompression, and jump to the new kernel..
*/
Expand All @@ -247,12 +225,8 @@ relocated:
xorl %ebx, %ebx
jmp *%eax

.data
/* Have we relocated the GOT? */
got_fixed:
.byte 0

#ifdef CONFIG_EFI_STUB
.data
efi32_config:
.fill 11,8,0
.long efi_call_phys
Expand Down
56 changes: 15 additions & 41 deletions arch/x86/boot/compressed/head_64.S
Original file line number Diff line number Diff line change
Expand Up @@ -32,33 +32,6 @@
#include <asm/processor-flags.h>
#include <asm/asm-offsets.h>

/*
* Adjust our own GOT
*
* The relocation base must be in %rbx
*
* It is safe to call this macro more than once, because in some of the
* code paths multiple invocations are inevitable, e.g. via the efi*
* entry points.
*
* Relocation is only performed the first time.
*/
.macro FIXUP_GOT
cmpb $1, got_fixed(%rip)
je 2f

leaq _got(%rip), %rdx
leaq _egot(%rip), %rcx
1:
cmpq %rcx, %rdx
jae 2f
addq %rbx, (%rdx)
addq $8, %rdx
jmp 1b
2:
movb $1, got_fixed(%rip)
.endm

__HEAD
.code32
ENTRY(startup_32)
Expand Down Expand Up @@ -279,13 +252,10 @@ ENTRY(efi_pe_entry)
subq $1b, %rbp

/*
* Relocate efi_config->call() and the GOT entries.
* Relocate efi_config->call().
*/
addq %rbp, efi64_config+88(%rip)

movq %rbp, %rbx
FIXUP_GOT

movq %rax, %rdi
call make_boot_params
cmpq $0,%rax
Expand All @@ -301,13 +271,10 @@ handover_entry:
subq $1b, %rbp

/*
* Relocate efi_config->call() and the GOT entries.
* Relocate efi_config->call().
*/
movq efi_config(%rip), %rax
addq %rbp, 88(%rax)

movq %rbp, %rbx
FIXUP_GOT
2:
movq efi_config(%rip), %rdi
call efi_main
Expand Down Expand Up @@ -418,8 +385,19 @@ relocated:
shrq $3, %rcx
rep stosq

FIXUP_GOT

/*
* Adjust our own GOT
*/
leaq _got(%rip), %rdx
leaq _egot(%rip), %rcx
1:
cmpq %rcx, %rdx
jae 2f
addq %rbx, (%rdx)
addq $8, %rdx
jmp 1b
2:

/*
* Do the decompression, and jump to the new kernel..
*/
Expand Down Expand Up @@ -459,10 +437,6 @@ gdt:
.quad 0x0000000000000000 /* TS continued */
gdt_end:

/* Have we relocated the GOT? */
got_fixed:
.byte 0

#ifdef CONFIG_EFI_STUB
efi_config:
.quad 0
Expand Down

0 comments on commit f367039

Please sign in to comment.