diff options
author | Salvatore Bonaccorso <carnil@debian.org> | 2021-03-19 16:44:18 +0100 |
---|---|---|
committer | Salvatore Bonaccorso <carnil@debian.org> | 2021-03-19 16:47:24 +0100 |
commit | 724a0bce9f1ed34874a44beae19d287b8b0b2c7c (patch) | |
tree | 44b4e8545d3cc9ccbbbf960a3bec90a8a50e0fd3 | |
parent | 196bb1fdc6df2b74b393a56ffc427c18cde23a3c (diff) | |
download | linux-debian-724a0bce9f1ed34874a44beae19d287b8b0b2c7c.tar.gz |
[x86] crypto: aesni - Use TEST %reg,%reg instead of CMP $0,%reg
-rw-r--r-- | debian/changelog | 1 | ||||
-rw-r--r-- | debian/patches/bugfix/x86/crypto-aesni-use-test-reg-reg-instead-of-cmp-0-reg.patch | 214 | ||||
-rw-r--r-- | debian/patches/series | 1 |
3 files changed, 216 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog index 62127a953..0366e7064 100644 --- a/debian/changelog +++ b/debian/changelog @@ -885,6 +885,7 @@ linux (5.10.24-1) UNRELEASED; urgency=medium * bpf: Simplify alu_limit masking for pointer arithmetic * bpf: Add sanity check for upper ptr_limit * bpf, selftests: Fix up some test_verifier cases for unprivileged + * [x86] crypto: aesni - Use TEST %reg,%reg instead of CMP $0,%reg [ Wookey ] * [arm64] drivers/perf: Enable ARM_CMN as module (Closes: #981186) diff --git a/debian/patches/bugfix/x86/crypto-aesni-use-test-reg-reg-instead-of-cmp-0-reg.patch b/debian/patches/bugfix/x86/crypto-aesni-use-test-reg-reg-instead-of-cmp-0-reg.patch new file mode 100644 index 000000000..7ba7361b0 --- /dev/null +++ b/debian/patches/bugfix/x86/crypto-aesni-use-test-reg-reg-instead-of-cmp-0-reg.patch @@ -0,0 +1,214 @@ +From c11104b3bf91d5502fe7f0da2b48a3caebad5dc2 Mon Sep 17 00:00:00 2001 +From: Sasha Levin <sashal@kernel.org> +Date: Fri, 27 Nov 2020 10:44:52 +0100 +Subject: crypto: aesni - Use TEST %reg,%reg instead of CMP $0,%reg + +From: Uros Bizjak <ubizjak@gmail.com> + +[ Upstream commit 032d049ea0f45b45c21f3f02b542aa18bc6b6428 ] + +CMP $0,%reg can't set overflow flag, so we can use shorter TEST %reg,%reg +instruction when only zero and sign flags are checked (E,L,LE,G,GE conditions). + +Signed-off-by: Uros Bizjak <ubizjak@gmail.com> +Cc: Herbert Xu <herbert@gondor.apana.org.au> +Cc: Borislav Petkov <bp@alien8.de> +Cc: "H. Peter Anvin" <hpa@zytor.com> +Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> +Signed-off-by: Sasha Levin <sashal@kernel.org> +--- + arch/x86/crypto/aesni-intel_asm.S | 20 ++++++++++---------- + arch/x86/crypto/aesni-intel_avx-x86_64.S | 20 ++++++++++---------- + 2 files changed, 20 insertions(+), 20 deletions(-) + +diff --git a/arch/x86/crypto/aesni-intel_asm.S b/arch/x86/crypto/aesni-intel_asm.S +index 1852b19a73a0..d1436c37008b 100644 +--- a/arch/x86/crypto/aesni-intel_asm.S ++++ b/arch/x86/crypto/aesni-intel_asm.S +@@ -318,7 +318,7 @@ _initial_blocks_\@: + + # Main loop - Encrypt/Decrypt remaining blocks + +- cmp $0, %r13 ++ test %r13, %r13 + je _zero_cipher_left_\@ + sub $64, %r13 + je _four_cipher_left_\@ +@@ -437,7 +437,7 @@ _multiple_of_16_bytes_\@: + + mov PBlockLen(%arg2), %r12 + +- cmp $0, %r12 ++ test %r12, %r12 + je _partial_done\@ + + GHASH_MUL %xmm8, %xmm13, %xmm9, %xmm10, %xmm11, %xmm5, %xmm6 +@@ -474,7 +474,7 @@ _T_8_\@: + add $8, %r10 + sub $8, %r11 + psrldq $8, %xmm0 +- cmp $0, %r11 ++ test %r11, %r11 + je _return_T_done_\@ + _T_4_\@: + movd %xmm0, %eax +@@ -482,7 +482,7 @@ _T_4_\@: + add $4, %r10 + sub $4, %r11 + psrldq $4, %xmm0 +- cmp $0, %r11 ++ test %r11, %r11 + je _return_T_done_\@ + _T_123_\@: + movd %xmm0, %eax +@@ -619,7 +619,7 @@ _get_AAD_blocks\@: + + /* read the last <16B of AAD */ + _get_AAD_rest\@: +- cmp $0, %r11 ++ test %r11, %r11 + je _get_AAD_done\@ + + READ_PARTIAL_BLOCK %r10, %r11, \TMP1, \TMP7 +@@ -640,7 +640,7 @@ _get_AAD_done\@: + .macro PARTIAL_BLOCK CYPH_PLAIN_OUT PLAIN_CYPH_IN PLAIN_CYPH_LEN DATA_OFFSET \ + AAD_HASH operation + mov PBlockLen(%arg2), %r13 +- cmp $0, %r13 ++ test %r13, %r13 + je _partial_block_done_\@ # Leave Macro if no partial blocks + # Read in input data without over reading + cmp $16, \PLAIN_CYPH_LEN +@@ -692,7 +692,7 @@ _no_extra_mask_1_\@: + pshufb %xmm2, %xmm3 + pxor %xmm3, \AAD_HASH + +- cmp $0, %r10 ++ test %r10, %r10 + jl _partial_incomplete_1_\@ + + # GHASH computation for the last <16 Byte block +@@ -727,7 +727,7 @@ _no_extra_mask_2_\@: + pshufb %xmm2, %xmm9 + pxor %xmm9, \AAD_HASH + +- cmp $0, %r10 ++ test %r10, %r10 + jl _partial_incomplete_2_\@ + + # GHASH computation for the last <16 Byte block +@@ -747,7 +747,7 @@ _encode_done_\@: + pshufb %xmm2, %xmm9 + .endif + # output encrypted Bytes +- cmp $0, %r10 ++ test %r10, %r10 + jl _partial_fill_\@ + mov %r13, %r12 + mov $16, %r13 +@@ -2720,7 +2720,7 @@ SYM_FUNC_END(aesni_ctr_enc) + */ + SYM_FUNC_START(aesni_xts_crypt8) + FRAME_BEGIN +- cmpb $0, %cl ++ testb %cl, %cl + movl $0, %ecx + movl $240, %r10d + leaq _aesni_enc4, %r11 +diff --git a/arch/x86/crypto/aesni-intel_avx-x86_64.S b/arch/x86/crypto/aesni-intel_avx-x86_64.S +index 5fee47956f3b..2cf8e94d986a 100644 +--- a/arch/x86/crypto/aesni-intel_avx-x86_64.S ++++ b/arch/x86/crypto/aesni-intel_avx-x86_64.S +@@ -369,7 +369,7 @@ _initial_num_blocks_is_0\@: + + + _initial_blocks_encrypted\@: +- cmp $0, %r13 ++ test %r13, %r13 + je _zero_cipher_left\@ + + sub $128, %r13 +@@ -528,7 +528,7 @@ _multiple_of_16_bytes\@: + vmovdqu HashKey(arg2), %xmm13 + + mov PBlockLen(arg2), %r12 +- cmp $0, %r12 ++ test %r12, %r12 + je _partial_done\@ + + #GHASH computation for the last <16 Byte block +@@ -573,7 +573,7 @@ _T_8\@: + add $8, %r10 + sub $8, %r11 + vpsrldq $8, %xmm9, %xmm9 +- cmp $0, %r11 ++ test %r11, %r11 + je _return_T_done\@ + _T_4\@: + vmovd %xmm9, %eax +@@ -581,7 +581,7 @@ _T_4\@: + add $4, %r10 + sub $4, %r11 + vpsrldq $4, %xmm9, %xmm9 +- cmp $0, %r11 ++ test %r11, %r11 + je _return_T_done\@ + _T_123\@: + vmovd %xmm9, %eax +@@ -625,7 +625,7 @@ _get_AAD_blocks\@: + cmp $16, %r11 + jge _get_AAD_blocks\@ + vmovdqu \T8, \T7 +- cmp $0, %r11 ++ test %r11, %r11 + je _get_AAD_done\@ + + vpxor \T7, \T7, \T7 +@@ -644,7 +644,7 @@ _get_AAD_rest8\@: + vpxor \T1, \T7, \T7 + jmp _get_AAD_rest8\@ + _get_AAD_rest4\@: +- cmp $0, %r11 ++ test %r11, %r11 + jle _get_AAD_rest0\@ + mov (%r10), %eax + movq %rax, \T1 +@@ -749,7 +749,7 @@ _done_read_partial_block_\@: + .macro PARTIAL_BLOCK GHASH_MUL CYPH_PLAIN_OUT PLAIN_CYPH_IN PLAIN_CYPH_LEN DATA_OFFSET \ + AAD_HASH ENC_DEC + mov PBlockLen(arg2), %r13 +- cmp $0, %r13 ++ test %r13, %r13 + je _partial_block_done_\@ # Leave Macro if no partial blocks + # Read in input data without over reading + cmp $16, \PLAIN_CYPH_LEN +@@ -801,7 +801,7 @@ _no_extra_mask_1_\@: + vpshufb %xmm2, %xmm3, %xmm3 + vpxor %xmm3, \AAD_HASH, \AAD_HASH + +- cmp $0, %r10 ++ test %r10, %r10 + jl _partial_incomplete_1_\@ + + # GHASH computation for the last <16 Byte block +@@ -836,7 +836,7 @@ _no_extra_mask_2_\@: + vpshufb %xmm2, %xmm9, %xmm9 + vpxor %xmm9, \AAD_HASH, \AAD_HASH + +- cmp $0, %r10 ++ test %r10, %r10 + jl _partial_incomplete_2_\@ + + # GHASH computation for the last <16 Byte block +@@ -856,7 +856,7 @@ _encode_done_\@: + vpshufb %xmm2, %xmm9, %xmm9 + .endif + # output encrypted Bytes +- cmp $0, %r10 ++ test %r10, %r10 + jl _partial_fill_\@ + mov %r13, %r12 + mov $16, %r13 +-- +2.30.1 + diff --git a/debian/patches/series b/debian/patches/series index 97fdfef65..7634c44bc 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -75,6 +75,7 @@ bugfix/arm/arm-mm-export-__sync_icache_dcache-for-xen-privcmd.patch bugfix/powerpc/powerpc-boot-fix-missing-crc32poly.h-when-building-with-kernel_xz.patch bugfix/arm64/arm64-acpi-Add-fixup-for-HPE-m400-quirks.patch bugfix/x86/x86-32-disable-3dnow-in-generic-config.patch +bugfix/x86/crypto-aesni-use-test-reg-reg-instead-of-cmp-0-reg.patch # Arch features features/arm64/arm64-dts-rockchip-Add-basic-support-for-Kobol-s-Hel.patch |