From: Sedat Dilek <sedat.dilek@gmail.com>
To: Arvind Sankar <nivedita@alum.mit.edu>
Cc: Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
"H. Peter Anvin" <hpa@zytor.com>,
x86@kernel.org, Nick Desaulniers <ndesaulniers@google.com>,
Fangrui Song <maskray@google.com>,
Dmitry Golovin <dima@golovin.in>,
Clang-Built-Linux ML <clang-built-linux@googlegroups.com>,
Ard Biesheuvel <ardb@kernel.org>,
Masahiro Yamada <masahiroy@kernel.org>,
Daniel Kiper <daniel.kiper@oracle.com>,
Kees Cook <keescook@chromium.org>,
Nathan Chancellor <natechancellor@gmail.com>,
Arnd Bergmann <arnd@arndb.de>, "H . J . Lu" <hjl@sourceware.org>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v5 3/7] x86/boot/compressed: Get rid of GOT fixup code
Date: Wed, 15 Jul 2020 10:54:49 +0200 [thread overview]
Message-ID: <CA+icZUVPzMnEe-VUabCCA_Kb9X00NZTUoms1Q0Wm6sK-5fHn=A@mail.gmail.com> (raw)
In-Reply-To: <20200715004133.1430068-4-nivedita@alum.mit.edu>
On Wed, Jul 15, 2020 at 2:41 AM Arvind Sankar <nivedita@alum.mit.edu> wrote:
>
> From: Ard Biesheuvel <ardb@kernel.org>
>
> In a previous patch, we have eliminated GOT entries from the decompressor
> binary and added an assertion that the .got section is empty. This means
> that the GOT fixup routines that exist in both the 32-bit and 64-bit
> startup routines have become dead code, and can be removed.
>
> While at it, drop the KEEP() from the linker script, as it has no effect
> on the contents of output sections that are created by the linker itself.
>
> Reviewed-by: Kees Cook <keescook@chromium.org>
> Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
> Acked-by: Arvind Sankar <nivedita@alum.mit.edu>
> Signed-off-by: Arvind Sankar <nivedita@alum.mit.edu>
> From: Ard Biesheuvel <ardb@kernel.org>
> Link: https://lore.kernel.org/r/20200523120021.34996-4-ardb@kernel.org
Tested-by: Sedat Dilek <sedat.dilek@gmail.com>
- Sedat -
> ---
> arch/x86/boot/compressed/head_32.S | 24 ++---------
> arch/x86/boot/compressed/head_64.S | 57 --------------------------
> arch/x86/boot/compressed/vmlinux.lds.S | 4 +-
> 3 files changed, 5 insertions(+), 80 deletions(-)
>
> diff --git a/arch/x86/boot/compressed/head_32.S b/arch/x86/boot/compressed/head_32.S
> index 03557f2174bf..39f0bb43218f 100644
> --- a/arch/x86/boot/compressed/head_32.S
> +++ b/arch/x86/boot/compressed/head_32.S
> @@ -49,16 +49,13 @@
> * Position Independent Executable (PIE) so that linker won't optimize
> * R_386_GOT32X relocation to its fixed symbol address. Older
> * linkers generate R_386_32 relocations against locally defined symbols,
> - * _bss, _ebss, _got, _egot and _end, in PIE. It isn't wrong, just less
> - * optimal than R_386_RELATIVE. But the x86 kernel fails to properly handle
> - * R_386_32 relocations when relocating the kernel. To generate
> - * R_386_RELATIVE relocations, we mark _bss, _ebss, _got, _egot and _end as
> - * hidden:
> + * _bss, _ebss and _end, in PIE. It isn't wrong, just less optimal than
> + * R_386_RELATIVE. But the x86 kernel fails to properly handle R_386_32
> + * relocations when relocating the kernel. To generate R_386_RELATIVE
> + * relocations, we mark _bss, _ebss and _end as hidden:
> */
> .hidden _bss
> .hidden _ebss
> - .hidden _got
> - .hidden _egot
> .hidden _end
>
> __HEAD
> @@ -192,19 +189,6 @@ SYM_FUNC_START_LOCAL_NOALIGN(.Lrelocated)
> shrl $2, %ecx
> rep stosl
>
> -/*
> - * 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 extraction, and jump to the new kernel..
> */
> diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S
> index 97d37f0a34f5..bf1ab30acc5b 100644
> --- a/arch/x86/boot/compressed/head_64.S
> +++ b/arch/x86/boot/compressed/head_64.S
> @@ -40,8 +40,6 @@
> */
> .hidden _bss
> .hidden _ebss
> - .hidden _got
> - .hidden _egot
> .hidden _end
>
> __HEAD
> @@ -353,25 +351,6 @@ SYM_CODE_START(startup_64)
> /* Set up the stack */
> leaq boot_stack_end(%rbx), %rsp
>
> - /*
> - * paging_prepare() and cleanup_trampoline() below can have GOT
> - * references. Adjust the table with address we are running at.
> - *
> - * Zero RAX for adjust_got: the GOT was not adjusted before;
> - * there's no adjustment to undo.
> - */
> - xorq %rax, %rax
> -
> - /*
> - * Calculate the address the binary is loaded at and use it as
> - * a GOT adjustment.
> - */
> - call 1f
> -1: popq %rdi
> - subq $1b, %rdi
> -
> - call .Ladjust_got
> -
> /*
> * At this point we are in long mode with 4-level paging enabled,
> * but we might want to enable 5-level paging or vice versa.
> @@ -464,21 +443,6 @@ trampoline_return:
> pushq $0
> popfq
>
> - /*
> - * Previously we've adjusted the GOT with address the binary was
> - * loaded at. Now we need to re-adjust for relocation address.
> - *
> - * Calculate the address the binary is loaded at, so that we can
> - * undo the previous GOT adjustment.
> - */
> - call 1f
> -1: popq %rax
> - subq $1b, %rax
> -
> - /* The new adjustment is the relocation address */
> - movq %rbx, %rdi
> - call .Ladjust_got
> -
> /*
> * Copy the compressed kernel to the end of our buffer
> * where decompression in place becomes safe.
> @@ -556,27 +520,6 @@ SYM_FUNC_START_LOCAL_NOALIGN(.Lrelocated)
> jmp *%rax
> SYM_FUNC_END(.Lrelocated)
>
> -/*
> - * Adjust the global offset table
> - *
> - * RAX is the previous adjustment of the table to undo (use 0 if it's the
> - * first time we touch GOT).
> - * RDI is the new adjustment to apply.
> - */
> -.Ladjust_got:
> - /* Walk through the GOT adding the address to the entries */
> - leaq _got(%rip), %rdx
> - leaq _egot(%rip), %rcx
> -1:
> - cmpq %rcx, %rdx
> - jae 2f
> - subq %rax, (%rdx) /* Undo previous adjustment */
> - addq %rdi, (%rdx) /* Apply the new adjustment */
> - addq $8, %rdx
> - jmp 1b
> -2:
> - ret
> -
> .code32
> /*
> * This is the 32-bit trampoline that will be copied over to low memory.
> diff --git a/arch/x86/boot/compressed/vmlinux.lds.S b/arch/x86/boot/compressed/vmlinux.lds.S
> index 4bcc943842ab..a4a4a59a2628 100644
> --- a/arch/x86/boot/compressed/vmlinux.lds.S
> +++ b/arch/x86/boot/compressed/vmlinux.lds.S
> @@ -43,9 +43,7 @@ SECTIONS
> _erodata = . ;
> }
> .got : {
> - _got = .;
> - KEEP(*(.got))
> - _egot = .;
> + *(.got)
> }
> .got.plt : {
> *(.got.plt)
> --
> 2.26.2
>
next prev parent reply other threads:[~2020-07-15 8:55 UTC|newest]
Thread overview: 113+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-29 14:09 [PATCH v3 0/7] x86/boot: Remove runtime relocations from compressed kernel Arvind Sankar
2020-06-29 14:09 ` [PATCH v3 1/7] x86/boot/compressed: Move .got.plt entries out of the .got section Arvind Sankar
2020-06-29 15:48 ` Kees Cook
2020-06-29 15:50 ` Arvind Sankar
2020-06-29 15:51 ` Ard Biesheuvel
2020-06-29 16:10 ` Kees Cook
2020-06-29 14:09 ` [PATCH v3 2/7] x86/boot/compressed: Force hidden visibility for all symbol references Arvind Sankar
2020-06-29 15:50 ` Kees Cook
2020-07-14 9:20 ` Sedat Dilek
2020-07-14 9:47 ` Ard Biesheuvel
2020-06-29 14:09 ` [PATCH v3 3/7] x86/boot/compressed: Get rid of GOT fixup code Arvind Sankar
2020-06-29 15:53 ` Kees Cook
2020-06-29 14:09 ` [PATCH v3 4/7] x86/boot: Add .text.* to setup.ld Arvind Sankar
2020-06-29 15:55 ` Kees Cook
2020-06-29 14:09 ` [PATCH v3 5/7] x86/boot: Remove run-time relocations from .head.text code Arvind Sankar
2020-06-29 16:04 ` Kees Cook
2020-06-29 17:01 ` Arvind Sankar
2020-07-14 13:20 ` Sedat Dilek
2020-06-29 14:09 ` [PATCH v3 6/7] x86/boot: Remove runtime relocations from head_{32,64}.S Arvind Sankar
2020-06-29 16:06 ` Kees Cook
2020-06-29 16:52 ` Arvind Sankar
2020-06-29 14:09 ` [PATCH v3 7/7] x86/boot: Check that there are no runtime relocations Arvind Sankar
2020-06-29 16:09 ` Kees Cook
2020-06-29 16:11 ` Ard Biesheuvel
2020-06-29 16:20 ` Kees Cook
2020-06-29 16:56 ` Arvind Sankar
2020-06-29 17:37 ` Fangrui Song
2020-06-29 18:11 ` Ard Biesheuvel
2020-06-29 23:34 ` Fangrui Song
2020-06-30 16:26 ` Ard Biesheuvel
2020-06-30 17:54 ` Arvind Sankar
2020-06-30 22:00 ` Fangrui Song
2020-06-30 23:27 ` Arvind Sankar
2020-07-01 6:44 ` Ard Biesheuvel
2020-07-01 14:42 ` Arvind Sankar
2020-06-29 18:43 ` Arvind Sankar
2020-07-14 2:38 ` [PATCH v4 0/7] x86/boot: Remove runtime relocations from compressed kernel Arvind Sankar
2020-07-14 13:15 ` Sedat Dilek
2020-07-14 14:15 ` Arvind Sankar
2020-07-14 18:13 ` Sedat Dilek
2020-07-14 18:30 ` Sedat Dilek
2020-07-14 18:33 ` Sedat Dilek
2020-07-14 19:21 ` Sedat Dilek
2020-07-14 19:29 ` Arvind Sankar
2020-07-14 19:53 ` Sedat Dilek
2020-07-14 20:07 ` Arvind Sankar
2020-07-14 20:10 ` Sedat Dilek
2020-07-14 20:14 ` Arvind Sankar
2020-07-14 20:17 ` Sedat Dilek
2020-07-14 20:08 ` Sedat Dilek
2020-07-14 20:21 ` Arvind Sankar
2020-07-14 20:24 ` Sedat Dilek
2020-07-14 20:27 ` Sedat Dilek
2020-07-14 20:35 ` Arvind Sankar
2020-07-14 20:43 ` Sedat Dilek
2020-07-14 21:07 ` Arvind Sankar
2020-07-14 20:33 ` Arvind Sankar
2020-07-15 0:41 ` [PATCH v5 0/7] x86/boot: Remove run-time " Arvind Sankar
2020-07-15 1:46 ` Sedat Dilek
2020-07-15 7:11 ` Sedat Dilek
2020-07-17 13:46 ` Arvind Sankar
2020-07-17 18:16 ` Nick Desaulniers
2020-07-17 18:21 ` Sedat Dilek
2020-07-17 20:17 ` [PATCH-next " Arvind Sankar
2020-07-17 23:46 ` Nick Desaulniers
2020-07-29 22:04 ` Kees Cook
2020-07-29 22:23 ` Arvind Sankar
2020-07-30 2:38 ` Kees Cook
2020-07-17 20:17 ` [PATCH-next v5 1/7] x86/boot/compressed: Move .got.plt entries out of the .got section Arvind Sankar
2020-07-17 20:17 ` [PATCH-next v5 2/7] x86/boot/compressed: Force hidden visibility for all symbol references Arvind Sankar
2020-07-17 20:17 ` [PATCH-next v5 3/7] x86/boot/compressed: Get rid of GOT fixup code Arvind Sankar
2020-07-17 20:17 ` [PATCH-next v5 4/7] x86/boot: Add .text.* to setup.ld Arvind Sankar
2020-07-17 20:17 ` [PATCH-next v5 5/7] x86/boot: Remove run-time relocations from .head.text code Arvind Sankar
2020-07-17 20:18 ` [PATCH-next v5 6/7] x86/boot: Remove run-time relocations from head_{32,64}.S Arvind Sankar
2020-07-17 20:18 ` [PATCH-next v5 7/7] x86/boot: Check that there are no run-time relocations Arvind Sankar
2020-07-18 5:44 ` [PATCH v5 0/7] x86/boot: Remove run-time relocations from compressed kernel Ard Biesheuvel
2020-07-18 7:01 ` Sedat Dilek
2020-07-24 23:25 ` Kees Cook
2020-07-31 14:53 ` Arvind Sankar
2020-07-31 14:58 ` Sedat Dilek
2020-07-31 20:27 ` [PATCH v6 " Arvind Sankar
2020-07-31 20:27 ` [PATCH v6 1/7] x86/boot/compressed: Move .got.plt entries out of the .got section Arvind Sankar
2020-07-31 20:27 ` [PATCH v6 2/7] x86/boot/compressed: Force hidden visibility for all symbol references Arvind Sankar
2020-07-31 20:27 ` [PATCH v6 3/7] x86/boot/compressed: Get rid of GOT fixup code Arvind Sankar
2020-07-31 20:27 ` [PATCH v6 4/7] x86/boot: Add .text.* to setup.ld Arvind Sankar
2020-07-31 20:27 ` [PATCH v6 5/7] x86/boot: Remove run-time relocations from .head.text code Arvind Sankar
2020-07-31 20:27 ` [PATCH v6 6/7] x86/boot: Remove run-time relocations from head_{32,64}.S Arvind Sankar
2020-07-31 20:27 ` [PATCH v6 7/7] x86/boot: Check that there are no run-time relocations Arvind Sankar
2020-07-31 23:15 ` [PATCH v6 0/7] x86/boot: Remove run-time relocations from compressed kernel Kees Cook
2020-07-15 0:41 ` [PATCH v5 1/7] x86/boot/compressed: Move .got.plt entries out of the .got section Arvind Sankar
2020-07-15 8:52 ` Sedat Dilek
2020-07-15 0:41 ` [PATCH v5 2/7] x86/boot/compressed: Force hidden visibility for all symbol references Arvind Sankar
2020-07-15 8:54 ` Sedat Dilek
2020-07-15 0:41 ` [PATCH v5 3/7] x86/boot/compressed: Get rid of GOT fixup code Arvind Sankar
2020-07-15 8:54 ` Sedat Dilek [this message]
2020-07-15 0:41 ` [PATCH v5 4/7] x86/boot: Add .text.* to setup.ld Arvind Sankar
2020-07-15 8:55 ` Sedat Dilek
2020-07-15 0:41 ` [PATCH v5 5/7] x86/boot: Remove run-time relocations from .head.text code Arvind Sankar
2020-07-15 8:56 ` Sedat Dilek
2020-07-15 0:41 ` [PATCH v5 6/7] x86/boot: Remove run-time relocations from head_{32,64}.S Arvind Sankar
2020-07-15 8:58 ` Sedat Dilek
2020-07-15 9:03 ` Ard Biesheuvel
2020-07-15 9:10 ` Sedat Dilek
2020-07-15 0:41 ` [PATCH v5 7/7] x86/boot: Check that there are no run-time relocations Arvind Sankar
2020-07-15 9:00 ` Sedat Dilek
2020-07-15 9:12 ` Sedat Dilek
2020-07-14 2:38 ` [PATCH v4 1/7] x86/boot/compressed: Move .got.plt entries out of the .got section Arvind Sankar
2020-07-14 2:38 ` [PATCH v4 2/7] x86/boot/compressed: Force hidden visibility for all symbol references Arvind Sankar
2020-07-14 2:38 ` [PATCH v4 3/7] x86/boot/compressed: Get rid of GOT fixup code Arvind Sankar
2020-07-14 2:38 ` [PATCH v4 4/7] x86/boot: Add .text.* to setup.ld Arvind Sankar
2020-07-14 2:38 ` [PATCH v4 5/7] x86/boot: Remove run-time relocations from .head.text code Arvind Sankar
2020-07-14 2:38 ` [PATCH v4 6/7] x86/boot: Remove runtime relocations from head_{32,64}.S Arvind Sankar
2020-07-14 2:38 ` [PATCH v4 7/7] x86/boot: Check that there are no runtime relocations Arvind Sankar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CA+icZUVPzMnEe-VUabCCA_Kb9X00NZTUoms1Q0Wm6sK-5fHn=A@mail.gmail.com' \
--to=sedat.dilek@gmail.com \
--cc=ardb@kernel.org \
--cc=arnd@arndb.de \
--cc=bp@alien8.de \
--cc=clang-built-linux@googlegroups.com \
--cc=daniel.kiper@oracle.com \
--cc=dima@golovin.in \
--cc=hjl@sourceware.org \
--cc=hpa@zytor.com \
--cc=keescook@chromium.org \
--cc=linux-kernel@vger.kernel.org \
--cc=masahiroy@kernel.org \
--cc=maskray@google.com \
--cc=mingo@redhat.com \
--cc=natechancellor@gmail.com \
--cc=ndesaulniers@google.com \
--cc=nivedita@alum.mit.edu \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).