All of lore.kernel.org
 help / color / mirror / Atom feed
From: Fangrui Song <maskray@google.com>
To: Ard Biesheuvel <ardb@kernel.org>
Cc: Kees Cook <keescook@chromium.org>,
	Arvind Sankar <nivedita@alum.mit.edu>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	"H. Peter Anvin" <hpa@zytor.com>, X86 ML <x86@kernel.org>,
	Nick Desaulniers <ndesaulniers@google.com>,
	Dmitry Golovin <dima@golovin.in>,
	clang-built-linux <clang-built-linux@googlegroups.com>,
	Masahiro Yamada <masahiroy@kernel.org>,
	Daniel Kiper <daniel.kiper@oracle.com>,
	Sedat Dilek <sedat.dilek@gmail.com>,
	Nathan Chancellor <natechancellor@gmail.com>,
	Arnd Bergmann <arnd@arndb.de>, "H . J . Lu" <hjl@sourceware.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v3 7/7] x86/boot: Check that there are no runtime relocations
Date: Mon, 29 Jun 2020 16:34:05 -0700	[thread overview]
Message-ID: <20200629233405.n56yb4xwlgxrt3fn@google.com> (raw)
In-Reply-To: <CAMj1kXHaXzYFkW_H=w36vMb1qPpuZXsnTd_giq4vsh0bw3S3eA@mail.gmail.com>

On 2020-06-29, Ard Biesheuvel wrote:
>On Mon, 29 Jun 2020 at 19:37, Fangrui Song <maskray@google.com> wrote:
>>
>> On 2020-06-29, Arvind Sankar wrote:
>> >On Mon, Jun 29, 2020 at 09:20:31AM -0700, Kees Cook wrote:
>> >> On Mon, Jun 29, 2020 at 06:11:59PM +0200, Ard Biesheuvel wrote:
>> >> > On Mon, 29 Jun 2020 at 18:09, Kees Cook <keescook@chromium.org> wrote:
>> >> > >
>> >> > > On Mon, Jun 29, 2020 at 10:09:28AM -0400, Arvind Sankar wrote:
>> >> > > > Add a linker script check that there are no runtime relocations, and
>> >> > > > remove the old one that tries to check via looking for specially-named
>> >> > > > sections in the object files.
>> >> > > >
>> >> > > > Drop the tests for -fPIE compiler option and -pie linker option, as they
>> >> > > > are available in all supported gcc and binutils versions (as well as
>> >> > > > clang and lld).
>> >> > > >
>> >> > > > Signed-off-by: Arvind Sankar <nivedita@alum.mit.edu>
>> >> > > > Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
>> >> > > > Reviewed-by: Fangrui Song <maskray@google.com>
>> >> > > > ---
>> >> > > >  arch/x86/boot/compressed/Makefile      | 28 +++-----------------------
>> >> > > >  arch/x86/boot/compressed/vmlinux.lds.S |  8 ++++++++
>> >> > > >  2 files changed, 11 insertions(+), 25 deletions(-)
>> >> > >
>> >> > > Reviewed-by: Kees Cook <keescook@chromium.org>
>> >> > >
>> >> > > question below ...
>> >> > >
>> >> > > > diff --git a/arch/x86/boot/compressed/vmlinux.lds.S b/arch/x86/boot/compressed/vmlinux.lds.S
>> >> > > > index a4a4a59a2628..a78510046eec 100644
>> >> > > > --- a/arch/x86/boot/compressed/vmlinux.lds.S
>> >> > > > +++ b/arch/x86/boot/compressed/vmlinux.lds.S
>> >> > > > @@ -42,6 +42,12 @@ SECTIONS
>> >> > > >               *(.rodata.*)
>> >> > > >               _erodata = . ;
>> >> > > >       }
>> >> > > > +     .rel.dyn : {
>> >> > > > +             *(.rel.*)
>> >> > > > +     }
>> >> > > > +     .rela.dyn : {
>> >> > > > +             *(.rela.*)
>> >> > > > +     }
>> >> > > >       .got : {
>> >> > > >               *(.got)
>> >> > > >       }
>> >> > >
>> >> > > Should these be marked (INFO) as well?
>> >> > >
>> >> >
>> >> > Given that sections marked as (INFO) will still be emitted into the
>> >> > ELF image, it does not really make a difference to do this for zero
>> >> > sized sections.
>> >>
>> >> Oh, I misunderstood -- I though they were _not_ emitted; I see now what
>> >> you said was not allocated. So, disk space used for the .got.plt case,
>> >> but not memory space used. Sorry for the confusion!
>> >>
>> >> -Kees
>>
>> About output section type (INFO):
>> https://sourceware.org/binutils/docs/ld/Output-Section-Type.html#Output-Section-Type
>> says "These type names are supported for backward compatibility, and are
>> rarely used."
>>
>> If all input section don't have the SHF_ALLOC flag, the output section
>> will not have this flag as well. This type is not useful...
>>
>> If .got and .got.plt were used, they should be considered dynamic
>> relocations which should be part of the loadable image. So they should
>> have the SHF_ALLOC flag. (INFO) will not be applicable anyway.
>>
>
>I don't care deeply either way, but Kees indicated that he would like
>to get rid of the 24 bytes of .got.plt magic entries that we have no
>need for.
>
>In fact, a lot of this mangling is caused by the fact that the linker
>is creating a relocatable binary, and assumes that it is a hosted
>binary that is loaded by a dynamic loader. It would actually be much
>better if the compiler and linker would take -ffreestanding into
>account, and suppress GOT entries, PLTs, dynamic program headers for
>shared libraries altogether.

Linkers (GNU ld and LLD) don't create .got or .got.plt just because the linker
command line has -pie or -shared.  They create .got or .got.plt if there are
specific needs.

For .got.plt, if there is (1) any .plt/.iplt entry, (2) any .got.plt based
relocation (e.g. R_X86_64_GOTPC32 on x86-64), or (3) if _GLOBAL_OFFSET_TABLE_ is
referenced, .got.plt will be created (both GNU ld and LLD) with usually 3
entries (for ld.so purposes).

If (1) is not satisfied, the created .got.plt is just served as an anchor for
things that want to reference (the distance from GOT base to some point). The
linker will still reserve 3 words but the words are likely not needed.

I don't think there is a specific need for another option to teach the linker
(GNU ld or LLD) that this is a kernel link.  For -ffreestanding builds, cc
-static (ld -no-pie))/-static-pie (-pie) already work quite well.

  reply	other threads:[~2020-06-29 23:34 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 [this message]
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
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=20200629233405.n56yb4xwlgxrt3fn@google.com \
    --to=maskray@google.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=mingo@redhat.com \
    --cc=natechancellor@gmail.com \
    --cc=ndesaulniers@google.com \
    --cc=nivedita@alum.mit.edu \
    --cc=sedat.dilek@gmail.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.