Messages in this thread | | | From | Arvind Sankar <> | Date | Tue, 26 May 2020 11:16:23 -0400 | Subject | Re: [PATCH v2 4/4] x86/boot: Check that there are no runtime relocations |
| |
On Tue, May 26, 2020 at 08:11:56AM +0200, Ard Biesheuvel wrote: > On Tue, 26 May 2020 at 00:59, Arvind Sankar <nivedita@alum.mit.edu> wrote: > > # Compressed kernel should be built as PIE since it may be loaded at any > > # address by the bootloader. > > -KBUILD_LDFLAGS += $(call ld-option, -pie) $(call ld-option, --no-dynamic-linker) > > +KBUILD_LDFLAGS += -pie $(call ld-option, --no-dynamic-linker) > > Do we still need -pie linking with these changes applied? >
I think it's currently not strictly necessary -- eg the 64bit kernel doesn't get linked as pie right now with LLD or old binutils. However, it is safer to do so to ensure that the result remains PIC with future versions of the linker. There are linker optimizations that can convert certain PIC instructions when PIE is disabled. While I think they currently all focus on eliminating indirection through the GOT (and thus wouldn't be applicable any more), it's easy to imagine that they could get extended to, for eg, convert leaq foo(%rip), %rax to movl $foo, %eax with some nop padding, etc.
Also, the relocation check that's being added here would only work with PIE linking.
| |