arm64/vdso: Discard .note.gnu.property sections in vDSO
PATCH 1/1 arm64/vdso: Discard .note.gnu.property sections in vDSO
The arm64 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 the 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 */
}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 arm64.
$ 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.
Similar to commit 4caffe6a28d31 ("x86/vdso: Discard .note.gnu.property sections in vDSO"), but for arm64.
--- arch/arm64/kernel/vdso/vdso.lds.S | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
arch/arm64/kernel/vdso/vdso.lds.S +7 -1
@@ -31,6 +31,13 @@ SECTIONS .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } + /* + * Discard .note.gnu.property sections which are unused and have + * different alignment requirement from vDSO note sections. + */ + /DISCARD/ : { + *(.note.GNU-stack .note.gnu.property) + } .note : { *(.note.*) } :text :note . = ALIGN(16);
@@ -48,7 +55,6 @@ SECTIONS PROVIDE(end = .); /DISCARD/ : { - *(.note.GNU-stack) *(.data .data.* .gnu.linkonce.d.* .sdata*) *(.bss .sbss .dynbss .dynsbss) *(.eh_frame .eh_frame_hdr)
Signature · 1 line
2.31.1.498.g6c1eba8ee3d-goog
Quoted 24 lines · Bill Wendling
The arm64 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 the 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 */ }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 arm64.
$ readelf -n vdso64.soDisplaying notes found in: .note
Owner Data size Description Linux 0x00000004 Unknown note type: (0x00000000) description data: 06 00 00 00readelf: Warning: note with invalid namesz and/or descsz found at offset
0x20
readelf: Warning: type:0x78, namesize:0x00000100, descsize:0x756e694c, alignment: 8
Quoted 7 lines
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.
Similar to commit
4caffe6a28d31("x86/vdso: Discard .note.gnu.property sections in vDSO"), but for arm64.Signed-off-by Bill Wendling <[email protected]>
Seems good to me. If we ever need the BTI markings, etc, for the vDSO, we can revisit it then.
-Kees
Signature · 1 line
Kees Cook
Ard Biesheuvel
Acked-byQuoted 32 lines · Kees Cook
Quoted 30 lines · Bill Wendling
The arm64 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 the 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 */ }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 arm64.
$ readelf -n vdso64.soDisplaying notes found in: .note
Owner Data size Description Linux 0x00000004 Unknown note type: (0x00000000) description data: 06 00 00 00readelf: Warning: note with invalid namesz and/or descsz found at offset
0x20
readelf: Warning: type:0x78, namesize:0x00000100, descsize:0x756e694c, alignment: 8Since the note.gnu.property section in the vDSO is not checked by the dynamic linker, discard the .note.gnu.property sections in the vDSO.
Similar to commit
4caffe6a28d31("x86/vdso: Discard .note.gnu.property sections in vDSO"), but for arm64.
Quoted 7 lines
Quoted 1 line
Signed-off-by Bill Wendling <[email protected]>Seems good to me. If we ever need the BTI markings, etc, for the vDSO, we can revisit it then.
Reviewed-by Kees Cook <[email protected]>
Catalin Marinas
maintainerQuoted 21 lines · Bill Wendling
The arm64 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 the 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 */ }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 arm64.
$ readelf -n vdso64.soDisplaying notes found in: .note
Owner Data size Description Linux 0x00000004 Unknown note type: (0x00000000) description data: 06 00 00 00
Quoted 8 lines
readelf: Warning: note with invalid namesz and/or descsz found at offset
0x20
readelf: Warning: type:0x78, namesize:0x00000100, descsize:0x756e694c, alignment: 8Since the note.gnu.property section in the vDSO is not checked by the dynamic linker, discard the .note.gnu.property sections in the vDSO.
Similar to commit
4caffe6a28d31("x86/vdso: Discard .note.gnu.property sections in vDSO"), but for arm64.
Can we not instead fix the linker script to preserve the .note.gnu.property, correctly aligned? It doesn't take much space and while we don't use it now, it has the BTI information about the binary.
Cc'ing a few others who were involved in the BTI support.
Quoted 33 lines
Signed-off-by Bill Wendling <[email protected]>--- arch/arm64/kernel/vdso/vdso.lds.S | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)arch/arm64/kernel/vdso/vdso.lds.S +7
-1@@ -31,6 +31,13 @@ SECTIONS .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } + /* + * Discard .note.gnu.property sections which are unused and have + * different alignment requirement from vDSO note sections. + */ + /DISCARD/ : { + *(.note.GNU-stack .note.gnu.property) + } .note : { *(.note.*) } :text :note . = ALIGN(16);@@ -48,7 +55,6 @@ SECTIONS PROVIDE(end = .); /DISCARD/ : { - *(.note.GNU-stack) *(.data .data.* .gnu.linkonce.d.* .sdata*) *(.bss .sbss .dynbss .dynsbss) *(.eh_frame .eh_frame_hdr)Signature · 1 line
2.31.1.498.g6c1eba8ee3d-goog
Signature · 1 line
Catalin
Quoted 10 lines · Catalin Marinas
Quoted 2 lines · Bill Wendling
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.
Can we not instead fix the linker script to preserve the .note.gnu.property, correctly aligned? It doesn't take much space and while we don't use it now, it has the BTI information about the binary.
Cc'ing a few others who were involved in the BTI support.
Not just BTI, we also flag PAC usage in there too and could add other extensions going forwards. While the note isn't actively used by anything right now due to the kernel mapping the vDSO prior to userspace starting it is part of the ABI and something could end up wanting to use it and getting confused if it's not there. It would be much better to fix the alignment issue.
Quoted 10 lines · Mark Brown
Quoted 8 lines · Catalin Marinas
Quoted 2 lines · Bill Wendling
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.
Can we not instead fix the linker script to preserve the .note.gnu.property, correctly aligned? It doesn't take much space and while we don't use it now, it has the BTI information about the binary.
Quoted 8 lines
Quoted 1 line
Cc'ing a few others who were involved in the BTI support.
Not just BTI, we also flag PAC usage in there too and could add other extensions going forwards. While the note isn't actively used by anything right now due to the kernel mapping the vDSO prior to userspace starting it is part of the ABI and something could end up wanting to use it and getting confused if it's not there. It would be much better to fix the alignment issue.
If there's only one of the 8-byte aligned sections guaranteed, we could place it first in the note. Otherwise, we will have to change the alignment of the note (or somehow merge multiple notes).
-bw
Quoted 20 lines · Bill Wendling
Quoted 10 lines · Mark Brown
Quoted 8 lines · Catalin Marinas
Quoted 2 lines · Bill Wendling
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.
Can we not instead fix the linker script to preserve the .note.gnu.property, correctly aligned? It doesn't take much space and while we don't use it now, it has the BTI information about the binary.
Quoted 8 lines
Quoted 1 line
Cc'ing a few others who were involved in the BTI support.
Not just BTI, we also flag PAC usage in there too and could add other extensions going forwards. While the note isn't actively used by anything right now due to the kernel mapping the vDSO prior to userspace starting it is part of the ABI and something could end up wanting to use it and getting confused if it's not there. It would be much better to fix the alignment issue.
Quoted 4 lines
If there's only one of the 8-byte aligned sections guaranteed, we could place it first in the note. Otherwise, we will have to change the alignment of the note (or somehow merge multiple notes).
I should have clarified that there's only one *entry* in the .note.gnu.properties section, and if not then is it possible to merge multiple entries into one. (Excuse my ignorance if this is already the case.)
-bw
Quoted 21 lines · Bill Wendling
Quoted 20 lines · Bill Wendling
Quoted 18 lines · Mark Brown
Quoted 10 lines · Catalin Marinas
Quoted 2 lines · Bill Wendling
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.
Can we not instead fix the linker script to preserve the .note.gnu.property, correctly aligned? It doesn't take much space and while we don't use it now, it has the BTI information about the binary.
Cc'ing a few others who were involved in the BTI support.
Not just BTI, we also flag PAC usage in there too and could add other extensions going forwards. While the note isn't actively used by anything right now due to the kernel mapping the vDSO prior to userspace starting it is part of the ABI and something could end up wanting to use it and getting confused if it's not there. It would be much better to fix the alignment issue.
Quoted 8 lines
Quoted 4 lines
If there's only one of the 8-byte aligned sections guaranteed, we could place it first in the note. Otherwise, we will have to change the alignment of the note (or somehow merge multiple notes).
I should have clarified that there's only one *entry* in the .note.gnu.properties section, and if not then is it possible to merge multiple entries into one. (Excuse my ignorance if this is already the case.)
.note.gnu.property should go to PT_GNU_PROPERTY and it should be merged following rules specified in
https://github.com/hjl-tools/linux-abi/wiki/Linux-Extensions-to-gABI
and
https://github.com/ARM-software/abi-aa/blob/master/aaelf64/aaelf64.rst#program-property
it may also be covered by a (8byte aligned) PT_NOTE, but that's not a requirement on aarch64 (x86 requires it for compatibility with old dynamic linker, but since the vdso is handled specially that may not be relevant either).
i don't know how this works in linker scripts.
Quoted 37 lines · Szabolcs Nagy
Quoted 21 lines · Bill Wendling
Quoted 20 lines · Bill Wendling
Quoted 18 lines · Mark Brown
Quoted 10 lines · Catalin Marinas
Quoted 2 lines · Bill Wendling
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.
Can we not instead fix the linker script to preserve the .note.gnu.property, correctly aligned? It doesn't take much space and while we don't use it now, it has the BTI information about the binary.
Cc'ing a few others who were involved in the BTI support.
Not just BTI, we also flag PAC usage in there too and could add other extensions going forwards. While the note isn't actively used by anything right now due to the kernel mapping the vDSO prior to userspace starting it is part of the ABI and something could end up wanting to use it and getting confused if it's not there. It would be much better to fix the alignment issue.
Quoted 8 lines
Quoted 4 lines
If there's only one of the 8-byte aligned sections guaranteed, we could place it first in the note. Otherwise, we will have to change the alignment of the note (or somehow merge multiple notes).
I should have clarified that there's only one *entry* in the .note.gnu.properties section, and if not then is it possible to merge multiple entries into one. (Excuse my ignorance if this is already the case.)
.note.gnu.property should go to
PT_GNU_PROPERTYand it should be merged following rules specified in
https://github.com/hjl-tools/linux-abi/wiki/Linux-Extensions-to-gABI
and
https://github.com/ARM-software/abi-aa/blob/master/aaelf64/aaelf64.rst#program-property
Quoted 6 lines
it may also be covered by a (8byte aligned)
PT_NOTE, but that's not a requirement on aarch64 (x86 requires it for compatibility with old dynamic linker, but since the vdso is handled specially that may not be relevant either).i don't know how this works in linker scripts.
This is a potential patch. I haven't had time to test it though. However, it does appear to format the section in the "expected" way, so one's able to grab the build IDs. Thoughts?
$ objdump -s -j .note ./arch/arm64/kernel/vdso/vdso.so
./arch/arm64/kernel/vdso/vdso.so: file format elf64-little
Contents of section .note:
0288 04000000 10000000 05000000 474e5500 ............GNU. 0298 000000c0 04000000 03000000 00000000 ................ 02a8 06000000 04000000 00000000 4c696e75 ............Linu 02b8 78000000 000a0500 06000000 01000000 x............... 02c8 00010000 4c696e75 78000000 00000000 ....Linux....... 02d8 04000000 14000000 03000000 474e5500 ............GNU. 02e8 958db149 af5156cb 45309896 7a53ae8a ...I.QV.E0..zS.. 02f8 ef34e95c .4.\
(quoted diff) +0 -0
b/arch/arm64/kernel/vdso/vdso.lds.S
index d808ad31e01f..d51e886c6223 100644
arch/arm64/kernel/vdso/vdso.lds.S +7 -1
@@ -31,7 +31,13 @@ SECTIONS .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } - .note : { *(.note.*) } :text :note + /* + * Add the .note.gnu.property section first, as it's aligned to + * 8-bytes, while other notes are aligned to 4-bytes. + */ + . = ALIGN(8); + + .note : { *(.note.gnu.property) *(.note.*) } :text :note . = ALIGN(16);
Quoted 43 lines · Bill Wendling
Quoted 42 lines · Szabolcs Nagy
Quoted 21 lines · Bill Wendling
Quoted 20 lines · Bill Wendling
Quoted 18 lines · Mark Brown
Quoted 10 lines · Catalin Marinas
Quoted 2 lines · Bill Wendling
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.
Can we not instead fix the linker script to preserve the .note.gnu.property, correctly aligned? It doesn't take much space and while we don't use it now, it has the BTI information about the binary.
Cc'ing a few others who were involved in the BTI support.
Not just BTI, we also flag PAC usage in there too and could add other extensions going forwards. While the note isn't actively used by anything right now due to the kernel mapping the vDSO prior to userspace starting it is part of the ABI and something could end up wanting to use it and getting confused if it's not there. It would be much better to fix the alignment issue.
Quoted 8 lines
Quoted 4 lines
If there's only one of the 8-byte aligned sections guaranteed, we could place it first in the note. Otherwise, we will have to change the alignment of the note (or somehow merge multiple notes).
I should have clarified that there's only one *entry* in the .note.gnu.properties section, and if not then is it possible to merge multiple entries into one. (Excuse my ignorance if this is already the case.)
.note.gnu.property should go to
PT_GNU_PROPERTYand it should be merged following rules specified in
https://github.com/hjl-tools/linux-abi/wiki/Linux-Extensions-to-gABI
and
https://github.com/ARM-software/abi-aa/blob/master/aaelf64/aaelf64.rst#program-propertyit may also be covered by a (8byte aligned)
PT_NOTE, but that's not a requirement on aarch64 (x86 requires it for compatibility with old dynamic linker, but since the vdso is handled specially that may not be relevant either).
Quoted 5 lines
Quoted 1 line
i don't know how this works in linker scripts.
This is a potential patch. I haven't had time to test it though. However, it does appear to format the section in the "expected" way, so one's able to grab the build IDs. Thoughts?
please show the program headers.
Quoted 34 lines
$ objdump -s -j .note ./arch/arm64/kernel/vdso/vdso.so
./arch/arm64/kernel/vdso/vdso.so: file format elf64-littleContents of section .note:
0288 04000000 10000000 05000000 474e5500 ............GNU. 0298 000000c0 04000000 03000000 00000000 ................ 02a8 06000000 04000000 00000000 4c696e75 ............Linu 02b8 78000000 000a0500 06000000 01000000 x............... 02c8 00010000 4c696e75 78000000 00000000 ....Linux....... 02d8 04000000 14000000 03000000 474e5500 ............GNU. 02e8 958db149 af5156cb 45309896 7a53ae8a ...I.QV.E0..zS.. 02f8 ef34e95c .4.\arch/arm64/kernel/vdso/vdso.lds.S +7
-1@@ -31,7 +31,13 @@ SECTIONS .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } - .note : { *(.note.*) } :text :note + /* + * Add the .note.gnu.property section first, as it's aligned to + * 8-bytes, while other notes are aligned to 4-bytes. + */ + . = ALIGN(8); + + .note : { *(.note.gnu.property) *(.note.*) } :text :note . = ALIGN(16);
Quoted 44 lines · Szabolcs Nagy
Quoted 43 lines · Bill Wendling
Quoted 42 lines · Szabolcs Nagy
Quoted 21 lines · Bill Wendling
Quoted 20 lines · Bill Wendling
Quoted 18 lines · Mark Brown
Quoted 10 lines · Catalin Marinas
Quoted 2 lines · Bill Wendling
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.
Can we not instead fix the linker script to preserve the .note.gnu.property, correctly aligned? It doesn't take much space and while we don't use it now, it has the BTI information about the binary.
Cc'ing a few others who were involved in the BTI support.
Not just BTI, we also flag PAC usage in there too and could add other extensions going forwards. While the note isn't actively used by anything right now due to the kernel mapping the vDSO prior to userspace starting it is part of the ABI and something could end up wanting to use it and getting confused if it's not there. It would be much better to fix the alignment issue.
Quoted 8 lines
Quoted 4 lines
If there's only one of the 8-byte aligned sections guaranteed, we could place it first in the note. Otherwise, we will have to change the alignment of the note (or somehow merge multiple notes).
I should have clarified that there's only one *entry* in the .note.gnu.properties section, and if not then is it possible to merge multiple entries into one. (Excuse my ignorance if this is already the case.)
.note.gnu.property should go to
PT_GNU_PROPERTYand it should be merged following rules specified in
https://github.com/hjl-tools/linux-abi/wiki/Linux-Extensions-to-gABI
and
https://github.com/ARM-software/abi-aa/blob/master/aaelf64/aaelf64.rst#program-propertyit may also be covered by a (8byte aligned)
PT_NOTE, but that's not a requirement on aarch64 (x86 requires it for compatibility with old dynamic linker, but since the vdso is handled specially that may not be relevant either).
Quoted 9 lines
Quoted 5 lines
Quoted 1 line
i don't know how this works in linker scripts.
This is a potential patch. I haven't had time to test it though. However, it does appear to format the section in the "expected" way, so one's able to grab the build IDs. Thoughts?
please show the program headers.
$ readelf -lW arch/arm64/kernel/vdso/vdso.so
Elf file type is DYN (Shared object file) Entry point 0x300
There are 4 program headers, starting at offset 64
Program Headers:
Type Offset VirtAddr PhysAddr
FileSiz MemSiz Flg Align
LOAD 0x000000 0x0000000000000000 0x00000000000000000x000968 0x000968 R E 0x8
DYNAMIC 0x0008a8 0x00000000000008a8 0x00000000000008a80x0000c0 0x0000c0 R 0x8
NOTE 0x000288 0x0000000000000288 0x00000000000002880x000074 0x000074 R 0x8
GNU_EH_FRAME 0x0008a4 0x00000000000008a4 0x00000000000008a40x000000 0x000000 R E 0x1
Section to Segment mapping:
Segment Sections...
00 .hash .dynsym .dynstr .gnu.version .gnu.version_d .note
.text .eh_frame_hdr .eh_frame .dynamic
01 .dynamic 02 .note 03 .eh_frame_hdr .eh_frame
Quoted 36 lines
Quoted 24 lines
$ objdump -s -j .note ./arch/arm64/kernel/vdso/vdso.so
./arch/arm64/kernel/vdso/vdso.so: file format elf64-littleContents of section .note:
0288 04000000 10000000 05000000 474e5500 ............GNU. 0298 000000c0 04000000 03000000 00000000 ................ 02a8 06000000 04000000 00000000 4c696e75 ............Linu 02b8 78000000 000a0500 06000000 01000000 x............... 02c8 00010000 4c696e75 78000000 00000000 ....Linux....... 02d8 04000000 14000000 03000000 474e5500 ............GNU. 02e8 958db149 af5156cb 45309896 7a53ae8a ...I.QV.E0..zS.. 02f8 ef34e95c .4.\arch/arm64/kernel/vdso/vdso.lds.S +0
-0@@ -31,7 +31,13 @@ SECTIONS .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) }arch/arm64/kernel/vdso/vdso.lds.S SECTIONS · line 42
Quoted 10 lines
arch/arm64/kernel/vdso/vdso.lds.S +7
-1- .note : { *(.note.*) } :text :note + /* + * Add the .note.gnu.property section first, as it's aligned to + * 8-bytes, while other notes are aligned to 4-bytes. + */ + . = ALIGN(8); + + .note : { *(.note.gnu.property) *(.note.*) } :text :note . = ALIGN(16);--
Quoted 6 lines · Bill Wendling
$ readelf -lW arch/arm64/kernel/vdso/vdso.soElf file type is DYN (Shared object file) Entry point
0x300
There are 4 program headers, starting at offset 64
Quoted 11 lines
Program Headers:
Type Offset VirtAddr PhysAddr
FileSiz MemSiz Flg Align
LOAD0x0000000x00000000000000000x00000000000000000x0009680x000968R E0x8
DYNAMIC0x0008a80x00000000000008a80x00000000000008a80x0000c00x0000c0R0x8
NOTE0x0002880x00000000000002880x00000000000002880x0000740x000074R0x8
GNU_EH_FRAME0x0008a40x00000000000008a40x00000000000008a40x0000000x000000R E0x1
this is wrong because the abi specifically says properties are in PT_GNU_PROPERTY, not in PT_NOTE.
so the original patch that removes them from notes is fine, but ideally they should be readded under PT_GNU_PROPERTY.
(x86 needs it there too, but also needs it under PT_NOTE for historical reasons. ideally the section would have been named other than .note and was not marked as SHF_NOTE, because properties are merged completely differently by the linker than notes, so now linkers have to special case it by section name. properties should have been designed like the
.ARM.attributes section except that is not in a load segment
and thus has no runtime semantics while the key feature of properties is the runtime semantics. however accessing the program headers of the vdso is not trivial at runtime from user code so dropping the properties might work too, but can bite us in the future depending on how they evolve: the ld.so can look at vdso program headers.)
Quoted 19 lines · Szabolcs Nagy
Quoted 6 lines · Bill Wendling
$ readelf -lW arch/arm64/kernel/vdso/vdso.soElf file type is DYN (Shared object file) Entry point
0x300
There are 4 program headers, starting at offset 64Quoted 11 lines
Program Headers:
Type Offset VirtAddr PhysAddr
FileSiz MemSiz Flg Align
LOAD0x0000000x00000000000000000x00000000000000000x0009680x000968R E0x8
DYNAMIC0x0008a80x00000000000008a80x00000000000008a80x0000c00x0000c0R0x8
NOTE0x0002880x00000000000002880x00000000000002880x0000740x000074R0x8
GNU_EH_FRAME0x0008a40x00000000000008a40x00000000000008a40x0000000x000000R E0x1
Quoted 3 lines
this is wrong because the abi specifically says properties are in
PT_GNU_PROPERTY, not inPT_NOTE.
Right. The issue is more complex than this fix is meant for, to be honest. That is, it seems that there needs to be a generalized way of handling the different .note sections.
-bw
Quoted 16 lines
so the original patch that removes them from notes is fine, but ideally they should be readded under
PT_GNU_PROPERTY.(x86 needs it there too, but also needs it under
PT_NOTEfor historical reasons. ideally the section would have been named other than .note and was not marked asSHF_NOTE, because properties are merged completely differently by the linker than notes, so now linkers have to special case it by section name. properties should have been designed like the
.ARM.attributes section except that is not in a load segment
and thus has no runtime semantics while the key feature of properties is the runtime semantics. however accessing the program headers of the vdso is not trivial at runtime from user code so dropping the properties might work too, but can bite us in the future depending on how they evolve: the ld.so can look at vdso program headers.)
Quoted 5 lines · Bill Wendling
The arm64 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 the kernel linker script only contains a single NOTE segment:
Quoted 8 lines
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 */ }[...]
Applied to arm64 (for-next/core). Thanks Bill and Szabolcs for clarifying the need for this patch.
[1/1] arm64/vdso: Discard .note.gnu.property sections in vDSO
https://git.kernel.org/arm64/c/388708028e69
Signature · 1 line
Catalin