lkml.org 
[lkml]   [2021]   [May]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.11 253/342] arm64/vdso: Discard .note.gnu.property sections in vDSO
    Date
    From: Bill Wendling <morbo@google.com>

    [ Upstream commit 388708028e6937f3fc5fc19aeeb847f8970f489c ]

    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.

    Signed-off-by: Bill Wendling <morbo@google.com>
    Reviewed-by: Kees Cook <keescook@chromium.org>
    Acked-by: Ard Biesheuvel <ardb@kernel.org>
    Link: https://lore.kernel.org/r/20210423205159.830854-1-morbo@google.com
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/arm64/kernel/vdso/vdso.lds.S | 8 +++++++-
    1 file changed, 7 insertions(+), 1 deletion(-)

    diff --git a/arch/arm64/kernel/vdso/vdso.lds.S b/arch/arm64/kernel/vdso/vdso.lds.S
    index 61dbb4c838ef..a5e61e09ea92 100644
    --- a/arch/arm64/kernel/vdso/vdso.lds.S
    +++ b/arch/arm64/kernel/vdso/vdso.lds.S
    @@ -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)
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-05-10 14:31    [W:2.073 / U:0.380 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site