diff mbox series

[v4,mips-next,4/7] MIPS: vmlinux.lds.S: catch bad .rel.dyn at link time

Message ID 20210107132010.463129-1-alobakin@pm.me
State Superseded
Headers show
Series MIPS: vmlinux.lds.S sections fixes & cleanup | expand

Commit Message

Alexander Lobakin Jan. 7, 2021, 1:20 p.m. UTC
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(+)

Comments

Kees Cook Jan. 7, 2021, 9:49 p.m. UTC | #1
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>
Nathan Chancellor Jan. 8, 2021, 9:17 p.m. UTC | #2
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

> 

>
Nathan Chancellor Jan. 8, 2021, 9:17 p.m. UTC | #3
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

> 

>
Nathan Chancellor Jan. 8, 2021, 9:19 p.m. UTC | #4
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 mbox series

Patch

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!")
 }