Message ID | 20210107132010.463129-1-alobakin@pm.me |
---|---|
State | Superseded |
Headers | show |
Series | MIPS: vmlinux.lds.S sections fixes & cleanup | expand |
On Thu, Jan 07, 2021 at 01:20:49PM +0000, Alexander Lobakin wrote: > LLVM stack generates GOT table when building the kernel: > > ld.lld: warning: <internal>:(.got) is being placed in '.got' > > According to the debug assertions, it's not zero-sized and thus > can't be handled the same way as .rel.dyn (like it's done for x86). > Use the ARM/ARM64 path here and place it at the end of .text section. > > Reported-by: Nathan Chancellor <natechancellor@gmail.com> > Signed-off-by: Alexander Lobakin <alobakin@pm.me> Reviewed-by: Kees Cook <keescook@chromium.org>
On Thu, Jan 07, 2021 at 01:20:33PM +0000, Alexander Lobakin wrote: > Catch any symbols placed in .rel.dyn and check for these sections > to be zero-sized at link time. > Eliminates following ld warning: > > mips-alpine-linux-musl-ld: warning: orphan section `.rel.dyn' > from `init/main.o' being placed in section `.rel.dyn' > > Adopted from x86/kernel/vmlinux.lds.S. > > Suggested-by: Fangrui Song <maskray@google.com> > Signed-off-by: Alexander Lobakin <alobakin@pm.me> Reviewed-by: Nathan Chancellor <natechancellor@gmail.com> > --- > arch/mips/kernel/vmlinux.lds.S | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S > index 0f4e46ea4458..0f736d60d43e 100644 > --- a/arch/mips/kernel/vmlinux.lds.S > +++ b/arch/mips/kernel/vmlinux.lds.S > @@ -226,4 +226,15 @@ SECTIONS > *(.pdr) > *(.reginfo) > } > + > + /* > + * Sections that should stay zero sized, which is safer to > + * explicitly check instead of blindly discarding. > + */ > + > + .rel.dyn : { > + *(.rel.*) > + *(.rel_*) > + } > + ASSERT(SIZEOF(.rel.dyn) == 0, "Unexpected run-time relocations (.rel) detected!") > } > -- > 2.30.0 > >
On Thu, Jan 07, 2021 at 01:20:49PM +0000, Alexander Lobakin wrote: > LLVM stack generates GOT table when building the kernel: > > ld.lld: warning: <internal>:(.got) is being placed in '.got' > > According to the debug assertions, it's not zero-sized and thus > can't be handled the same way as .rel.dyn (like it's done for x86). > Use the ARM/ARM64 path here and place it at the end of .text section. > > Reported-by: Nathan Chancellor <natechancellor@gmail.com> > Signed-off-by: Alexander Lobakin <alobakin@pm.me> Reviewed-by: Nathan Chancellor <natechancellor@gmail.com> > --- > arch/mips/kernel/vmlinux.lds.S | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S > index 0f736d60d43e..4709959f6985 100644 > --- a/arch/mips/kernel/vmlinux.lds.S > +++ b/arch/mips/kernel/vmlinux.lds.S > @@ -69,6 +69,7 @@ SECTIONS > *(.text.*) > *(.fixup) > *(.gnu.warning) > + *(.got) > } :text = 0 > _etext = .; /* End of text section */ > > -- > 2.30.0 > >
On Thu, Jan 07, 2021 at 01:21:02PM +0000, Alexander Lobakin wrote: > Now, after that all the sections are explicitly described and > declared in vmlinux.lds.S, we can enable ld orphan warnings to > prevent from missing any new sections in future. > > Signed-off-by: Alexander Lobakin <alobakin@pm.me> > Reviewed-by: Kees Cook <keescook@chromium.org> Reviewed-by: Nathan Chancellor <natechancellor@gmail.com> > --- > arch/mips/Kconfig | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig > index d68df1febd25..d3e64cc0932b 100644 > --- a/arch/mips/Kconfig > +++ b/arch/mips/Kconfig > @@ -18,6 +18,7 @@ config MIPS > select ARCH_USE_QUEUED_SPINLOCKS > select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU > select ARCH_WANT_IPC_PARSE_VERSION > + select ARCH_WANT_LD_ORPHAN_WARN > select BUILDTIME_TABLE_SORT > select CLONE_BACKWARDS > select CPU_NO_EFFICIENT_FFS if (TARGET_ISA_REV < 1) > -- > 2.30.0 > >
diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S index 0f4e46ea4458..0f736d60d43e 100644 --- a/arch/mips/kernel/vmlinux.lds.S +++ b/arch/mips/kernel/vmlinux.lds.S @@ -226,4 +226,15 @@ SECTIONS *(.pdr) *(.reginfo) } + + /* + * Sections that should stay zero sized, which is safer to + * explicitly check instead of blindly discarding. + */ + + .rel.dyn : { + *(.rel.*) + *(.rel_*) + } + ASSERT(SIZEOF(.rel.dyn) == 0, "Unexpected run-time relocations (.rel) detected!") }
Catch any symbols placed in .rel.dyn and check for these sections to be zero-sized at link time. Eliminates following ld warning: mips-alpine-linux-musl-ld: warning: orphan section `.rel.dyn' from `init/main.o' being placed in section `.rel.dyn' Adopted from x86/kernel/vmlinux.lds.S. Suggested-by: Fangrui Song <maskray@google.com> Signed-off-by: Alexander Lobakin <alobakin@pm.me> --- arch/mips/kernel/vmlinux.lds.S | 11 +++++++++++ 1 file changed, 11 insertions(+)