linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] Add RUNTIME_DISCARD_EXIT to generic DISCARDS
@ 2020-03-26 19:30 H.J. Lu
  2020-03-26 19:30 ` [PATCH 2/2] Discard .note.gnu.property sections in generic NOTES H.J. Lu
                   ` (2 more replies)
  0 siblings, 3 replies; 14+ messages in thread
From: H.J. Lu @ 2020-03-26 19:30 UTC (permalink / raw)
  To: linux-kernel
  Cc: Andy Lutomirski, Thomas Gleixner, Kees Cook, Thomas Lendacky,
	Sami Tolvanen, Heiko Carstens, Ingo Molnar, Borislav Petkov,
	H . Peter Anvin, x86, Arnd Bergmann, linux-arch, Yu-cheng Yu

In x86 kernel, .exit.text and .exit.data sections are discarded at
runtime, not by linker.  Add RUNTIME_DISCARD_EXIT to generic DISCARDS
and define it in x86 kernel linker script to keep them.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
---
 arch/x86/kernel/vmlinux.lds.S     |  1 +
 include/asm-generic/vmlinux.lds.h | 10 ++++++++--
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S
index e3296aa028fe..7206e1ac23dd 100644
--- a/arch/x86/kernel/vmlinux.lds.S
+++ b/arch/x86/kernel/vmlinux.lds.S
@@ -21,6 +21,7 @@
 #define LOAD_OFFSET __START_KERNEL_map
 #endif
 
+#define RUNTIME_DISCARD_EXIT
 #define EMITS_PT_NOTE
 #define RO_EXCEPTION_TABLE_ALIGN	16
 
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index e00f41aa8ec4..6b943fb8c5fd 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -894,10 +894,16 @@
  * section definitions so that such archs put those in earlier section
  * definitions.
  */
+#ifdef RUNTIME_DISCARD_EXIT
+#define EXIT_DISCARDS
+#else
+#define EXIT_DISCARDS							\
+	EXIT_TEXT							\
+	EXIT_DATA
+#endif
 #define DISCARDS							\
 	/DISCARD/ : {							\
-	EXIT_TEXT							\
-	EXIT_DATA							\
+	EXIT_DISCARDS							\
 	EXIT_CALL							\
 	*(.discard)							\
 	*(.discard.*)							\
-- 
2.25.1


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

* [PATCH 2/2] Discard .note.gnu.property sections in generic NOTES
  2020-03-26 19:30 [PATCH 1/2] Add RUNTIME_DISCARD_EXIT to generic DISCARDS H.J. Lu
@ 2020-03-26 19:30 ` H.J. Lu
  2020-03-26 20:11 ` [PATCH 1/2] Add RUNTIME_DISCARD_EXIT to generic DISCARDS Borislav Petkov
  2020-03-27 11:07 ` [tip: x86/build] x86, vmlinux.lds: " tip-bot2 for H.J. Lu
  2 siblings, 0 replies; 14+ messages in thread
From: H.J. Lu @ 2020-03-26 19:30 UTC (permalink / raw)
  To: linux-kernel
  Cc: Andy Lutomirski, Thomas Gleixner, Kees Cook, Thomas Lendacky,
	Sami Tolvanen, Heiko Carstens, Ingo Molnar, Borislav Petkov,
	H . Peter Anvin, x86, Arnd Bergmann, linux-arch, 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
kernel linker script only contains a single NOTE segment:

PHDRS {
 text PT_LOAD FLAGS(5);
 data PT_LOAD FLAGS(6);
 percpu PT_LOAD FLAGS(6);
 init PT_LOAD FLAGS(7);
 note PT_NOTE FLAGS(0);
}
SECTIONS
{
...
 .notes : AT(ADDR(.notes) - 0xffffffff80000000) { __start_notes = .; KEEP(*(.not
e.*)) __stop_notes = .; } :text :note
...
}

The NOTE segment generated by kernel 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 linux]$ readelf -n vmlinux

Displaying notes found in: .notes
  Owner                Data size Description
  Xen                  0x00000006 Unknown note type: (0x00000006)
   description data: 6c 69 6e 75 78 00
  Xen                  0x00000004 Unknown note type: (0x00000007)
   description data: 32 2e 36 00
  xen-3.0              0x00000005 Unknown note type: (0x006e6558)
   description data: 08 00 00 00 03
readelf: Warning: note with invalid namesz and/or descsz found at offset 0x50
readelf: Warning:  type: 0xffffffff, namesize: 0x006e6558, descsize:
0x80000000, alignment: 8
[hjl@gnu-skx-1 linux]$

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

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

before kernel NOTE segment in generic NOTES.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
---
 include/asm-generic/vmlinux.lds.h | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index 6b943fb8c5fd..6659a7c07c84 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -818,7 +818,14 @@
 #define TRACEDATA
 #endif
 
+/*
+ * Discard .note.gnu.property sections which are unused and have
+ * different alignment requirement from kernel note sections.
+ */
 #define NOTES								\
+	/DISCARD/ : {							\
+		*(.note.gnu.property)					\
+	}								\
 	.notes : AT(ADDR(.notes) - LOAD_OFFSET) {			\
 		__start_notes = .;					\
 		KEEP(*(.note.*))					\
-- 
2.25.1


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

* Re: [PATCH 1/2] Add RUNTIME_DISCARD_EXIT to generic DISCARDS
  2020-03-26 19:30 [PATCH 1/2] Add RUNTIME_DISCARD_EXIT to generic DISCARDS H.J. Lu
  2020-03-26 19:30 ` [PATCH 2/2] Discard .note.gnu.property sections in generic NOTES H.J. Lu
@ 2020-03-26 20:11 ` Borislav Petkov
  2020-03-26 20:39   ` Kees Cook
  2020-03-27 11:07 ` [tip: x86/build] x86, vmlinux.lds: " tip-bot2 for H.J. Lu
  2 siblings, 1 reply; 14+ messages in thread
From: Borislav Petkov @ 2020-03-26 20:11 UTC (permalink / raw)
  To: Kees Cook
  Cc: H.J. Lu, linux-kernel, Andy Lutomirski, Thomas Gleixner,
	Thomas Lendacky, Sami Tolvanen, Heiko Carstens, Ingo Molnar,
	H . Peter Anvin, x86, Arnd Bergmann, linux-arch, Yu-cheng Yu

On Thu, Mar 26, 2020 at 12:30:20PM -0700, H.J. Lu wrote:
> In x86 kernel, .exit.text and .exit.data sections are discarded at
> runtime, not by linker.  Add RUNTIME_DISCARD_EXIT to generic DISCARDS
> and define it in x86 kernel linker script to keep them.
> 
> Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
> Reviewed-by: Kees Cook <keescook@chromium.org>
> ---
>  arch/x86/kernel/vmlinux.lds.S     |  1 +
>  include/asm-generic/vmlinux.lds.h | 10 ++++++++--
>  2 files changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S
> index e3296aa028fe..7206e1ac23dd 100644
> --- a/arch/x86/kernel/vmlinux.lds.S
> +++ b/arch/x86/kernel/vmlinux.lds.S
> @@ -21,6 +21,7 @@
>  #define LOAD_OFFSET __START_KERNEL_map
>  #endif
>  
> +#define RUNTIME_DISCARD_EXIT
>  #define EMITS_PT_NOTE
>  #define RO_EXCEPTION_TABLE_ALIGN	16
>  
> diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
> index e00f41aa8ec4..6b943fb8c5fd 100644
> --- a/include/asm-generic/vmlinux.lds.h
> +++ b/include/asm-generic/vmlinux.lds.h
> @@ -894,10 +894,16 @@
>   * section definitions so that such archs put those in earlier section
>   * definitions.
>   */
> +#ifdef RUNTIME_DISCARD_EXIT
> +#define EXIT_DISCARDS
> +#else
> +#define EXIT_DISCARDS							\
> +	EXIT_TEXT							\
> +	EXIT_DATA
> +#endif

/me goes back and reads the old thread on this...

Kees, do you expect other arches to actually need this
RUNTIME_DISCARD_EXIT thing or was that a hypothetical thing?

/me searches more...

oh, there's a patchset from you

https://lkml.kernel.org/r/20200228002244.15240-1-keescook@chromium.org

which already contains this patch *and* an ARM64 patch which defines
RUNTIME_DISCARD_EXIT so I'm guessing ARM64 wants to discard at runtime
too.

Which leaves the question why is H.J. sending that patch separate and
you carry it in a patchset about orphan section warning? Seems like it
wants to be in your patchset?

Thx.

-- 
Regards/Gruss,
    Boris.

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

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

* Re: [PATCH 1/2] Add RUNTIME_DISCARD_EXIT to generic DISCARDS
  2020-03-26 20:11 ` [PATCH 1/2] Add RUNTIME_DISCARD_EXIT to generic DISCARDS Borislav Petkov
@ 2020-03-26 20:39   ` Kees Cook
  0 siblings, 0 replies; 14+ messages in thread
From: Kees Cook @ 2020-03-26 20:39 UTC (permalink / raw)
  To: Borislav Petkov
  Cc: H.J. Lu, linux-kernel, Andy Lutomirski, Thomas Gleixner,
	Thomas Lendacky, Sami Tolvanen, Heiko Carstens, Ingo Molnar,
	H . Peter Anvin, x86, Arnd Bergmann, linux-arch, Yu-cheng Yu

On Thu, Mar 26, 2020 at 09:11:42PM +0100, Borislav Petkov wrote:
> On Thu, Mar 26, 2020 at 12:30:20PM -0700, H.J. Lu wrote:
> > In x86 kernel, .exit.text and .exit.data sections are discarded at
> > runtime, not by linker.  Add RUNTIME_DISCARD_EXIT to generic DISCARDS
> > and define it in x86 kernel linker script to keep them.
> > 
> > Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
> > Reviewed-by: Kees Cook <keescook@chromium.org>
> > ---
> >  arch/x86/kernel/vmlinux.lds.S     |  1 +
> >  include/asm-generic/vmlinux.lds.h | 10 ++++++++--
> >  2 files changed, 9 insertions(+), 2 deletions(-)
> > 
> > diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S
> > index e3296aa028fe..7206e1ac23dd 100644
> > --- a/arch/x86/kernel/vmlinux.lds.S
> > +++ b/arch/x86/kernel/vmlinux.lds.S
> > @@ -21,6 +21,7 @@
> >  #define LOAD_OFFSET __START_KERNEL_map
> >  #endif
> >  
> > +#define RUNTIME_DISCARD_EXIT
> >  #define EMITS_PT_NOTE
> >  #define RO_EXCEPTION_TABLE_ALIGN	16
> >  
> > diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
> > index e00f41aa8ec4..6b943fb8c5fd 100644
> > --- a/include/asm-generic/vmlinux.lds.h
> > +++ b/include/asm-generic/vmlinux.lds.h
> > @@ -894,10 +894,16 @@
> >   * section definitions so that such archs put those in earlier section
> >   * definitions.
> >   */
> > +#ifdef RUNTIME_DISCARD_EXIT
> > +#define EXIT_DISCARDS
> > +#else
> > +#define EXIT_DISCARDS							\
> > +	EXIT_TEXT							\
> > +	EXIT_DATA
> > +#endif
> 
> /me goes back and reads the old thread on this...
> 
> Kees, do you expect other arches to actually need this
> RUNTIME_DISCARD_EXIT thing or was that a hypothetical thing?
> 
> /me searches more...
> 
> oh, there's a patchset from you
> 
> https://lkml.kernel.org/r/20200228002244.15240-1-keescook@chromium.org
> 
> which already contains this patch *and* an ARM64 patch which defines
> RUNTIME_DISCARD_EXIT so I'm guessing ARM64 wants to discard at runtime
> too.

Correct.

> Which leaves the question why is H.J. sending that patch separate and
> you carry it in a patchset about orphan section warning? Seems like it
> wants to be in your patchset?

I had needed the same clean up for the orphan section handling, and
since it hadn't been picked up yet, I included it in my series. I'm
still stuck addressing several review comments, so there's no reason to
wait for me: I can easily rebase once these patches land somewhere. I'd
be happy to see them in -tip.

Thanks!

-Kees

-- 
Kees Cook

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

* [tip: x86/build] x86, vmlinux.lds: Add RUNTIME_DISCARD_EXIT to generic DISCARDS
  2020-03-26 19:30 [PATCH 1/2] Add RUNTIME_DISCARD_EXIT to generic DISCARDS H.J. Lu
  2020-03-26 19:30 ` [PATCH 2/2] Discard .note.gnu.property sections in generic NOTES H.J. Lu
  2020-03-26 20:11 ` [PATCH 1/2] Add RUNTIME_DISCARD_EXIT to generic DISCARDS Borislav Petkov
@ 2020-03-27 11:07 ` tip-bot2 for H.J. Lu
  2020-03-27 17:43   ` Kees Cook
  2 siblings, 1 reply; 14+ messages in thread
From: tip-bot2 for H.J. Lu @ 2020-03-27 11:07 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:     84d5f77fc2ee4e010c2c037750e32f06e55224b0
Gitweb:        https://git.kernel.org/tip/84d5f77fc2ee4e010c2c037750e32f06e55224b0
Author:        H.J. Lu <hjl.tools@gmail.com>
AuthorDate:    Thu, 26 Mar 2020 12:30:20 -07:00
Committer:     Borislav Petkov <bp@suse.de>
CommitterDate: Fri, 27 Mar 2020 11:52:11 +01:00

x86, vmlinux.lds: Add RUNTIME_DISCARD_EXIT to generic DISCARDS

In the x86 kernel, .exit.text and .exit.data sections are discarded at
runtime, not by the linker. Add RUNTIME_DISCARD_EXIT to generic DISCARDS
and define it in the x86 kernel linker script to keep them.

The sections are added before the DISCARD directive so document here
only the situation explicitly as this change doesn't have any effect on
the generated kernel. Also, other architectures like ARM64 will use it
too so generalize the approach with the RUNTIME_DISCARD_EXIT define.

 [ bp: Massage and extend commit message. ]

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/20200326193021.255002-1-hjl.tools@gmail.com
---
 arch/x86/kernel/vmlinux.lds.S     |  1 +
 include/asm-generic/vmlinux.lds.h | 11 +++++++++--
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S
index e3296aa..7206e1a 100644
--- a/arch/x86/kernel/vmlinux.lds.S
+++ b/arch/x86/kernel/vmlinux.lds.S
@@ -21,6 +21,7 @@
 #define LOAD_OFFSET __START_KERNEL_map
 #endif
 
+#define RUNTIME_DISCARD_EXIT
 #define EMITS_PT_NOTE
 #define RO_EXCEPTION_TABLE_ALIGN	16
 
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index e00f41a..2444336 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -894,10 +894,17 @@
  * section definitions so that such archs put those in earlier section
  * definitions.
  */
+#ifdef RUNTIME_DISCARD_EXIT
+#define EXIT_DISCARDS
+#else
+#define EXIT_DISCARDS							\
+	EXIT_TEXT							\
+	EXIT_DATA
+#endif
+
 #define DISCARDS							\
 	/DISCARD/ : {							\
-	EXIT_TEXT							\
-	EXIT_DATA							\
+	EXIT_DISCARDS							\
 	EXIT_CALL							\
 	*(.discard)							\
 	*(.discard.*)							\

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

* Re: [tip: x86/build] x86, vmlinux.lds: Add RUNTIME_DISCARD_EXIT to generic DISCARDS
  2020-03-27 11:07 ` [tip: x86/build] x86, vmlinux.lds: " tip-bot2 for H.J. Lu
@ 2020-03-27 17:43   ` Kees Cook
  0 siblings, 0 replies; 14+ messages in thread
From: Kees Cook @ 2020-03-27 17:43 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-tip-commits, H.J. Lu, Borislav Petkov, x86

On Fri, Mar 27, 2020 at 11:07:55AM -0000, tip-bot2 for H.J. Lu wrote:
> The following commit has been merged into the x86/build branch of tip:
> [...]
> x86, vmlinux.lds: Add RUNTIME_DISCARD_EXIT to generic DISCARDS

Thanks! And just for note, I'll likely wait for -rc2 to resend the
orphan series -- I now depend on _three_ trees. ;) x86/boot, x86/build,
and arm. Heh

-- 
Kees Cook

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

* Re: [PATCH 2/2] Discard .note.gnu.property sections in generic NOTES
  2022-09-19 17:40           ` Omar Sandoval
@ 2022-09-19 17:54             ` Mark Brown
  0 siblings, 0 replies; 14+ messages in thread
From: Mark Brown @ 2022-09-19 17:54 UTC (permalink / raw)
  To: Omar Sandoval
  Cc: Christophe Leroy, H.J. Lu, linux-arch, Yu-cheng Yu, Kees Cook,
	Arnd Bergmann, linux-kernel, Paul Mackerras, Naveen N . Rao,
	Borislav Petkov, linuxppc-dev

[-- Attachment #1: Type: text/plain, Size: 665 bytes --]

On Mon, Sep 19, 2022 at 10:40:36AM -0700, Omar Sandoval wrote:
> On Mon, Sep 19, 2022 at 06:33:40PM +0100, Mark Brown wrote:

> > I don't understand the question, what file are you talking about
> > here?  arch/arm64/include/asm/assembler.h is itself a file and I
> > couldn't find anything nearby in your mail talking about a file...

> Oops, that was a typo, I meant to say "I'm not sure what
> arch/arm64/include/asm/assembler.h is doing with this *note*". To be
> more explicit: does ARM64 need .note.gnu.property/NT_GNU_PROPERTY_TYPE_0
> in vmlinux?

It needs it in at least the vDSO which gets built into vmlinux.
AFAIR we don't use it in normal kernel code.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

* Re: [PATCH 2/2] Discard .note.gnu.property sections in generic NOTES
  2022-09-19 17:33         ` Mark Brown
@ 2022-09-19 17:40           ` Omar Sandoval
  2022-09-19 17:54             ` Mark Brown
  0 siblings, 1 reply; 14+ messages in thread
From: Omar Sandoval @ 2022-09-19 17:40 UTC (permalink / raw)
  To: Mark Brown
  Cc: Christophe Leroy, H.J. Lu, linux-arch, Yu-cheng Yu, Kees Cook,
	Arnd Bergmann, linux-kernel, Paul Mackerras, Naveen N . Rao,
	Borislav Petkov, linuxppc-dev

On Mon, Sep 19, 2022 at 06:33:40PM +0100, Mark Brown wrote:
> On Mon, Sep 19, 2022 at 10:26:17AM -0700, Omar Sandoval wrote:
> 
> In general if you're going to CC someone into a thread please put
> a note at the start of your mail explaining why, many of us get
> copied on a lot of irrelevant things for no apparently reason so
> if it's not immediately obvious why we were sent a mail there's
> every chance it'll just be deleted.

Sorry about that.

> > I'm not sure what exactly arch/arm64/include/asm/assembler.h is doing
> > with this file. Perhaps the author, Mark Brown, can clarify?
> 
> I don't understand the question, what file are you talking about
> here?  arch/arm64/include/asm/assembler.h is itself a file and I
> couldn't find anything nearby in your mail talking about a file...

Oops, that was a typo, I meant to say "I'm not sure what
arch/arm64/include/asm/assembler.h is doing with this *note*". To be
more explicit: does ARM64 need .note.gnu.property/NT_GNU_PROPERTY_TYPE_0
in vmlinux?

Thanks,
Omar

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

* Re: [PATCH 2/2] Discard .note.gnu.property sections in generic NOTES
  2022-09-19 17:26       ` Omar Sandoval
@ 2022-09-19 17:33         ` Mark Brown
  2022-09-19 17:40           ` Omar Sandoval
  0 siblings, 1 reply; 14+ messages in thread
From: Mark Brown @ 2022-09-19 17:33 UTC (permalink / raw)
  To: Omar Sandoval
  Cc: Christophe Leroy, H.J. Lu, linux-arch, Yu-cheng Yu, Kees Cook,
	Arnd Bergmann, linux-kernel, Paul Mackerras, Naveen N . Rao,
	Borislav Petkov, linuxppc-dev

[-- Attachment #1: Type: text/plain, Size: 693 bytes --]

On Mon, Sep 19, 2022 at 10:26:17AM -0700, Omar Sandoval wrote:

In general if you're going to CC someone into a thread please put
a note at the start of your mail explaining why, many of us get
copied on a lot of irrelevant things for no apparently reason so
if it's not immediately obvious why we were sent a mail there's
every chance it'll just be deleted.

> I'm not sure what exactly arch/arm64/include/asm/assembler.h is doing
> with this file. Perhaps the author, Mark Brown, can clarify?

I don't understand the question, what file are you talking about
here?  arch/arm64/include/asm/assembler.h is itself a file and I
couldn't find anything nearby in your mail talking about a file...

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

* Re: [PATCH 2/2] Discard .note.gnu.property sections in generic NOTES
  2022-09-17  6:31     ` Christophe Leroy
@ 2022-09-19 17:26       ` Omar Sandoval
  2022-09-19 17:33         ` Mark Brown
  0 siblings, 1 reply; 14+ messages in thread
From: Omar Sandoval @ 2022-09-19 17:26 UTC (permalink / raw)
  To: Christophe Leroy, Mark Brown
  Cc: H.J. Lu, linux-arch, Yu-cheng Yu, Kees Cook, Arnd Bergmann,
	linux-kernel, Paul Mackerras, Naveen N . Rao, Borislav Petkov,
	linuxppc-dev

On Sat, Sep 17, 2022 at 06:31:20AM +0000, Christophe Leroy wrote:
> 
> 
> Le 16/09/2022 à 21:40, Omar Sandoval a écrit :
> > [Vous ne recevez pas souvent de courriers de osandov@osandov.com. D?couvrez pourquoi ceci est important ? https://aka.ms/LearnAboutSenderIdentification ]
> > 
> > On Tue, Apr 28, 2020 at 06:21:05AM -0700, H.J. Lu wrote:
> >> 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
> >> kernel linker script only contains a single NOTE segment:
> >>
> >> PHDRS {
> >>   text PT_LOAD FLAGS(5);
> >>   data PT_LOAD FLAGS(6);
> >>   percpu PT_LOAD FLAGS(6);
> >>   init PT_LOAD FLAGS(7);
> >>   note PT_NOTE FLAGS(0);
> >> }
> >> SECTIONS
> >> {
> >> ...
> >>   .notes : AT(ADDR(.notes) - 0xffffffff80000000) { __start_notes = .; KEEP(*(.not
> >> e.*)) __stop_notes = .; } :text :note
> >> ...
> >> }
> >>
> >> The NOTE segment generated by kernel 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 linux]$ readelf -n vmlinux
> >>
> >> Displaying notes found in: .notes
> >>    Owner                Data size Description
> >>    Xen                  0x00000006 Unknown note type: (0x00000006)
> >>     description data: 6c 69 6e 75 78 00
> >>    Xen                  0x00000004 Unknown note type: (0x00000007)
> >>     description data: 32 2e 36 00
> >>    xen-3.0              0x00000005 Unknown note type: (0x006e6558)
> >>     description data: 08 00 00 00 03
> >> readelf: Warning: note with invalid namesz and/or descsz found at offset 0x50
> >> readelf: Warning:  type: 0xffffffff, namesize: 0x006e6558, descsize:
> >> 0x80000000, alignment: 8
> >> [hjl@gnu-skx-1 linux]$
> >>
> >> Since note.gnu.property section in kernel image is never used, this patch
> >> discards .note.gnu.property sections in kernel linker script by adding
> >>
> >> /DISCARD/ : {
> >>    *(.note.gnu.property)
> >> }
> >>
> >> before kernel NOTE segment in generic NOTES.
> >>
> >> Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
> >> Reviewed-by: Kees Cook <keescook@chromium.org>
> >> ---
> >>   include/asm-generic/vmlinux.lds.h | 7 +++++++
> >>   1 file changed, 7 insertions(+)
> >>
> >> diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
> >> index 71e387a5fe90..95cd678428f4 100644
> >> --- a/include/asm-generic/vmlinux.lds.h
> >> +++ b/include/asm-generic/vmlinux.lds.h
> >> @@ -833,7 +833,14 @@
> >>   #define TRACEDATA
> >>   #endif
> >>
> >> +/*
> >> + * Discard .note.gnu.property sections which are unused and have
> >> + * different alignment requirement from kernel note sections.
> >> + */
> >>   #define NOTES                                                                \
> >> +     /DISCARD/ : {                                                   \
> >> +             *(.note.gnu.property)                                   \
> >> +     }                                                               \
> >>        .notes : AT(ADDR(.notes) - LOAD_OFFSET) {                       \
> >>                __start_notes = .;                                      \
> >>                KEEP(*(.note.*))                                        \
> >> --
> >> 2.25.4
> >>
> > 
> > Hi, H.J.,
> > 
> > I recently ran into this same .notes corruption when building kernels on
> > Arch Linux.
> > 
> > What ended up happening to this patch? It doesn't appear to have been
> > merged, and I couldn't find any further discussion about it. I'm happy
> > to resend it for you if you need a hand.
> 
> As far as I can see, ARM64 is doing something with that section, see 
> arch/arm64/include/asm/assembler.h
> 
> Instead of discarding that section, would it be enough to force 
> alignment of .notes to 8 bytes ?
> 
> Thanks
> Christophe

Unfortunately, "alignment requirement" here isn't just the starting
alignment of the .notes section; it also refers to internal padding in
the note metadata to keep things aligned. Changing this would break
anyone who parses /sys/kernel/notes (e.g., perf).

Here is a little more context around this mess:

The System V gABI [1] says that the note header and descriptor should be
aligned to 4 bytes for 32-bit files and 8 bytes for 64-bit files.
However, Linux never followed this, and 4-byte alignment is used for
both 32-bit and 64-bit files; see elf(5) [2].

The only exception as of 2022 is
.note.gnu.property/NT_GNU_PROPERTY_TYPE_0, which is defined to follow
the gABI alignment. There was a long thread discussing this back in 2018
with the subject "PT_NOTE alignment, NT_GNU_PROPERTY_TYPE_0, glibc and
gold" [3].

According to the gABI Linux Extensions [4], consumers are now supposed
to use the p_align of the PT_NOTE segment instead of assuming an
alignment.

There are a few issues with this for the kernel:

* The vmlinux linker script squishes together all of the notes sections
  with different alignments without adjusting their internal padding,
  but sets p_align to the maximum required alignment. This is what
  confuses readelf and co: they expect 8-byte alignment, but most of the
  note entries are only padded for 4-byte alignment.
* The vmlinux .notes section is exported as /sys/kernel/notes. This is
  stable ABI and has always had 4-byte alignment; all existing parsers
  assume this.
* /sys/kernel/notes doesn't currently have a way to specify an alternate
  alignment anyways.

My suggestion would be to keep .note.gnu.property in its own section in
vmlinux, or create a new .notes8 section with 8-byte alignment, and
leave .notes and /sys/kernel/notes alone.

I'm not sure what exactly arch/arm64/include/asm/assembler.h is doing
with this file. Perhaps the author, Mark Brown, can clarify?

1: http://www.sco.com/developers/gabi/latest/ch5.pheader.html#note_section
2: https://man7.org/linux/man-pages/man5/elf.5.html#:~:text=Notes%20(Nhdr)
3: https://public-inbox.org/libc-alpha/13a92cb0-a993-f684-9a96-e02e4afb1bef@redhat.com/
4: https://gitlab.com/x86-psABIs/Linux-ABI

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

* Re: [PATCH 2/2] Discard .note.gnu.property sections in generic NOTES
  2022-09-16 19:40   ` Omar Sandoval
@ 2022-09-17  6:31     ` Christophe Leroy
  2022-09-19 17:26       ` Omar Sandoval
  0 siblings, 1 reply; 14+ messages in thread
From: Christophe Leroy @ 2022-09-17  6:31 UTC (permalink / raw)
  To: Omar Sandoval, H.J. Lu
  Cc: linux-arch, Yu-cheng Yu, Kees Cook, Arnd Bergmann, linux-kernel,
	Paul Mackerras, Naveen N . Rao, Borislav Petkov, linuxppc-dev



Le 16/09/2022 à 21:40, Omar Sandoval a écrit :
> [Vous ne recevez pas souvent de courriers de osandov@osandov.com. D?couvrez pourquoi ceci est important ? https://aka.ms/LearnAboutSenderIdentification ]
> 
> On Tue, Apr 28, 2020 at 06:21:05AM -0700, H.J. Lu wrote:
>> 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
>> kernel linker script only contains a single NOTE segment:
>>
>> PHDRS {
>>   text PT_LOAD FLAGS(5);
>>   data PT_LOAD FLAGS(6);
>>   percpu PT_LOAD FLAGS(6);
>>   init PT_LOAD FLAGS(7);
>>   note PT_NOTE FLAGS(0);
>> }
>> SECTIONS
>> {
>> ...
>>   .notes : AT(ADDR(.notes) - 0xffffffff80000000) { __start_notes = .; KEEP(*(.not
>> e.*)) __stop_notes = .; } :text :note
>> ...
>> }
>>
>> The NOTE segment generated by kernel 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 linux]$ readelf -n vmlinux
>>
>> Displaying notes found in: .notes
>>    Owner                Data size Description
>>    Xen                  0x00000006 Unknown note type: (0x00000006)
>>     description data: 6c 69 6e 75 78 00
>>    Xen                  0x00000004 Unknown note type: (0x00000007)
>>     description data: 32 2e 36 00
>>    xen-3.0              0x00000005 Unknown note type: (0x006e6558)
>>     description data: 08 00 00 00 03
>> readelf: Warning: note with invalid namesz and/or descsz found at offset 0x50
>> readelf: Warning:  type: 0xffffffff, namesize: 0x006e6558, descsize:
>> 0x80000000, alignment: 8
>> [hjl@gnu-skx-1 linux]$
>>
>> Since note.gnu.property section in kernel image is never used, this patch
>> discards .note.gnu.property sections in kernel linker script by adding
>>
>> /DISCARD/ : {
>>    *(.note.gnu.property)
>> }
>>
>> before kernel NOTE segment in generic NOTES.
>>
>> Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
>> Reviewed-by: Kees Cook <keescook@chromium.org>
>> ---
>>   include/asm-generic/vmlinux.lds.h | 7 +++++++
>>   1 file changed, 7 insertions(+)
>>
>> diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
>> index 71e387a5fe90..95cd678428f4 100644
>> --- a/include/asm-generic/vmlinux.lds.h
>> +++ b/include/asm-generic/vmlinux.lds.h
>> @@ -833,7 +833,14 @@
>>   #define TRACEDATA
>>   #endif
>>
>> +/*
>> + * Discard .note.gnu.property sections which are unused and have
>> + * different alignment requirement from kernel note sections.
>> + */
>>   #define NOTES                                                                \
>> +     /DISCARD/ : {                                                   \
>> +             *(.note.gnu.property)                                   \
>> +     }                                                               \
>>        .notes : AT(ADDR(.notes) - LOAD_OFFSET) {                       \
>>                __start_notes = .;                                      \
>>                KEEP(*(.note.*))                                        \
>> --
>> 2.25.4
>>
> 
> Hi, H.J.,
> 
> I recently ran into this same .notes corruption when building kernels on
> Arch Linux.
> 
> What ended up happening to this patch? It doesn't appear to have been
> merged, and I couldn't find any further discussion about it. I'm happy
> to resend it for you if you need a hand.

As far as I can see, ARM64 is doing something with that section, see 
arch/arm64/include/asm/assembler.h

Instead of discarding that section, would it be enough to force 
alignment of .notes to 8 bytes ?

Thanks
Christophe


> 
> Thanks,
> Omar

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

* Re: [PATCH 2/2] Discard .note.gnu.property sections in generic NOTES
  2020-04-28 13:21 ` [PATCH 2/2] Discard .note.gnu.property sections in generic NOTES H.J. Lu
@ 2022-09-16 19:40   ` Omar Sandoval
  2022-09-17  6:31     ` Christophe Leroy
  0 siblings, 1 reply; 14+ messages in thread
From: Omar Sandoval @ 2022-09-16 19:40 UTC (permalink / raw)
  To: H.J. Lu
  Cc: linux-kernel, Yu-cheng Yu, Arnd Bergmann, linux-arch,
	Michael Ellerman, Benjamin Herrenschmidt, Paul Mackerras,
	Kees Cook, Borislav Petkov, Naveen N . Rao, linuxppc-dev

On Tue, Apr 28, 2020 at 06:21:05AM -0700, H.J. Lu wrote:
> 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
> kernel linker script only contains a single NOTE segment:
> 
> PHDRS {
>  text PT_LOAD FLAGS(5);
>  data PT_LOAD FLAGS(6);
>  percpu PT_LOAD FLAGS(6);
>  init PT_LOAD FLAGS(7);
>  note PT_NOTE FLAGS(0);
> }
> SECTIONS
> {
> ...
>  .notes : AT(ADDR(.notes) - 0xffffffff80000000) { __start_notes = .; KEEP(*(.not
> e.*)) __stop_notes = .; } :text :note
> ...
> }
> 
> The NOTE segment generated by kernel 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 linux]$ readelf -n vmlinux
> 
> Displaying notes found in: .notes
>   Owner                Data size Description
>   Xen                  0x00000006 Unknown note type: (0x00000006)
>    description data: 6c 69 6e 75 78 00
>   Xen                  0x00000004 Unknown note type: (0x00000007)
>    description data: 32 2e 36 00
>   xen-3.0              0x00000005 Unknown note type: (0x006e6558)
>    description data: 08 00 00 00 03
> readelf: Warning: note with invalid namesz and/or descsz found at offset 0x50
> readelf: Warning:  type: 0xffffffff, namesize: 0x006e6558, descsize:
> 0x80000000, alignment: 8
> [hjl@gnu-skx-1 linux]$
> 
> Since note.gnu.property section in kernel image is never used, this patch
> discards .note.gnu.property sections in kernel linker script by adding
> 
> /DISCARD/ : {
>   *(.note.gnu.property)
> }
> 
> before kernel NOTE segment in generic NOTES.
> 
> Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
> Reviewed-by: Kees Cook <keescook@chromium.org>
> ---
>  include/asm-generic/vmlinux.lds.h | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
> index 71e387a5fe90..95cd678428f4 100644
> --- a/include/asm-generic/vmlinux.lds.h
> +++ b/include/asm-generic/vmlinux.lds.h
> @@ -833,7 +833,14 @@
>  #define TRACEDATA
>  #endif
>  
> +/*
> + * Discard .note.gnu.property sections which are unused and have
> + * different alignment requirement from kernel note sections.
> + */
>  #define NOTES								\
> +	/DISCARD/ : {							\
> +		*(.note.gnu.property)					\
> +	}								\
>  	.notes : AT(ADDR(.notes) - LOAD_OFFSET) {			\
>  		__start_notes = .;					\
>  		KEEP(*(.note.*))					\
> -- 
> 2.25.4
> 

Hi, H.J.,

I recently ran into this same .notes corruption when building kernels on
Arch Linux.

What ended up happening to this patch? It doesn't appear to have been
merged, and I couldn't find any further discussion about it. I'm happy
to resend it for you if you need a hand.

Thanks,
Omar

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

* [PATCH 2/2] Discard .note.gnu.property sections in generic NOTES
  2020-04-28 13:21 [PATCH 1/2] powerpc: Keep .rela* sections when CONFIG_RELOCATABLE is defined H.J. Lu
@ 2020-04-28 13:21 ` H.J. Lu
  2022-09-16 19:40   ` Omar Sandoval
  0 siblings, 1 reply; 14+ messages in thread
From: H.J. Lu @ 2020-04-28 13:21 UTC (permalink / raw)
  To: linux-kernel
  Cc: Yu-cheng Yu, Arnd Bergmann, linux-arch, Michael Ellerman,
	Benjamin Herrenschmidt, Paul Mackerras, Kees Cook,
	Borislav Petkov, Naveen N . Rao, linuxppc-dev

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
kernel linker script only contains a single NOTE segment:

PHDRS {
 text PT_LOAD FLAGS(5);
 data PT_LOAD FLAGS(6);
 percpu PT_LOAD FLAGS(6);
 init PT_LOAD FLAGS(7);
 note PT_NOTE FLAGS(0);
}
SECTIONS
{
...
 .notes : AT(ADDR(.notes) - 0xffffffff80000000) { __start_notes = .; KEEP(*(.not
e.*)) __stop_notes = .; } :text :note
...
}

The NOTE segment generated by kernel 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 linux]$ readelf -n vmlinux

Displaying notes found in: .notes
  Owner                Data size Description
  Xen                  0x00000006 Unknown note type: (0x00000006)
   description data: 6c 69 6e 75 78 00
  Xen                  0x00000004 Unknown note type: (0x00000007)
   description data: 32 2e 36 00
  xen-3.0              0x00000005 Unknown note type: (0x006e6558)
   description data: 08 00 00 00 03
readelf: Warning: note with invalid namesz and/or descsz found at offset 0x50
readelf: Warning:  type: 0xffffffff, namesize: 0x006e6558, descsize:
0x80000000, alignment: 8
[hjl@gnu-skx-1 linux]$

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

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

before kernel NOTE segment in generic NOTES.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
---
 include/asm-generic/vmlinux.lds.h | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index 71e387a5fe90..95cd678428f4 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -833,7 +833,14 @@
 #define TRACEDATA
 #endif
 
+/*
+ * Discard .note.gnu.property sections which are unused and have
+ * different alignment requirement from kernel note sections.
+ */
 #define NOTES								\
+	/DISCARD/ : {							\
+		*(.note.gnu.property)					\
+	}								\
 	.notes : AT(ADDR(.notes) - LOAD_OFFSET) {			\
 		__start_notes = .;					\
 		KEEP(*(.note.*))					\
-- 
2.25.4


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

* [PATCH 2/2] Discard .note.gnu.property sections in generic NOTES
  2020-04-28  1:48 [PATCH 1/2] powerpc: Discard .rela* sections if CONFIG_RELOCATABLE is undefined H.J. Lu
@ 2020-04-28  1:49 ` H.J. Lu
  0 siblings, 0 replies; 14+ messages in thread
From: H.J. Lu @ 2020-04-28  1:49 UTC (permalink / raw)
  To: linux-kernel
  Cc: Yu-cheng Yu, Arnd Bergmann, linux-arch, Michael Ellerman,
	Benjamin Herrenschmidt, Paul Mackerras, Kees Cook,
	Borislav Petkov, Naveen N . Rao, linuxppc-dev

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
kernel linker script only contains a single NOTE segment:

PHDRS {
 text PT_LOAD FLAGS(5);
 data PT_LOAD FLAGS(6);
 percpu PT_LOAD FLAGS(6);
 init PT_LOAD FLAGS(7);
 note PT_NOTE FLAGS(0);
}
SECTIONS
{
...
 .notes : AT(ADDR(.notes) - 0xffffffff80000000) { __start_notes = .; KEEP(*(.not
e.*)) __stop_notes = .; } :text :note
...
}

The NOTE segment generated by kernel 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 linux]$ readelf -n vmlinux

Displaying notes found in: .notes
  Owner                Data size Description
  Xen                  0x00000006 Unknown note type: (0x00000006)
   description data: 6c 69 6e 75 78 00
  Xen                  0x00000004 Unknown note type: (0x00000007)
   description data: 32 2e 36 00
  xen-3.0              0x00000005 Unknown note type: (0x006e6558)
   description data: 08 00 00 00 03
readelf: Warning: note with invalid namesz and/or descsz found at offset 0x50
readelf: Warning:  type: 0xffffffff, namesize: 0x006e6558, descsize:
0x80000000, alignment: 8
[hjl@gnu-skx-1 linux]$

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

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

before kernel NOTE segment in generic NOTES.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
---
 include/asm-generic/vmlinux.lds.h | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index 71e387a5fe90..95cd678428f4 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -833,7 +833,14 @@
 #define TRACEDATA
 #endif
 
+/*
+ * Discard .note.gnu.property sections which are unused and have
+ * different alignment requirement from kernel note sections.
+ */
 #define NOTES								\
+	/DISCARD/ : {							\
+		*(.note.gnu.property)					\
+	}								\
 	.notes : AT(ADDR(.notes) - LOAD_OFFSET) {			\
 		__start_notes = .;					\
 		KEEP(*(.note.*))					\
-- 
2.25.4


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

end of thread, other threads:[~2022-09-19 17:54 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-26 19:30 [PATCH 1/2] Add RUNTIME_DISCARD_EXIT to generic DISCARDS H.J. Lu
2020-03-26 19:30 ` [PATCH 2/2] Discard .note.gnu.property sections in generic NOTES H.J. Lu
2020-03-26 20:11 ` [PATCH 1/2] Add RUNTIME_DISCARD_EXIT to generic DISCARDS Borislav Petkov
2020-03-26 20:39   ` Kees Cook
2020-03-27 11:07 ` [tip: x86/build] x86, vmlinux.lds: " tip-bot2 for H.J. Lu
2020-03-27 17:43   ` Kees Cook
2020-04-28  1:48 [PATCH 1/2] powerpc: Discard .rela* sections if CONFIG_RELOCATABLE is undefined H.J. Lu
2020-04-28  1:49 ` [PATCH 2/2] Discard .note.gnu.property sections in generic NOTES H.J. Lu
2020-04-28 13:21 [PATCH 1/2] powerpc: Keep .rela* sections when CONFIG_RELOCATABLE is defined H.J. Lu
2020-04-28 13:21 ` [PATCH 2/2] Discard .note.gnu.property sections in generic NOTES H.J. Lu
2022-09-16 19:40   ` Omar Sandoval
2022-09-17  6:31     ` Christophe Leroy
2022-09-19 17:26       ` Omar Sandoval
2022-09-19 17:33         ` Mark Brown
2022-09-19 17:40           ` Omar Sandoval
2022-09-19 17:54             ` Mark Brown

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).