On Sat, Mar 14, 2026 at 09:55:15AM -0700, Eric Biggers wrote:
> The tegra crypto driver failed to set the CRYPTO_ALG_ASYNC on its
> asynchronous algorithms, causing the crypto API to select them for users
> that request only synchronous algorithms. This causes crashes (at
> least). Fix this by adding the flag like what the other drivers do.
>
> Reported-by: Zorro Lang <[email protected]>
> Closes:
> https://lore.kernel.org/r/20260314080937.pghb4aa7d4je3...@dell-per750-06-vm-08.rhts.eng.pek2.redhat.com
> Fixes: 0880bb3b00c8 ("crypto: tegra - Add Tegra Security Engine driver")
> Cc: [email protected]
> Cc: Akhil R <[email protected]>
> Signed-off-by: Eric Biggers <[email protected]>
> ---
Thanks for you quick response, Eric. This fix works on my side. With this patch,
same reproducer can't trigger that bug anymore.
Thanks,
Zorro
>
> This patch is targeting crypto/master
>
> drivers/crypto/tegra/tegra-se-aes.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/crypto/tegra/tegra-se-aes.c
> b/drivers/crypto/tegra/tegra-se-aes.c
> index 0e07d0523291a..cb97a59084519 100644
> --- a/drivers/crypto/tegra/tegra-se-aes.c
> +++ b/drivers/crypto/tegra/tegra-se-aes.c
> @@ -592,10 +592,11 @@ static struct tegra_se_alg tegra_aes_algs[] = {
> .ivsize = AES_BLOCK_SIZE,
> .base = {
> .cra_name = "xts(aes)",
> .cra_driver_name = "xts-aes-tegra",
> .cra_priority = 500,
> + .cra_flags = CRYPTO_ALG_ASYNC,
> .cra_blocksize = AES_BLOCK_SIZE,
> .cra_ctxsize = sizeof(struct
> tegra_aes_ctx),
> .cra_alignmask = (__alignof__(u64) - 1),
> .cra_module = THIS_MODULE,
> },
> @@ -1920,10 +1921,11 @@ static struct tegra_se_alg tegra_aead_algs[] = {
> .ivsize = GCM_AES_IV_SIZE,
> .base = {
> .cra_name = "gcm(aes)",
> .cra_driver_name = "gcm-aes-tegra",
> .cra_priority = 500,
> + .cra_flags = CRYPTO_ALG_ASYNC,
> .cra_blocksize = 1,
> .cra_ctxsize = sizeof(struct tegra_aead_ctx),
> .cra_alignmask = 0xf,
> .cra_module = THIS_MODULE,
> },
> @@ -1942,10 +1944,11 @@ static struct tegra_se_alg tegra_aead_algs[] = {
> .chunksize = AES_BLOCK_SIZE,
> .base = {
> .cra_name = "ccm(aes)",
> .cra_driver_name = "ccm-aes-tegra",
> .cra_priority = 500,
> + .cra_flags = CRYPTO_ALG_ASYNC,
> .cra_blocksize = 1,
> .cra_ctxsize = sizeof(struct tegra_aead_ctx),
> .cra_alignmask = 0xf,
> .cra_module = THIS_MODULE,
> },
> @@ -1969,11 +1972,11 @@ static struct tegra_se_alg tegra_cmac_algs[] = {
> .halg.statesize = sizeof(struct tegra_cmac_reqctx),
> .halg.base = {
> .cra_name = "cmac(aes)",
> .cra_driver_name = "tegra-se-cmac",
> .cra_priority = 300,
> - .cra_flags = CRYPTO_ALG_TYPE_AHASH,
> + .cra_flags = CRYPTO_ALG_TYPE_AHASH |
> CRYPTO_ALG_ASYNC,
> .cra_blocksize = AES_BLOCK_SIZE,
> .cra_ctxsize = sizeof(struct tegra_cmac_ctx),
> .cra_alignmask = 0,
> .cra_module = THIS_MODULE,
> .cra_init = tegra_cmac_cra_init,
>
> base-commit: 1c9982b4961334c1edb0745a04cabd34bc2de675
> --
> 2.53.0
>