Le 16/09/2022 à 21:40, Omar Sandoval a écrit : > [Vous ne recevez pas souvent de courriers de osandov@xxxxxxxxxxx. 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@xxxxxxxxx> >> Reviewed-by: Kees Cook <keescook@xxxxxxxxxxxx> >> --- >> 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