Re: [PATCH] crypto: fix warnings from missing .note.GNU-stack

From: Ard Biesheuvel
Date: Sat Jul 23 2022 - 06:37:24 EST


On Thu, 21 Jul 2022 at 22:48, Ben Dooks <ben-linux@xxxxxxxxx> wrote:
>
> A lot of the assembly code in arch/arm/crypto is missing
> a .note.GNU-stack section which is making a numbe of warnings
> about implicit executable stack. This code does not look like
> it does not need an executable stack, so silence the warnings
> by adding a .section .note.GNU-stack to all these.
>
> Since this is an empty section, it should be backwards compatible
> with older linkers.
>
> Fixes the following warnings:
>
> arm-linux-gnueabihf-ld: warning: arch/arm/crypto/aes-cipher-core.o: missing .note.GNU-stack section implies executable stack
> arm-linux-gnueabihf-ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
> arm-linux-gnueabihf-ld: warning: arch/arm/crypto/aes-neonbs-core.o: missing .note.GNU-stack section implies executable stack
> arm-linux-gnueabihf-ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
> arm-linux-gnueabihf-ld: warning: arch/arm/crypto/sha1-armv4-large.o: missing .note.GNU-stack section implies executable stack
> arm-linux-gnueabihf-ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
> arm-linux-gnueabihf-ld: warning: arch/arm/crypto/sha1-armv7-neon.o: missing .note.GNU-stack section implies executable stack
> arm-linux-gnueabihf-ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
> arm-linux-gnueabihf-ld: warning: arch/arm/crypto/sha256-core.o: missing .note.GNU-stack section implies executable stack
> arm-linux-gnueabihf-ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
> arm-linux-gnueabihf-ld: warning: arch/arm/crypto/sha512-core.o: missing .note.GNU-stack section implies executable stack
> arm-linux-gnueabihf-ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
> arm-linux-gnueabihf-ld: warning: arch/arm/crypto/chacha-neon-core.o: missing .note.GNU-stack section implies executable stack
> arm-linux-gnueabihf-ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
> arm-linux-gnueabihf-ld: warning: arch/arm/crypto/aes-ce-core.o: missing .note.GNU-stack section implies executable stack
> arm-linux-gnueabihf-ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
> arm-linux-gnueabihf-ld: warning: arch/arm/crypto/sha1-ce-core.o: missing .note.GNU-stack section implies executable stack
> arm-linux-gnueabihf-ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
> arm-linux-gnueabihf-ld: warning: arch/arm/crypto/sha2-ce-core.o: missing .note.GNU-stack section implies executable stack
> arm-linux-gnueabihf-ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
> arm-linux-gnueabihf-ld: warning: arch/arm/crypto/ghash-ce-core.o: missing .note.GNU-stack section implies executable stack
> arm-linux-gnueabihf-ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
> arm-linux-gnueabihf-ld: warning: arch/arm/crypto/crc32-ce-core.o: missing .note.GNU-stack section implies executable stack
> arm-linux-gnueabihf-ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
>
> Signed-off-by: Ben Dooks <ben-linux@xxxxxxxxx>

Hello Ben,

This annotation is pointless in the kernel, as we never load any code
as ELF executables. We only load raw binaries or partially linked
objects, which don't carry this annotation, and we never use an
executable stack anyway.

So instead of adding these annotations, can we please just find a way
to shut up the linker?


> ---
> arch/arm/crypto/aes-ce-core.S | 2 ++
> arch/arm/crypto/aes-cipher-core.S | 2 ++
> arch/arm/crypto/aes-neonbs-core.S | 3 +++
> arch/arm/crypto/chacha-neon-core.S | 2 ++
> arch/arm/crypto/chacha-scalar-core.S | 2 ++
> arch/arm/crypto/crc32-ce-core.S | 2 ++
> arch/arm/crypto/ghash-ce-core.S | 2 ++
> arch/arm/crypto/sha1-armv4-large.S | 1 +
> arch/arm/crypto/sha1-armv7-neon.S | 2 ++
> arch/arm/crypto/sha1-ce-core.S | 2 ++
> arch/arm/crypto/sha2-ce-core.S | 2 ++
> arch/arm/crypto/sha256-armv4.pl | 1 +
> arch/arm/crypto/sha512-armv4.pl | 1 +
> 13 files changed, 24 insertions(+)
>
> diff --git a/arch/arm/crypto/aes-ce-core.S b/arch/arm/crypto/aes-ce-core.S
> index 312428d83eed..4e570c6df9bb 100644
> --- a/arch/arm/crypto/aes-ce-core.S
> +++ b/arch/arm/crypto/aes-ce-core.S
> @@ -711,3 +711,5 @@ ENDPROC(ce_aes_invert)
> .byte 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf
> .byte 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
> .byte 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
> +
> +.section .note.GNU-stack,"",%progbits
> diff --git a/arch/arm/crypto/aes-cipher-core.S b/arch/arm/crypto/aes-cipher-core.S
> index 1da3f41359aa..11f10ee35487 100644
> --- a/arch/arm/crypto/aes-cipher-core.S
> +++ b/arch/arm/crypto/aes-cipher-core.S
> @@ -199,3 +199,5 @@ ENDPROC(__aes_arm_encrypt)
> ENTRY(__aes_arm_decrypt)
> do_crypt iround, crypto_it_tab, crypto_aes_inv_sbox, 0
> ENDPROC(__aes_arm_decrypt)
> +
> +.section .note.GNU-stack,"",%progbits
> diff --git a/arch/arm/crypto/aes-neonbs-core.S b/arch/arm/crypto/aes-neonbs-core.S
> index 7b61032f29fa..19197c0d635c 100644
> --- a/arch/arm/crypto/aes-neonbs-core.S
> +++ b/arch/arm/crypto/aes-neonbs-core.S
> @@ -1041,3 +1041,6 @@ ENTRY(aesbs_xts_decrypt)
> ldr ip, [sp, #8] // reorder final tweak?
> __xts_crypt aesbs_decrypt8, q0, q1, q6, q4, q2, q7, q3, q5
> ENDPROC(aesbs_xts_decrypt)
> +
> +.section .note.GNU-stack,"",%progbits
> +
> diff --git a/arch/arm/crypto/chacha-neon-core.S b/arch/arm/crypto/chacha-neon-core.S
> index 13d12f672656..a90690d32ad8 100644
> --- a/arch/arm/crypto/chacha-neon-core.S
> +++ b/arch/arm/crypto/chacha-neon-core.S
> @@ -641,3 +641,5 @@ ENDPROC(chacha_4block_xor_neon)
> .byte 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
> .byte 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17
> .byte 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f
> +
> +.section .note.GNU-stack,"",%progbits
> diff --git a/arch/arm/crypto/chacha-scalar-core.S b/arch/arm/crypto/chacha-scalar-core.S
> index 083fe1ab96d0..81f94876f418 100644
> --- a/arch/arm/crypto/chacha-scalar-core.S
> +++ b/arch/arm/crypto/chacha-scalar-core.S
> @@ -441,3 +441,5 @@ ENTRY(hchacha_block_arm)
> 1: _chacha_permute 12
> b 0b
> ENDPROC(hchacha_block_arm)
> +
> +.section .note.GNU-stack,"",%progbits
> diff --git a/arch/arm/crypto/crc32-ce-core.S b/arch/arm/crypto/crc32-ce-core.S
> index 3f13a76b9066..990c756c7487 100644
> --- a/arch/arm/crypto/crc32-ce-core.S
> +++ b/arch/arm/crypto/crc32-ce-core.S
> @@ -304,3 +304,5 @@ ENDPROC(crc32_armv8_le)
> ENTRY(crc32c_armv8_le)
> __crc32 c
> ENDPROC(crc32c_armv8_le)
> +
> +.section .note.GNU-stack,"",%progbits
> diff --git a/arch/arm/crypto/ghash-ce-core.S b/arch/arm/crypto/ghash-ce-core.S
> index 9f51e3fa4526..2f712b9d8b2b 100644
> --- a/arch/arm/crypto/ghash-ce-core.S
> +++ b/arch/arm/crypto/ghash-ce-core.S
> @@ -337,3 +337,5 @@ ENTRY(pmull_ghash_update_p8)
>
> ghash_update p8
> ENDPROC(pmull_ghash_update_p8)
> +
> +.section .note.GNU-stack,"",%progbits
> diff --git a/arch/arm/crypto/sha1-armv4-large.S b/arch/arm/crypto/sha1-armv4-large.S
> index 1c8b685149f2..4e40132382b5 100644
> --- a/arch/arm/crypto/sha1-armv4-large.S
> +++ b/arch/arm/crypto/sha1-armv4-large.S
> @@ -505,3 +505,4 @@ ENTRY(sha1_block_data_order)
> ENDPROC(sha1_block_data_order)
> .asciz "SHA1 block transform for ARMv4, CRYPTOGAMS by <appro@xxxxxxxxxxx>"
> .align 2
> +.section .note.GNU-stack,"",%progbits
> diff --git a/arch/arm/crypto/sha1-armv7-neon.S b/arch/arm/crypto/sha1-armv7-neon.S
> index 28d816a6a530..a554b1bb4ceb 100644
> --- a/arch/arm/crypto/sha1-armv7-neon.S
> +++ b/arch/arm/crypto/sha1-armv7-neon.S
> @@ -632,3 +632,5 @@ ENTRY(sha1_transform_neon)
> .Ldo_nothing:
> bx lr
> ENDPROC(sha1_transform_neon)
> +
> +.section .note.GNU-stack,"",%progbits
> diff --git a/arch/arm/crypto/sha1-ce-core.S b/arch/arm/crypto/sha1-ce-core.S
> index 8a702e051738..73353804c33f 100644
> --- a/arch/arm/crypto/sha1-ce-core.S
> +++ b/arch/arm/crypto/sha1-ce-core.S
> @@ -121,3 +121,5 @@ ENTRY(sha1_ce_transform)
> vstr dgbs, [r0, #16]
> bx lr
> ENDPROC(sha1_ce_transform)
> +
> +.section .note.GNU-stack,"",%progbits
> diff --git a/arch/arm/crypto/sha2-ce-core.S b/arch/arm/crypto/sha2-ce-core.S
> index b6369d2440a1..b5f20ab96690 100644
> --- a/arch/arm/crypto/sha2-ce-core.S
> +++ b/arch/arm/crypto/sha2-ce-core.S
> @@ -121,3 +121,5 @@ ENTRY(sha2_ce_transform)
> vst1.32 {dga-dgb}, [r0]
> bx lr
> ENDPROC(sha2_ce_transform)
> +
> +.section .note.GNU-stack,"",%progbits
> diff --git a/arch/arm/crypto/sha256-armv4.pl b/arch/arm/crypto/sha256-armv4.pl
> index f3a2b54efd4e..c12edbd99531 100644
> --- a/arch/arm/crypto/sha256-armv4.pl
> +++ b/arch/arm/crypto/sha256-armv4.pl
> @@ -677,6 +677,7 @@ $code.=<<___;
> #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
> .comm OPENSSL_armcap_P,4,4
> #endif
> +.section .note.GNU-stack,"",%progbits
> ___
>
> open SELF,$0;
> diff --git a/arch/arm/crypto/sha512-armv4.pl b/arch/arm/crypto/sha512-armv4.pl
> index 2fc3516912fa..6411799b4d1d 100644
> --- a/arch/arm/crypto/sha512-armv4.pl
> +++ b/arch/arm/crypto/sha512-armv4.pl
> @@ -639,6 +639,7 @@ $code.=<<___;
> #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
> .comm OPENSSL_armcap_P,4,4
> #endif
> +.section .note.GNU-stack,"",%progbits
> ___
>
> $code =~ s/\`([^\`]*)\`/eval $1/gem;
> --
> 2.35.1
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@xxxxxxxxxxxxxxxxxxx
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel