lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20210428172847.GC4022@arm.com>
Date:   Wed, 28 Apr 2021 18:28:47 +0100
From:   Catalin Marinas <catalin.marinas@....com>
To:     Bill Wendling <morbo@...gle.com>
Cc:     Kees Cook <keescook@...gle.com>, Ard Biesheuvel <ardb@...nel.org>,
        Will Deacon <will@...nel.org>, linux-kernel@...r.kernel.org,
        linux-arm-kernel@...ts.infradead.org,
        Mark Brown <broonie@...nel.org>,
        Szabolcs Nagy <szabolcs.nagy@....com>,
        Daniel Kiss <Daniel.Kiss@....com>
Subject: Re: [PATCH] arm64/vdso: Discard .note.gnu.property sections in vDSO

On Fri, Apr 23, 2021 at 01:51:59PM -0700, Bill Wendling wrote:
> 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.

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.

> Signed-off-by: Bill Wendling <morbo@...gle.com>
> ---
>  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.31.1.498.g6c1eba8ee3d-goog

-- 
Catalin

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ