From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7D9AB296BDC; Mon, 16 Mar 2026 20:22:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773692540; cv=none; b=uY6ozJXyGaTuvKUdbjjogJoM+e2ZzTt9TTZPFsZSFigUgZBxPxrLngQX/nPovGsmIVn6vcZX5HsXsZM27I4mtk/1bxDGr8wDS1IBPSELljOzKZVD2Klq16HfmtjEmyaHrPSrn3+w2UissX/a9tSAYuLnpLCiFD4OC5mboZkmOTU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773692540; c=relaxed/simple; bh=lunMFDLmUDZwME6Stf/cLCjqXqvBAvKS+2/nf2ou+lU=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=IieE79mlNtIlYyfNW+JyuY/vaoDKIz8idukbIka0HEzICDlkib5/yVA9UlgPluLYXOMfw8Mc/5QZEaHHwEIDoZ8NEMGjsnVg4UMdggKxv9BhY4Ncky2kEXEYXozW1bA5j3pvccfLR49MUwkzIvevZLutPyNn0xcgyWd9A84oJVE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=pkDskulU; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="pkDskulU" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CDB5BC19421; Mon, 16 Mar 2026 20:22:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773692540; bh=lunMFDLmUDZwME6Stf/cLCjqXqvBAvKS+2/nf2ou+lU=; h=From:To:Cc:Subject:Date:From; b=pkDskulUimYSgSHEr5XRuQ6Y2UyWEaEb4MET41cMDSNhkVIW2u91d+9a5w66hAthj b99sEtvhucrCtqDbUF1ETKIaxX1ybhNIfjwPP2i2jOrBBGGIE0670W4IkVDqz9XIHg veSX2KtUsNvSfj1MQmuO+/mqgil09m1VFDq8me6KFrPxBacoDUY72TSOc7tH7JmwoE M+WqEWHwQHUyWfeVofPyA9DJJLDL7V+68Zu8X/Vg41kYXgFX/xZ5I9eh4PSLFAExpt zEqjm0BNbezNK+3wdxJ2G1JDfDsI134PBmIGgeljnFvYAoz/uX4oPnmrgf7nmS31AF U816hA1TfBIxQ== From: Eric Biggers To: Herbert Xu , linux-crypto@vger.kernel.org Cc: linux-ext4@vger.kernel.org, linux-fscrypt@vger.kernel.org, Thierry Reding , Jonathan Hunter , Eric Biggers , Zorro Lang , stable@vger.kernel.org, Akhil R Subject: [PATCH v2] crypto: tegra - Add missing CRYPTO_ALG_ASYNC Date: Mon, 16 Mar 2026 13:21:19 -0700 Message-ID: <20260316202119.13934-1-ebiggers@kernel.org> X-Mailer: git-send-email 2.53.0 Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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. Also remove the unnecessary CRYPTO_ALG_TYPE_* flags, since those just get ignored and overridden by the registration function anyway. Reported-by: Zorro Lang Closes: https://lore.kernel.org/r/20260314080937.pghb4aa7d4je3mhh@dell-per750-06-vm-08.rhts.eng.pek2.redhat.com Fixes: 0880bb3b00c8 ("crypto: tegra - Add Tegra Security Engine driver") Cc: stable@vger.kernel.org Cc: Akhil R Signed-off-by: Eric Biggers --- This patch is targeting crypto/master. v2: fix tegra-se-hash.c as well, and remove unnecessary type flags drivers/crypto/tegra/tegra-se-aes.c | 11 ++++++---- drivers/crypto/tegra/tegra-se-hash.c | 30 ++++++++++++++++------------ 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/drivers/crypto/tegra/tegra-se-aes.c b/drivers/crypto/tegra/tegra-se-aes.c index 0e07d0523291..9210cceb4b7b 100644 --- a/drivers/crypto/tegra/tegra-se-aes.c +++ b/drivers/crypto/tegra/tegra-se-aes.c @@ -527,11 +527,11 @@ static struct tegra_se_alg tegra_aes_algs[] = { .ivsize = AES_BLOCK_SIZE, .base = { .cra_name = "cbc(aes)", .cra_driver_name = "cbc-aes-tegra", .cra_priority = 500, - .cra_flags = CRYPTO_ALG_TYPE_SKCIPHER | CRYPTO_ALG_ASYNC, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = AES_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_aes_ctx), .cra_alignmask = 0xf, .cra_module = THIS_MODULE, }, @@ -548,11 +548,11 @@ static struct tegra_se_alg tegra_aes_algs[] = { .max_keysize = AES_MAX_KEY_SIZE, .base = { .cra_name = "ecb(aes)", .cra_driver_name = "ecb-aes-tegra", .cra_priority = 500, - .cra_flags = CRYPTO_ALG_TYPE_SKCIPHER | CRYPTO_ALG_ASYNC, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = AES_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_aes_ctx), .cra_alignmask = 0xf, .cra_module = THIS_MODULE, }, @@ -570,11 +570,11 @@ static struct tegra_se_alg tegra_aes_algs[] = { .ivsize = AES_BLOCK_SIZE, .base = { .cra_name = "ctr(aes)", .cra_driver_name = "ctr-aes-tegra", .cra_priority = 500, - .cra_flags = CRYPTO_ALG_TYPE_SKCIPHER | CRYPTO_ALG_ASYNC, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = 1, .cra_ctxsize = sizeof(struct tegra_aes_ctx), .cra_alignmask = 0xf, .cra_module = THIS_MODULE, }, @@ -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_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, diff --git a/drivers/crypto/tegra/tegra-se-hash.c b/drivers/crypto/tegra/tegra-se-hash.c index 4a298ace6e9f..06bb5bf0fa33 100644 --- a/drivers/crypto/tegra/tegra-se-hash.c +++ b/drivers/crypto/tegra/tegra-se-hash.c @@ -759,11 +759,11 @@ static struct tegra_se_alg tegra_hash_algs[] = { .halg.statesize = sizeof(struct tegra_sha_reqctx), .halg.base = { .cra_name = "sha1", .cra_driver_name = "tegra-se-sha1", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = SHA1_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_sha_ctx), .cra_alignmask = 0, .cra_module = THIS_MODULE, .cra_init = tegra_sha_cra_init, @@ -784,11 +784,11 @@ static struct tegra_se_alg tegra_hash_algs[] = { .halg.statesize = sizeof(struct tegra_sha_reqctx), .halg.base = { .cra_name = "sha224", .cra_driver_name = "tegra-se-sha224", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = SHA224_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_sha_ctx), .cra_alignmask = 0, .cra_module = THIS_MODULE, .cra_init = tegra_sha_cra_init, @@ -809,11 +809,11 @@ static struct tegra_se_alg tegra_hash_algs[] = { .halg.statesize = sizeof(struct tegra_sha_reqctx), .halg.base = { .cra_name = "sha256", .cra_driver_name = "tegra-se-sha256", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = SHA256_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_sha_ctx), .cra_alignmask = 0, .cra_module = THIS_MODULE, .cra_init = tegra_sha_cra_init, @@ -834,11 +834,11 @@ static struct tegra_se_alg tegra_hash_algs[] = { .halg.statesize = sizeof(struct tegra_sha_reqctx), .halg.base = { .cra_name = "sha384", .cra_driver_name = "tegra-se-sha384", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = SHA384_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_sha_ctx), .cra_alignmask = 0, .cra_module = THIS_MODULE, .cra_init = tegra_sha_cra_init, @@ -859,11 +859,11 @@ static struct tegra_se_alg tegra_hash_algs[] = { .halg.statesize = sizeof(struct tegra_sha_reqctx), .halg.base = { .cra_name = "sha512", .cra_driver_name = "tegra-se-sha512", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = SHA512_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_sha_ctx), .cra_alignmask = 0, .cra_module = THIS_MODULE, .cra_init = tegra_sha_cra_init, @@ -884,11 +884,11 @@ static struct tegra_se_alg tegra_hash_algs[] = { .halg.statesize = sizeof(struct tegra_sha_reqctx), .halg.base = { .cra_name = "sha3-224", .cra_driver_name = "tegra-se-sha3-224", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = SHA3_224_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_sha_ctx), .cra_alignmask = 0, .cra_module = THIS_MODULE, .cra_init = tegra_sha_cra_init, @@ -909,11 +909,11 @@ static struct tegra_se_alg tegra_hash_algs[] = { .halg.statesize = sizeof(struct tegra_sha_reqctx), .halg.base = { .cra_name = "sha3-256", .cra_driver_name = "tegra-se-sha3-256", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = SHA3_256_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_sha_ctx), .cra_alignmask = 0, .cra_module = THIS_MODULE, .cra_init = tegra_sha_cra_init, @@ -934,11 +934,11 @@ static struct tegra_se_alg tegra_hash_algs[] = { .halg.statesize = sizeof(struct tegra_sha_reqctx), .halg.base = { .cra_name = "sha3-384", .cra_driver_name = "tegra-se-sha3-384", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = SHA3_384_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_sha_ctx), .cra_alignmask = 0, .cra_module = THIS_MODULE, .cra_init = tegra_sha_cra_init, @@ -959,11 +959,11 @@ static struct tegra_se_alg tegra_hash_algs[] = { .halg.statesize = sizeof(struct tegra_sha_reqctx), .halg.base = { .cra_name = "sha3-512", .cra_driver_name = "tegra-se-sha3-512", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH, + .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = SHA3_512_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_sha_ctx), .cra_alignmask = 0, .cra_module = THIS_MODULE, .cra_init = tegra_sha_cra_init, @@ -986,11 +986,12 @@ static struct tegra_se_alg tegra_hash_algs[] = { .halg.statesize = sizeof(struct tegra_sha_reqctx), .halg.base = { .cra_name = "hmac(sha224)", .cra_driver_name = "tegra-se-hmac-sha224", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH | CRYPTO_ALG_NEED_FALLBACK, + .cra_flags = CRYPTO_ALG_ASYNC | + CRYPTO_ALG_NEED_FALLBACK, .cra_blocksize = SHA224_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_sha_ctx), .cra_alignmask = 0, .cra_module = THIS_MODULE, .cra_init = tegra_sha_cra_init, @@ -1013,11 +1014,12 @@ static struct tegra_se_alg tegra_hash_algs[] = { .halg.statesize = sizeof(struct tegra_sha_reqctx), .halg.base = { .cra_name = "hmac(sha256)", .cra_driver_name = "tegra-se-hmac-sha256", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH | CRYPTO_ALG_NEED_FALLBACK, + .cra_flags = CRYPTO_ALG_ASYNC | + CRYPTO_ALG_NEED_FALLBACK, .cra_blocksize = SHA256_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_sha_ctx), .cra_alignmask = 0, .cra_module = THIS_MODULE, .cra_init = tegra_sha_cra_init, @@ -1040,11 +1042,12 @@ static struct tegra_se_alg tegra_hash_algs[] = { .halg.statesize = sizeof(struct tegra_sha_reqctx), .halg.base = { .cra_name = "hmac(sha384)", .cra_driver_name = "tegra-se-hmac-sha384", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH | CRYPTO_ALG_NEED_FALLBACK, + .cra_flags = CRYPTO_ALG_ASYNC | + CRYPTO_ALG_NEED_FALLBACK, .cra_blocksize = SHA384_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_sha_ctx), .cra_alignmask = 0, .cra_module = THIS_MODULE, .cra_init = tegra_sha_cra_init, @@ -1067,11 +1070,12 @@ static struct tegra_se_alg tegra_hash_algs[] = { .halg.statesize = sizeof(struct tegra_sha_reqctx), .halg.base = { .cra_name = "hmac(sha512)", .cra_driver_name = "tegra-se-hmac-sha512", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_AHASH | CRYPTO_ALG_NEED_FALLBACK, + .cra_flags = CRYPTO_ALG_ASYNC | + CRYPTO_ALG_NEED_FALLBACK, .cra_blocksize = SHA512_BLOCK_SIZE, .cra_ctxsize = sizeof(struct tegra_sha_ctx), .cra_alignmask = 0, .cra_module = THIS_MODULE, .cra_init = tegra_sha_cra_init, base-commit: 5c52607c43c397b79a9852ce33fc61de58c3645c -- 2.53.0