| From f0bf5cf11f634e59a1f525afe06d302a9b034ba0 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 3 Jun 2021 01:53:40 -0400 |
| Subject: crypto: x86/curve25519 - fix cpu feature checking logic in mod_exit |
| |
| From: Hangbin Liu <liuhangbin@gmail.com> |
| |
| [ Upstream commit 1b82435d17774f3eaab35dce239d354548aa9da2 ] |
| |
| In curve25519_mod_init() the curve25519_alg will be registered only when |
| (X86_FEATURE_BMI2 && X86_FEATURE_ADX). But in curve25519_mod_exit() |
| it still checks (X86_FEATURE_BMI2 || X86_FEATURE_ADX) when do crypto |
| unregister. This will trigger a BUG_ON in crypto_unregister_alg() as |
| alg->cra_refcnt is 0 if the cpu only supports one of X86_FEATURE_BMI2 |
| and X86_FEATURE_ADX. |
| |
| Fixes: 07b586fe0662 ("crypto: x86/curve25519 - replace with formally verified implementation") |
| Signed-off-by: Hangbin Liu <liuhangbin@gmail.com> |
| Reviewed-by: Jason A. Donenfeld <Jason@zx2c4.com> |
| Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/x86/crypto/curve25519-x86_64.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/arch/x86/crypto/curve25519-x86_64.c b/arch/x86/crypto/curve25519-x86_64.c |
| index 5af8021b98ce..11b4c83c715e 100644 |
| --- a/arch/x86/crypto/curve25519-x86_64.c |
| +++ b/arch/x86/crypto/curve25519-x86_64.c |
| @@ -1500,7 +1500,7 @@ static int __init curve25519_mod_init(void) |
| static void __exit curve25519_mod_exit(void) |
| { |
| if (IS_REACHABLE(CONFIG_CRYPTO_KPP) && |
| - (boot_cpu_has(X86_FEATURE_BMI2) || boot_cpu_has(X86_FEATURE_ADX))) |
| + static_branch_likely(&curve25519_use_bmi2_adx)) |
| crypto_unregister_kpp(&curve25519_alg); |
| } |
| |
| -- |
| 2.30.2 |
| |