mbox series

[v5,mips-next,0/9] MIPS: vmlinux.lds.S sections fixes & cleanup

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

Message

Alexander Lobakin Jan. 10, 2021, 11:53 a.m. UTC
This series hunts the problems discovered after manual enabling of
ARCH_WANT_LD_ORPHAN_WARN. Notably:
 - adds the missing PAGE_ALIGNED_DATA() section affecting VDSO
   placement (marked for stable);
 - stops blind catching of orphan text sections with .text.*
   directive;
 - properly stops .eh_frame section generation.

Compile and runtime tested on MIPS32R2 CPS board with no issues
using two different toolkits:
 - Binutils 2.35.1, GCC 10.2.1 (with Alpine patches);
 - LLVM stack: 11.0.0 and from latest Git snapshot.

Since v4 [3]:
 - new: drop redundant .text.cps-vec creation and blind inclusion
   of orphan text sections via .text.* directive in vmlinux.lds.S;
 - don't assert SIZEOF(.rel.dyn) as it's reported that it may be not
   empty on certain machines and compilers (Thomas);
 - align GOT table like it's done for ARM64;
 - new: catch UBSAN's "unnamed data" sections in generic definitions
   when building with LD_DEAD_CODE_DATA_ELIMINATION;
 - collect Reviewed-bys (Kees, Nathan).

Since v3 [2]:
 - fix the third patch as GNU stack emits .rel.dyn into VDSO for
   some reason if .cfi_sections is specified.

Since v2 [1]:
 - stop discarding .eh_frame and just prevent it from generating
   (Kees);
 - drop redundant sections assertions (Fangrui);
 - place GOT table in .text instead of asserting as it's not empty
   when building with LLVM (Nathan);
 - catch compound literals in generic definitions when building with
   LD_DEAD_CODE_DATA_ELIMINATION (Kees);
 - collect two Reviewed-bys (Kees).

Since v1 [0]:
 - catch .got entries too as LLD may produce it (Nathan);
 - check for unwanted sections to be zero-sized instead of
   discarding (Fangrui).

[0] https://lore.kernel.org/linux-mips/20210104121729.46981-1-alobakin@pm.me
[1] https://lore.kernel.org/linux-mips/20210106200713.31840-1-alobakin@pm.me
[2] https://lore.kernel.org/linux-mips/20210107115120.281008-1-alobakin@pm.me
[3] https://lore.kernel.org/linux-mips/20210107123331.354075-1-alobakin@pm.me

Alexander Lobakin (9):
  MIPS: vmlinux.lds.S: add missing PAGE_ALIGNED_DATA() section
  MIPS: CPS: don't create redundant .text.cps-vec section
  MIPS: vmlinux.lds.S: add ".gnu.attributes" to DISCARDS
  MIPS: properly stop .eh_frame generation
  MIPS: vmlinux.lds.S: explicitly catch .rel.dyn symbols
  MIPS: vmlinux.lds.S: explicitly declare .got table
  vmlinux.lds.h: catch compound literals into data and BSS
  vmlinux.lds.h: catch UBSAN's "unnamed data" into data
  MIPS: select ARCH_WANT_LD_ORPHAN_WARN

 arch/mips/Kconfig                 |  1 +
 arch/mips/include/asm/asm.h       | 18 ++++++++++++++++++
 arch/mips/kernel/cps-vec.S        |  1 -
 arch/mips/kernel/vmlinux.lds.S    | 11 +++++++++--
 include/asm-generic/vmlinux.lds.h |  6 +++---
 5 files changed, 31 insertions(+), 6 deletions(-)

Comments

Kees Cook Jan. 11, 2021, 7:53 p.m. UTC | #1
On Sun, Jan 10, 2021 at 11:53:50AM +0000, Alexander Lobakin wrote:
> This series hunts the problems discovered after manual enabling of
> ARCH_WANT_LD_ORPHAN_WARN. Notably:
>  - adds the missing PAGE_ALIGNED_DATA() section affecting VDSO
>    placement (marked for stable);
>  - stops blind catching of orphan text sections with .text.*
>    directive;
>  - properly stops .eh_frame section generation.
> 
> Compile and runtime tested on MIPS32R2 CPS board with no issues
> using two different toolkits:
>  - Binutils 2.35.1, GCC 10.2.1 (with Alpine patches);
>  - LLVM stack: 11.0.0 and from latest Git snapshot.
> 
> Since v4 [3]:
>  - new: drop redundant .text.cps-vec creation and blind inclusion
>    of orphan text sections via .text.* directive in vmlinux.lds.S;
>  - don't assert SIZEOF(.rel.dyn) as it's reported that it may be not
>    empty on certain machines and compilers (Thomas);
>  - align GOT table like it's done for ARM64;
>  - new: catch UBSAN's "unnamed data" sections in generic definitions
>    when building with LD_DEAD_CODE_DATA_ELIMINATION;
>  - collect Reviewed-bys (Kees, Nathan).

Looks good; which tree will this land through?

-Kees

> 
> Since v3 [2]:
>  - fix the third patch as GNU stack emits .rel.dyn into VDSO for
>    some reason if .cfi_sections is specified.
> 
> Since v2 [1]:
>  - stop discarding .eh_frame and just prevent it from generating
>    (Kees);
>  - drop redundant sections assertions (Fangrui);
>  - place GOT table in .text instead of asserting as it's not empty
>    when building with LLVM (Nathan);
>  - catch compound literals in generic definitions when building with
>    LD_DEAD_CODE_DATA_ELIMINATION (Kees);
>  - collect two Reviewed-bys (Kees).
> 
> Since v1 [0]:
>  - catch .got entries too as LLD may produce it (Nathan);
>  - check for unwanted sections to be zero-sized instead of
>    discarding (Fangrui).
> 
> [0] https://lore.kernel.org/linux-mips/20210104121729.46981-1-alobakin@pm.me
> [1] https://lore.kernel.org/linux-mips/20210106200713.31840-1-alobakin@pm.me
> [2] https://lore.kernel.org/linux-mips/20210107115120.281008-1-alobakin@pm.me
> [3] https://lore.kernel.org/linux-mips/20210107123331.354075-1-alobakin@pm.me
> 
> Alexander Lobakin (9):
>   MIPS: vmlinux.lds.S: add missing PAGE_ALIGNED_DATA() section
>   MIPS: CPS: don't create redundant .text.cps-vec section
>   MIPS: vmlinux.lds.S: add ".gnu.attributes" to DISCARDS
>   MIPS: properly stop .eh_frame generation
>   MIPS: vmlinux.lds.S: explicitly catch .rel.dyn symbols
>   MIPS: vmlinux.lds.S: explicitly declare .got table
>   vmlinux.lds.h: catch compound literals into data and BSS
>   vmlinux.lds.h: catch UBSAN's "unnamed data" into data
>   MIPS: select ARCH_WANT_LD_ORPHAN_WARN
> 
>  arch/mips/Kconfig                 |  1 +
>  arch/mips/include/asm/asm.h       | 18 ++++++++++++++++++
>  arch/mips/kernel/cps-vec.S        |  1 -
>  arch/mips/kernel/vmlinux.lds.S    | 11 +++++++++--
>  include/asm-generic/vmlinux.lds.h |  6 +++---
>  5 files changed, 31 insertions(+), 6 deletions(-)
> 
> -- 
> 2.30.0
> 
>
Alexander Lobakin Jan. 11, 2021, 8:57 p.m. UTC | #2
From: Kees Cook <keescook@chromium.org>
Date: Mon, 11 Jan 2021 11:53:39 -0800

> On Sun, Jan 10, 2021 at 11:53:50AM +0000, Alexander Lobakin wrote:
>> This series hunts the problems discovered after manual enabling of
>> ARCH_WANT_LD_ORPHAN_WARN. Notably:
>>  - adds the missing PAGE_ALIGNED_DATA() section affecting VDSO
>>    placement (marked for stable);
>>  - stops blind catching of orphan text sections with .text.*
>>    directive;
>>  - properly stops .eh_frame section generation.
>>
>> Compile and runtime tested on MIPS32R2 CPS board with no issues
>> using two different toolkits:
>>  - Binutils 2.35.1, GCC 10.2.1 (with Alpine patches);
>>  - LLVM stack: 11.0.0 and from latest Git snapshot.
>>
>> Since v4 [3]:
>>  - new: drop redundant .text.cps-vec creation and blind inclusion
>>    of orphan text sections via .text.* directive in vmlinux.lds.S;
>>  - don't assert SIZEOF(.rel.dyn) as it's reported that it may be not
>>    empty on certain machines and compilers (Thomas);
>>  - align GOT table like it's done for ARM64;
>>  - new: catch UBSAN's "unnamed data" sections in generic definitions
>>    when building with LD_DEAD_CODE_DATA_ELIMINATION;
>>  - collect Reviewed-bys (Kees, Nathan).
>
> Looks good; which tree will this land through?

linux-mips/mips-next I guess, since 7 of 9 patches are related only
to this architecture.
This might need Arnd's Acked-bys or Reviewed-by for the two that
refer include/asm-generic, let's see what Thomas think.

> -Kees
>
>>
>> Since v3 [2]:
>>  - fix the third patch as GNU stack emits .rel.dyn into VDSO for
>>    some reason if .cfi_sections is specified.
>>
>> Since v2 [1]:
>>  - stop discarding .eh_frame and just prevent it from generating
>>    (Kees);
>>  - drop redundant sections assertions (Fangrui);
>>  - place GOT table in .text instead of asserting as it's not empty
>>    when building with LLVM (Nathan);
>>  - catch compound literals in generic definitions when building with
>>    LD_DEAD_CODE_DATA_ELIMINATION (Kees);
>>  - collect two Reviewed-bys (Kees).
>>
>> Since v1 [0]:
>>  - catch .got entries too as LLD may produce it (Nathan);
>>  - check for unwanted sections to be zero-sized instead of
>>    discarding (Fangrui).
>>
>> [0] https://lore.kernel.org/linux-mips/20210104121729.46981-1-alobakin@pm.me
>> [1] https://lore.kernel.org/linux-mips/20210106200713.31840-1-alobakin@pm.me
>> [2] https://lore.kernel.org/linux-mips/20210107115120.281008-1-alobakin@pm.me
>> [3] https://lore.kernel.org/linux-mips/20210107123331.354075-1-alobakin@pm.me
>>
>> Alexander Lobakin (9):
>>   MIPS: vmlinux.lds.S: add missing PAGE_ALIGNED_DATA() section
>>   MIPS: CPS: don't create redundant .text.cps-vec section
>>   MIPS: vmlinux.lds.S: add ".gnu.attributes" to DISCARDS
>>   MIPS: properly stop .eh_frame generation
>>   MIPS: vmlinux.lds.S: explicitly catch .rel.dyn symbols
>>   MIPS: vmlinux.lds.S: explicitly declare .got table
>>   vmlinux.lds.h: catch compound literals into data and BSS
>>   vmlinux.lds.h: catch UBSAN's "unnamed data" into data
>>   MIPS: select ARCH_WANT_LD_ORPHAN_WARN
>>
>>  arch/mips/Kconfig                 |  1 +
>>  arch/mips/include/asm/asm.h       | 18 ++++++++++++++++++
>>  arch/mips/kernel/cps-vec.S        |  1 -
>>  arch/mips/kernel/vmlinux.lds.S    | 11 +++++++++--
>>  include/asm-generic/vmlinux.lds.h |  6 +++---
>>  5 files changed, 31 insertions(+), 6 deletions(-)
>>
>> --
>> 2.30.0
>>
>>
>
> --
> Kees Cook

Al
Arnd Bergmann Jan. 15, 2021, 11:15 a.m. UTC | #3
On Mon, Jan 11, 2021 at 11:44 PM Thomas Bogendoerfer
<tsbogend@alpha.franken.de> wrote:
> On Mon, Jan 11, 2021 at 08:57:25PM +0000, Alexander Lobakin wrote:

> > From: Kees Cook <keescook@chromium.org>

> > Date: Mon, 11 Jan 2021 11:53:39 -0800

> >

> > > On Sun, Jan 10, 2021 at 11:53:50AM +0000, Alexander Lobakin wrote:

> > >> This series hunts the problems discovered after manual enabling of

> > >> ARCH_WANT_LD_ORPHAN_WARN. Notably:

> > >>  - adds the missing PAGE_ALIGNED_DATA() section affecting VDSO

> > >>    placement (marked for stable);

> > >>  - stops blind catching of orphan text sections with .text.*

> > >>    directive;

> > >>  - properly stops .eh_frame section generation.

> > >>

> > >> Compile and runtime tested on MIPS32R2 CPS board with no issues

> > >> using two different toolkits:

> > >>  - Binutils 2.35.1, GCC 10.2.1 (with Alpine patches);

> > >>  - LLVM stack: 11.0.0 and from latest Git snapshot.

> > >>

> > >> Since v4 [3]:

> > >>  - new: drop redundant .text.cps-vec creation and blind inclusion

> > >>    of orphan text sections via .text.* directive in vmlinux.lds.S;

> > >>  - don't assert SIZEOF(.rel.dyn) as it's reported that it may be not

> > >>    empty on certain machines and compilers (Thomas);

> > >>  - align GOT table like it's done for ARM64;

> > >>  - new: catch UBSAN's "unnamed data" sections in generic definitions

> > >>    when building with LD_DEAD_CODE_DATA_ELIMINATION;

> > >>  - collect Reviewed-bys (Kees, Nathan).

> > >

> > > Looks good; which tree will this land through?

> >

> > linux-mips/mips-next I guess, since 7 of 9 patches are related only

> > to this architecture.

> > This might need Arnd's Acked-bys or Reviewed-by for the two that

> > refer include/asm-generic, let's see what Thomas think.

>

> Looks good from my side and I have it already sitting in branch for

> submission.

>

> Arnd, are you ok with the changes in include/asm-generic ?


Yes, I'm never quite sure about what to make of linker script changes,
but I trust Kees on the review. For merging it through your tree:

Acked-by: Arnd Bergmann <arnd@arndb.de>
Thomas Bogendoerfer Jan. 15, 2021, 2:40 p.m. UTC | #4
On Sun, Jan 10, 2021 at 11:53:50AM +0000, Alexander Lobakin wrote:
> This series hunts the problems discovered after manual enabling of

> ARCH_WANT_LD_ORPHAN_WARN. Notably:

>  - adds the missing PAGE_ALIGNED_DATA() section affecting VDSO

>    placement (marked for stable);

>  - stops blind catching of orphan text sections with .text.*

>    directive;

>  - properly stops .eh_frame section generation.

> 

> Compile and runtime tested on MIPS32R2 CPS board with no issues

> using two different toolkits:

>  - Binutils 2.35.1, GCC 10.2.1 (with Alpine patches);

>  - LLVM stack: 11.0.0 and from latest Git snapshot.

> 

> Since v4 [3]:

>  - new: drop redundant .text.cps-vec creation and blind inclusion

>    of orphan text sections via .text.* directive in vmlinux.lds.S;

>  - don't assert SIZEOF(.rel.dyn) as it's reported that it may be not

>    empty on certain machines and compilers (Thomas);

>  - align GOT table like it's done for ARM64;

>  - new: catch UBSAN's "unnamed data" sections in generic definitions

>    when building with LD_DEAD_CODE_DATA_ELIMINATION;

>  - collect Reviewed-bys (Kees, Nathan).

> 

> Since v3 [2]:

>  - fix the third patch as GNU stack emits .rel.dyn into VDSO for

>    some reason if .cfi_sections is specified.

> 

> Since v2 [1]:

>  - stop discarding .eh_frame and just prevent it from generating

>    (Kees);

>  - drop redundant sections assertions (Fangrui);

>  - place GOT table in .text instead of asserting as it's not empty

>    when building with LLVM (Nathan);

>  - catch compound literals in generic definitions when building with

>    LD_DEAD_CODE_DATA_ELIMINATION (Kees);

>  - collect two Reviewed-bys (Kees).

> 

> Since v1 [0]:

>  - catch .got entries too as LLD may produce it (Nathan);

>  - check for unwanted sections to be zero-sized instead of

>    discarding (Fangrui).

> 

> [0] https://lore.kernel.org/linux-mips/20210104121729.46981-1-alobakin@pm.me

> [1] https://lore.kernel.org/linux-mips/20210106200713.31840-1-alobakin@pm.me

> [2] https://lore.kernel.org/linux-mips/20210107115120.281008-1-alobakin@pm.me

> [3] https://lore.kernel.org/linux-mips/20210107123331.354075-1-alobakin@pm.me

> 

> Alexander Lobakin (9):

>   MIPS: vmlinux.lds.S: add missing PAGE_ALIGNED_DATA() section

>   MIPS: CPS: don't create redundant .text.cps-vec section

>   MIPS: vmlinux.lds.S: add ".gnu.attributes" to DISCARDS

>   MIPS: properly stop .eh_frame generation

>   MIPS: vmlinux.lds.S: explicitly catch .rel.dyn symbols

>   MIPS: vmlinux.lds.S: explicitly declare .got table

>   vmlinux.lds.h: catch compound literals into data and BSS

>   vmlinux.lds.h: catch UBSAN's "unnamed data" into data

>   MIPS: select ARCH_WANT_LD_ORPHAN_WARN

> 

>  arch/mips/Kconfig                 |  1 +

>  arch/mips/include/asm/asm.h       | 18 ++++++++++++++++++

>  arch/mips/kernel/cps-vec.S        |  1 -

>  arch/mips/kernel/vmlinux.lds.S    | 11 +++++++++--

>  include/asm-generic/vmlinux.lds.h |  6 +++---

>  5 files changed, 31 insertions(+), 6 deletions(-)


applied to mips-next.

Thoomas.

-- 
Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
good idea.                                                [ RFC1925, 2.3 ]