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
blake2b.c
blake2s.c
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
curve25519-hacl64.c
curve25519.c
des.c
fips-mldsa.h
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
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
nh.c
poly1305-donna32.c
poly1305-donna64.c
poly1305.c
sha1.c
sha3.c
sha256.c
sha512.c
simd.c
sm3.c crypto: sm3 - Remove the original "sm3_block_generic()" 2026-03-23 17:50:59 -07:00
utils.c