linux/lib/crypto
Arnd Bergmann 065f978a0e lib/crypto: gf128hash: mark clmul32() as noinline_for_stack
During randconfig testing, I came across a lot of warnings for the newly
added carryless multiplication function triggering excessive stack usage
from spilling temporary variables to the stack:

lib/crypto/gf128hash.c:166:1: error: stack frame size (1192) exceeds limit (1024) in 'polyval_mul_generic' [-Werror,-Wframe-larger-than]

In addition to the possible risk of overflowing the kernel stack,
the generated object code surely performs very poorly.

This only happens on architectures that don't provide uint128_t
(which should be all 32-bit architectures on modern compilers), but
though I tested random x86 and arm configs, I only saw this with arm's
CONFIG_THUMB2_KERNEL, which adds more pressure to the register allocator.

The testing was done using clang-22, I don't know if gcc has the same
problem. Marking clmul32() as noinline_for_stack experimentally shows
all of the affected builds to completely solve the problem, reducing
the stack usage to a few bytes as expected.

Since u64 arithmetic frequently leads to compilers badly optimizing
32-bit targets, keeping clmul32 out of line is likely to help on
other 32-bit configurations as well when they run into this problem,
though it may also result in a small performance degradation in
configurations that would benefit from inlining.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Link: https://patch.msgid.link/20260611125952.3387258-1-arnd@kernel.org
Signed-off-by: Eric Biggers <ebiggers@kernel.org>
2026-06-11 12:57:49 -07:00
..
arm lib/crypto: arm/ghash: Migrate optimized code into library 2026-03-23 15:24:54 -07:00
arm64 lib/crypto: arm64: Assume a little-endian kernel 2026-04-01 13:02:15 -07:00
mips lib/crypto: mips: Drop optimized MD5 code 2026-03-30 12:35:05 -07:00
mpi Crypto library fix and documentation update for 7.1 2026-04-21 11:46:22 -07:00
powerpc lib/crypto: powerpc/md5: Drop powerpc optimized MD5 code 2026-05-09 11:41:01 -07:00
riscv lib/crypto: riscv/sm3: Migrate optimized code into library 2026-03-23 17:50:59 -07:00
s390 lib/crypto: s390/ghash: Migrate optimized code into library 2026-03-23 16:44:29 -07:00
sparc lib/crypto: sparc: Drop optimized MD5 code 2026-03-30 12:35:16 -07:00
tests lib/crypto: tests: Migrate ChaCha20Poly1305 self-test to KUnit 2026-03-30 12:35:30 -07:00
x86 lib/crypto: x86/sm3: Migrate optimized code into library 2026-03-23 17:50:59 -07:00
.kunitconfig lib/crypto: tests: Migrate ChaCha20Poly1305 self-test to KUnit 2026-03-30 12:35:30 -07:00
aes.c lib/crypto: aes: Add FIPS self-test for CMAC 2026-03-09 13:27:20 -07:00
aescfb.c lib/crypto: Include <crypto/utils.h> instead of <crypto/algapi.h> 2026-03-31 17:19:31 -07:00
aesgcm.c lib/crypto: aesgcm: Don't disable IRQs during AES block encryption 2026-03-31 17:19:22 -07:00
arc4.c lib/crypto: Explicitly include <linux/export.h> 2025-06-30 09:26:19 -07:00
blake2b.c lib/crypto: blake2b: Roll up BLAKE2b round loop on 32-bit 2025-12-09 15:10:21 -08:00
blake2s.c lib/crypto: blake2s: Replace manual unrolling with unrolled_full 2025-12-09 15:10:21 -08:00
chacha-block-generic.c lib/crypto: chacha: Zeroize permuted_state before it leaves scope 2026-03-27 13:35:35 -07:00
chacha.c lib/crypto: Include <crypto/utils.h> instead of <crypto/algapi.h> 2026-03-31 17:19:31 -07:00
chacha20poly1305.c lib/crypto: tests: Migrate ChaCha20Poly1305 self-test to KUnit 2026-03-30 12:35:30 -07:00
curve25519-fiat32.c move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
curve25519-hacl64.c move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
curve25519.c lib/crypto: curve25519: Consolidate into single module 2025-09-06 16:32:43 -07:00
des.c lib/crypto: Explicitly include <linux/export.h> 2025-06-30 09:26:19 -07:00
fips-mldsa.h lib/crypto: mldsa: Add FIPS cryptographic algorithm self-test 2026-01-12 11:07:50 -08:00
fips.h lib/crypto: aes: Add FIPS self-test for CMAC 2026-03-09 13:27:20 -07:00
gf128hash.c lib/crypto: gf128hash: mark clmul32() as noinline_for_stack 2026-06-11 12:57:49 -07:00
gf128mul.c lib/crypto: gf128mul: Remove unused 4k_lle functions 2026-03-23 16:44:30 -07:00
hash_info.c lib/crypto: hash_info: Move hash_info.c into lib/crypto/ 2025-07-08 12:03:44 -07:00
Kconfig lib/crypto: powerpc/md5: Drop powerpc optimized MD5 code 2026-05-09 11:41:01 -07:00
Makefile lib/crypto: powerpc/md5: Drop powerpc optimized MD5 code 2026-05-09 11:41:01 -07:00
md5.c lib/crypto: powerpc/md5: Drop powerpc optimized MD5 code 2026-05-09 11:41:01 -07:00
memneq.c lib/crypto: Include <crypto/utils.h> instead of <crypto/algapi.h> 2026-03-31 17:19:31 -07:00
mldsa.c lib/crypto: mldsa: Clarify the documentation for mldsa_verify() slightly 2026-02-03 19:28:51 -08:00
nh.c lib/crypto: nh: Add NH library 2026-01-12 11:07:49 -08:00
poly1305-donna32.c lib/crypto: Explicitly include <linux/export.h> 2025-06-30 09:26:19 -07:00
poly1305-donna64.c lib/crypto: Explicitly include <linux/export.h> 2025-06-30 09:26:19 -07:00
poly1305.c lib/crypto: poly1305: Consolidate into single module 2025-08-29 09:49:18 -07:00
sha1.c lib/crypto: sha1: Remove low-level functions from API 2026-01-27 15:47:41 -08:00
sha3.c lib/crypto: sha3: Support arch overrides of one-shot digest functions 2025-11-05 20:02:35 -08:00
sha256.c lib/crypto: Add FIPS self-tests for SHA-1 and SHA-2 2025-10-29 22:04:24 -07:00
sha512.c lib/crypto: Add FIPS self-tests for SHA-1 and SHA-2 2025-10-29 22:04:24 -07:00
simd.c crypto: api - move crypto_simd_disabled_for_test to lib 2024-10-28 18:33:11 +08:00
sm3.c crypto: sm3 - Remove the original "sm3_block_generic()" 2026-03-23 17:50:59 -07:00
utils.c lib/crypto: Explicitly include <linux/export.h> 2025-06-30 09:26:19 -07:00