Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

crypto: simd - reject compat registrations without __ prefixes

simd_register_skciphers_compat() and simd_register_aeads_compat()
derive the wrapper algorithm names by stripping the __ prefix from the
internal algorithm names.

Currently they only WARN if cra_name or cra_driver_name lacks that prefix,
but they still continue and unconditionally add 2 to both strings. That
registers wrapper algorithms with incorrectly truncated names after a
violated precondition.

Reject such inputs with -EINVAL before registering anything, while keeping
the warning so invalid internal API usage is still visible.

Fixes: d14f0a1fc488 ("crypto: simd - allow registering multiple algorithms at once")
Fixes: 1661131a0479 ("crypto: simd - support wrapping AEAD algorithms")
Assisted-by: Codex:GPT-5
Signed-off-by: Wesley Atwell <atwellwea@gmail.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

authored by

Wesley Atwell and committed by
Herbert Xu
e0ce97f7 c708d3fa

+12 -4
+12 -4
crypto/simd.c
··· 214 214 const char *basename; 215 215 struct simd_skcipher_alg *simd; 216 216 217 + for (i = 0; i < count; i++) { 218 + if (WARN_ON(strncmp(algs[i].base.cra_name, "__", 2) || 219 + strncmp(algs[i].base.cra_driver_name, "__", 2))) 220 + return -EINVAL; 221 + } 222 + 217 223 err = crypto_register_skciphers(algs, count); 218 224 if (err) 219 225 return err; 220 226 221 227 for (i = 0; i < count; i++) { 222 - WARN_ON(strncmp(algs[i].base.cra_name, "__", 2)); 223 - WARN_ON(strncmp(algs[i].base.cra_driver_name, "__", 2)); 224 228 algname = algs[i].base.cra_name + 2; 225 229 drvname = algs[i].base.cra_driver_name + 2; 226 230 basename = algs[i].base.cra_driver_name; ··· 441 437 const char *basename; 442 438 struct simd_aead_alg *simd; 443 439 440 + for (i = 0; i < count; i++) { 441 + if (WARN_ON(strncmp(algs[i].base.cra_name, "__", 2) || 442 + strncmp(algs[i].base.cra_driver_name, "__", 2))) 443 + return -EINVAL; 444 + } 445 + 444 446 err = crypto_register_aeads(algs, count); 445 447 if (err) 446 448 return err; 447 449 448 450 for (i = 0; i < count; i++) { 449 - WARN_ON(strncmp(algs[i].base.cra_name, "__", 2)); 450 - WARN_ON(strncmp(algs[i].base.cra_driver_name, "__", 2)); 451 451 algname = algs[i].base.cra_name + 2; 452 452 drvname = algs[i].base.cra_driver_name + 2; 453 453 basename = algs[i].base.cra_driver_name;