All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] x86: Discard .note.gnu.property sections in vDSO
@ 2020-03-26 17:43 H.J. Lu
  2020-03-27 10:44 ` Borislav Petkov
  2020-03-27 17:27 ` [tip: x86/build] x86/vdso: " tip-bot2 for H.J. Lu
  0 siblings, 2 replies; 4+ messages in thread
From: H.J. Lu @ 2020-03-26 17:43 UTC (permalink / raw)
  To: linux-kernel
  Cc: Andy Lutomirski, Thomas Gleixner, Kees Cook, Ingo Molnar,
	Borislav Petkov, H . Peter Anvin, x86, Yu-cheng Yu

With the command-line option, -mx86-used-note=yes, the x86 assembler
in binutils 2.32 and above generates a program property note in a note
section, .note.gnu.property, to encode used x86 ISAs and features.  But
x86 kernel vDSO linker script only contains a single NOTE segment:

PHDRS
{
 text PT_LOAD FLAGS(5) FILEHDR PHDRS; /* PF_R|PF_X */
 dynamic PT_DYNAMIC FLAGS(4); /* PF_R */
 note PT_NOTE FLAGS(4); /* PF_R */
 eh_frame_hdr 0x6474e550;
}

The NOTE segment generated by vDSO linker script is aligned to 4 bytes.
But .note.gnu.property section must be aligned to 8 bytes on x86-64 and
we get

[hjl@gnu-skx-1 vdso]$ readelf -n vdso64.so

Displaying notes found in: .note
  Owner                Data size 	Description
  Linux                0x00000004	Unknown note type: (0x00000000)
   description data: 06 00 00 00
readelf: Warning: note with invalid namesz and/or descsz found at offset 0x20
readelf: Warning:  type: 0x78, namesize: 0x00000100, descsize: 0x756e694c, alignment: 8
[hjl@gnu-skx-1 vdso]$

Since note.gnu.property section in vDSO is not checked by dynamic linker,
this patch discards .note.gnu.property sections in vDSO by adding

/DISCARD/ : {
 *(.note.gnu.property)
}

before .notes sections in vDSO linker script.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
---
 arch/x86/entry/vdso/vdso-layout.lds.S | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/arch/x86/entry/vdso/vdso-layout.lds.S b/arch/x86/entry/vdso/vdso-layout.lds.S
index ea7e0155c604..4d152933547d 100644
--- a/arch/x86/entry/vdso/vdso-layout.lds.S
+++ b/arch/x86/entry/vdso/vdso-layout.lds.S
@@ -57,6 +57,13 @@ SECTIONS
 		*(.gnu.linkonce.b.*)
 	}						:text
 
+	/*
+	 * Discard .note.gnu.property sections which are unused and have
+	 * different alignment requirement from vDSO note sections.
+	 */
+	/DISCARD/ : {
+		*(.note.gnu.property)
+	}
 	.note		: { *(.note.*) }		:text	:note
 
 	.eh_frame_hdr	: { *(.eh_frame_hdr) }		:text	:eh_frame_hdr
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] x86: Discard .note.gnu.property sections in vDSO
  2020-03-26 17:43 [PATCH] x86: Discard .note.gnu.property sections in vDSO H.J. Lu
@ 2020-03-27 10:44 ` Borislav Petkov
  2020-03-27 12:07   ` H.J. Lu
  2020-03-27 17:27 ` [tip: x86/build] x86/vdso: " tip-bot2 for H.J. Lu
  1 sibling, 1 reply; 4+ messages in thread
From: Borislav Petkov @ 2020-03-27 10:44 UTC (permalink / raw)
  To: H.J. Lu
  Cc: linux-kernel, Andy Lutomirski, Thomas Gleixner, Kees Cook,
	Ingo Molnar, H . Peter Anvin, x86, Yu-cheng Yu

On Thu, Mar 26, 2020 at 10:43:14AM -0700, H.J. Lu wrote:
> With the command-line option, -mx86-used-note=yes, the x86 assembler

I see:

       -mx86-used-note=no
       -mx86-used-note=yes
           These options control whether the assembler should generate
           GNU_PROPERTY_X86_ISA_1_USED and GNU_PROPERTY_X86_FEATURE_2_USED GNU property
           notes.  The default can be controlled by the --enable-x86-used-note
           configure option.

Is there a plan to use this build option in the kernel in the future or
all binutils will have it enabled or what's the story here?

Because I don't see -mx86-used-note used anywhere in the kernel...

> in binutils 2.32 and above generates a program property note in a note
> section, .note.gnu.property, to encode used x86 ISAs and features.  But
> x86 kernel vDSO linker script only contains a single NOTE segment:
> 
> PHDRS
> {
>  text PT_LOAD FLAGS(5) FILEHDR PHDRS; /* PF_R|PF_X */
>  dynamic PT_DYNAMIC FLAGS(4); /* PF_R */
>  note PT_NOTE FLAGS(4); /* PF_R */
>  eh_frame_hdr 0x6474e550;
> }
> 
> The NOTE segment generated by vDSO linker script is aligned to 4 bytes.
> But .note.gnu.property section must be aligned to 8 bytes on x86-64 and
> we get
> 
> [hjl@gnu-skx-1 vdso]$ readelf -n vdso64.so
> 
> Displaying notes found in: .note
>   Owner                Data size 	Description
>   Linux                0x00000004	Unknown note type: (0x00000000)
>    description data: 06 00 00 00
> readelf: Warning: note with invalid namesz and/or descsz found at offset 0x20
> readelf: Warning:  type: 0x78, namesize: 0x00000100, descsize: 0x756e694c, alignment: 8
> [hjl@gnu-skx-1 vdso]$
> 
> Since note.gnu.property section in vDSO is not checked by dynamic linker,
> this patch discards .note.gnu.property sections in vDSO by adding

Avoid having "This patch" or "This commit" in the commit message. It is
tautologically useless.

Also, do

$ git grep 'This patch' Documentation/process

for more details.

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] x86: Discard .note.gnu.property sections in vDSO
  2020-03-27 10:44 ` Borislav Petkov
@ 2020-03-27 12:07   ` H.J. Lu
  0 siblings, 0 replies; 4+ messages in thread
From: H.J. Lu @ 2020-03-27 12:07 UTC (permalink / raw)
  To: Borislav Petkov
  Cc: LKML, Andy Lutomirski, Thomas Gleixner, Kees Cook, Ingo Molnar,
	H . Peter Anvin, the arch/x86 maintainers, Yu-cheng Yu

On Fri, Mar 27, 2020 at 3:44 AM Borislav Petkov <bp@alien8.de> wrote:
>
> On Thu, Mar 26, 2020 at 10:43:14AM -0700, H.J. Lu wrote:
> > With the command-line option, -mx86-used-note=yes, the x86 assembler
>
> I see:
>
>        -mx86-used-note=no
>        -mx86-used-note=yes
>            These options control whether the assembler should generate
>            GNU_PROPERTY_X86_ISA_1_USED and GNU_PROPERTY_X86_FEATURE_2_USED GNU property
>            notes.  The default can be controlled by the --enable-x86-used-note
>            configure option.
>
> Is there a plan to use this build option in the kernel in the future or
> all binutils will have it enabled or what's the story here?
>
> Because I don't see -mx86-used-note used anywhere in the kernel...

-mx86-used-note=yes can be enabled by default at binutils configure time:

[hjl@gnu-cfl-2 ~]$ as --help | grep mx86-used-note
  -mx86-used-note=[no|yes] (default: yes)
[hjl@gnu-cfl-2 ~]$

I am changing the commit log to

---
With the command-line option, -mx86-used-note=yes, which can also be
enabled at binutils build time with

  --enable-x86-used-note  generate GNU x86 used ISA and feature properties

the x86 assembler in binutils 2.32 and above generates a program property
note in a note section, .note.gnu.property, to encode used x86 ISAs and
features.  But kernel linker script only contains a single NOTE segment:
---

> > in binutils 2.32 and above generates a program property note in a note
> > section, .note.gnu.property, to encode used x86 ISAs and features.  But
> > x86 kernel vDSO linker script only contains a single NOTE segment:
> >
> > PHDRS
> > {
> >  text PT_LOAD FLAGS(5) FILEHDR PHDRS; /* PF_R|PF_X */
> >  dynamic PT_DYNAMIC FLAGS(4); /* PF_R */
> >  note PT_NOTE FLAGS(4); /* PF_R */
> >  eh_frame_hdr 0x6474e550;
> > }
> >
> > The NOTE segment generated by vDSO linker script is aligned to 4 bytes.
> > But .note.gnu.property section must be aligned to 8 bytes on x86-64 and
> > we get
> >
> > [hjl@gnu-skx-1 vdso]$ readelf -n vdso64.so
> >
> > Displaying notes found in: .note
> >   Owner                Data size      Description
> >   Linux                0x00000004     Unknown note type: (0x00000000)
> >    description data: 06 00 00 00
> > readelf: Warning: note with invalid namesz and/or descsz found at offset 0x20
> > readelf: Warning:  type: 0x78, namesize: 0x00000100, descsize: 0x756e694c, alignment: 8
> > [hjl@gnu-skx-1 vdso]$
> >
> > Since note.gnu.property section in vDSO is not checked by dynamic linker,
> > this patch discards .note.gnu.property sections in vDSO by adding
>
> Avoid having "This patch" or "This commit" in the commit message. It is
> tautologically useless.

I am changing it to

Since note.gnu.property section in kernel image is never used, discard
.note.gnu.property sections in kernel linker script by adding

/DISCARD/ : {
  *(.note.gnu.property)
}

> Also, do
>
> $ git grep 'This patch' Documentation/process
>
> for more details.

Thanks.

-- 
H.J.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [tip: x86/build] x86/vdso: Discard .note.gnu.property sections in vDSO
  2020-03-26 17:43 [PATCH] x86: Discard .note.gnu.property sections in vDSO H.J. Lu
  2020-03-27 10:44 ` Borislav Petkov
@ 2020-03-27 17:27 ` tip-bot2 for H.J. Lu
  1 sibling, 0 replies; 4+ messages in thread
From: tip-bot2 for H.J. Lu @ 2020-03-27 17:27 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: H.J. Lu, Borislav Petkov, Kees Cook, x86, LKML

The following commit has been merged into the x86/build branch of tip:

Commit-ID:     4caffe6a28d3157c11cae923a40456a053c520ea
Gitweb:        https://git.kernel.org/tip/4caffe6a28d3157c11cae923a40456a053c520ea
Author:        H.J. Lu <hjl.tools@gmail.com>
AuthorDate:    Thu, 26 Mar 2020 10:43:14 -07:00
Committer:     Borislav Petkov <bp@suse.de>
CommitterDate: Fri, 27 Mar 2020 15:53:05 +01:00

x86/vdso: Discard .note.gnu.property sections in vDSO

With the command-line option -mx86-used-note=yes which can also be
enabled at binutils build time with:

  --enable-x86-used-note  generate GNU x86 used ISA and feature properties

the x86 assembler in binutils 2.32 and above generates a program property
note in a note section, .note.gnu.property, to encode used x86 ISAs and
features.  But kernel linker script only contains a single NOTE segment:

  PHDRS
  {
   text PT_LOAD FLAGS(5) FILEHDR PHDRS; /* PF_R|PF_X */
   dynamic PT_DYNAMIC FLAGS(4); /* PF_R */
   note PT_NOTE FLAGS(4); /* PF_R */
   eh_frame_hdr 0x6474e550;
  }

The NOTE segment generated by the vDSO linker script is aligned to 4 bytes.
But the .note.gnu.property section must be aligned to 8 bytes on x86-64:

  [hjl@gnu-skx-1 vdso]$ readelf -n vdso64.so

  Displaying notes found in: .note
    Owner                Data size 	Description
    Linux                0x00000004	Unknown note type: (0x00000000)
     description data: 06 00 00 00
  readelf: Warning: note with invalid namesz and/or descsz found at offset 0x20
  readelf: Warning:  type: 0x78, namesize: 0x00000100, descsize: 0x756e694c, alignment: 8

Since the note.gnu.property section in the vDSO is not checked by the
dynamic linker, discard the .note.gnu.property sections in the vDSO.

 [ bp: Massage. ]

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Reviewed-by: Kees Cook <keescook@chromium.org>
Link: https://lkml.kernel.org/r/20200326174314.254662-1-hjl.tools@gmail.com
---
 arch/x86/entry/vdso/vdso-layout.lds.S | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/arch/x86/entry/vdso/vdso-layout.lds.S b/arch/x86/entry/vdso/vdso-layout.lds.S
index ea7e015..4d15293 100644
--- a/arch/x86/entry/vdso/vdso-layout.lds.S
+++ b/arch/x86/entry/vdso/vdso-layout.lds.S
@@ -57,6 +57,13 @@ SECTIONS
 		*(.gnu.linkonce.b.*)
 	}						:text
 
+	/*
+	 * Discard .note.gnu.property sections which are unused and have
+	 * different alignment requirement from vDSO note sections.
+	 */
+	/DISCARD/ : {
+		*(.note.gnu.property)
+	}
 	.note		: { *(.note.*) }		:text	:note
 
 	.eh_frame_hdr	: { *(.eh_frame_hdr) }		:text	:eh_frame_hdr

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-03-27 17:27 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-26 17:43 [PATCH] x86: Discard .note.gnu.property sections in vDSO H.J. Lu
2020-03-27 10:44 ` Borislav Petkov
2020-03-27 12:07   ` H.J. Lu
2020-03-27 17:27 ` [tip: x86/build] x86/vdso: " tip-bot2 for H.J. Lu

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.