Re: [PATCH 0/3] Relocate GOT before calling EFI stub

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 7 Jan 2020 at 15:01, Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx> wrote:
>
> On Tue, 7 Jan 2020 at 14:55, Arvind Sankar <nivedita@xxxxxxxxxxxx> wrote:
> >
> > This series performs GOT relocation before calling into C code for the
> > EFI stub. While the stub does not currently require GOT relocation, it's
> > quite easy to introduce code that will use the GOT on old toolchains,
> > but not recent ones, which can lead to unexpected issues.
> >
> > This is based on
> > https://git.kernel.org/pub/scm/linux/kernel/git/efi/efi.git/log/?h=next
> >
> > with commit 4169bb99cd70 ("efi/libstub/x86: use mandatory 16-byte stack
> > alignment in mixed mode") reverted, as it caused a crash in mixed mode.
> >
>
> Hi Arvind,
>
> I appreciate the effort, but I really don't think this is a good idea.
>
> A GOT is completely pointless in bare metal code, and fortunately,
> modern toolchains make it easier to suppress GOT entries from being
> emitted. So instead of adding back asm code that I just removed, I
> think it would be better to investigate whether we can get rid of the
> GOT entirely.
>

With the following added to arch/x86/boot/compressed/vmlinux.lds.S,
the 64-bit kernel already links without error.

ASSERT (_got == _egot, "GOT entries detected");

The 32-bit kernel produces a GOT with 3 entries: I'm trying to narrow
down where they come from.


>
>
>
> > Arvind Sankar (3):
> >   x86/boot/compressed/64: Make adjust_got easier to use repeatedly
> >   x86/boot/compressed/32: Allow adjust_got to be called repeatedly
> >   x86/boot: Perform GOT relocation before calling EFI stub
> >
> >  arch/x86/boot/compressed/eboot.c   |  4 +-
> >  arch/x86/boot/compressed/head_32.S | 65 +++++++++++++++++++++----
> >  arch/x86/boot/compressed/head_64.S | 76 +++++++++++++++++-------------
> >  3 files changed, 99 insertions(+), 46 deletions(-)
> >
> > --
> > 2.24.1
> >



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux