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

crypto: tegra - Add missing CRYPTO_ALG_ASYNC

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 <zlang@redhat.com>
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 <akhilrajeev@nvidia.com>
Signed-off-by: Eric Biggers <ebiggers@kernel.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

authored by

Eric Biggers and committed by
Herbert Xu
4b56770d 5c52607c

+24 -17
+7 -4
drivers/crypto/tegra/tegra-se-aes.c
··· 529 529 .cra_name = "cbc(aes)", 530 530 .cra_driver_name = "cbc-aes-tegra", 531 531 .cra_priority = 500, 532 - .cra_flags = CRYPTO_ALG_TYPE_SKCIPHER | CRYPTO_ALG_ASYNC, 532 + .cra_flags = CRYPTO_ALG_ASYNC, 533 533 .cra_blocksize = AES_BLOCK_SIZE, 534 534 .cra_ctxsize = sizeof(struct tegra_aes_ctx), 535 535 .cra_alignmask = 0xf, ··· 550 550 .cra_name = "ecb(aes)", 551 551 .cra_driver_name = "ecb-aes-tegra", 552 552 .cra_priority = 500, 553 - .cra_flags = CRYPTO_ALG_TYPE_SKCIPHER | CRYPTO_ALG_ASYNC, 553 + .cra_flags = CRYPTO_ALG_ASYNC, 554 554 .cra_blocksize = AES_BLOCK_SIZE, 555 555 .cra_ctxsize = sizeof(struct tegra_aes_ctx), 556 556 .cra_alignmask = 0xf, ··· 572 572 .cra_name = "ctr(aes)", 573 573 .cra_driver_name = "ctr-aes-tegra", 574 574 .cra_priority = 500, 575 - .cra_flags = CRYPTO_ALG_TYPE_SKCIPHER | CRYPTO_ALG_ASYNC, 575 + .cra_flags = CRYPTO_ALG_ASYNC, 576 576 .cra_blocksize = 1, 577 577 .cra_ctxsize = sizeof(struct tegra_aes_ctx), 578 578 .cra_alignmask = 0xf, ··· 594 594 .cra_name = "xts(aes)", 595 595 .cra_driver_name = "xts-aes-tegra", 596 596 .cra_priority = 500, 597 + .cra_flags = CRYPTO_ALG_ASYNC, 597 598 .cra_blocksize = AES_BLOCK_SIZE, 598 599 .cra_ctxsize = sizeof(struct tegra_aes_ctx), 599 600 .cra_alignmask = (__alignof__(u64) - 1), ··· 1923 1922 .cra_name = "gcm(aes)", 1924 1923 .cra_driver_name = "gcm-aes-tegra", 1925 1924 .cra_priority = 500, 1925 + .cra_flags = CRYPTO_ALG_ASYNC, 1926 1926 .cra_blocksize = 1, 1927 1927 .cra_ctxsize = sizeof(struct tegra_aead_ctx), 1928 1928 .cra_alignmask = 0xf, ··· 1946 1944 .cra_name = "ccm(aes)", 1947 1945 .cra_driver_name = "ccm-aes-tegra", 1948 1946 .cra_priority = 500, 1947 + .cra_flags = CRYPTO_ALG_ASYNC, 1949 1948 .cra_blocksize = 1, 1950 1949 .cra_ctxsize = sizeof(struct tegra_aead_ctx), 1951 1950 .cra_alignmask = 0xf, ··· 1974 1971 .cra_name = "cmac(aes)", 1975 1972 .cra_driver_name = "tegra-se-cmac", 1976 1973 .cra_priority = 300, 1977 - .cra_flags = CRYPTO_ALG_TYPE_AHASH, 1974 + .cra_flags = CRYPTO_ALG_ASYNC, 1978 1975 .cra_blocksize = AES_BLOCK_SIZE, 1979 1976 .cra_ctxsize = sizeof(struct tegra_cmac_ctx), 1980 1977 .cra_alignmask = 0,
+17 -13
drivers/crypto/tegra/tegra-se-hash.c
··· 761 761 .cra_name = "sha1", 762 762 .cra_driver_name = "tegra-se-sha1", 763 763 .cra_priority = 300, 764 - .cra_flags = CRYPTO_ALG_TYPE_AHASH, 764 + .cra_flags = CRYPTO_ALG_ASYNC, 765 765 .cra_blocksize = SHA1_BLOCK_SIZE, 766 766 .cra_ctxsize = sizeof(struct tegra_sha_ctx), 767 767 .cra_alignmask = 0, ··· 786 786 .cra_name = "sha224", 787 787 .cra_driver_name = "tegra-se-sha224", 788 788 .cra_priority = 300, 789 - .cra_flags = CRYPTO_ALG_TYPE_AHASH, 789 + .cra_flags = CRYPTO_ALG_ASYNC, 790 790 .cra_blocksize = SHA224_BLOCK_SIZE, 791 791 .cra_ctxsize = sizeof(struct tegra_sha_ctx), 792 792 .cra_alignmask = 0, ··· 811 811 .cra_name = "sha256", 812 812 .cra_driver_name = "tegra-se-sha256", 813 813 .cra_priority = 300, 814 - .cra_flags = CRYPTO_ALG_TYPE_AHASH, 814 + .cra_flags = CRYPTO_ALG_ASYNC, 815 815 .cra_blocksize = SHA256_BLOCK_SIZE, 816 816 .cra_ctxsize = sizeof(struct tegra_sha_ctx), 817 817 .cra_alignmask = 0, ··· 836 836 .cra_name = "sha384", 837 837 .cra_driver_name = "tegra-se-sha384", 838 838 .cra_priority = 300, 839 - .cra_flags = CRYPTO_ALG_TYPE_AHASH, 839 + .cra_flags = CRYPTO_ALG_ASYNC, 840 840 .cra_blocksize = SHA384_BLOCK_SIZE, 841 841 .cra_ctxsize = sizeof(struct tegra_sha_ctx), 842 842 .cra_alignmask = 0, ··· 861 861 .cra_name = "sha512", 862 862 .cra_driver_name = "tegra-se-sha512", 863 863 .cra_priority = 300, 864 - .cra_flags = CRYPTO_ALG_TYPE_AHASH, 864 + .cra_flags = CRYPTO_ALG_ASYNC, 865 865 .cra_blocksize = SHA512_BLOCK_SIZE, 866 866 .cra_ctxsize = sizeof(struct tegra_sha_ctx), 867 867 .cra_alignmask = 0, ··· 886 886 .cra_name = "sha3-224", 887 887 .cra_driver_name = "tegra-se-sha3-224", 888 888 .cra_priority = 300, 889 - .cra_flags = CRYPTO_ALG_TYPE_AHASH, 889 + .cra_flags = CRYPTO_ALG_ASYNC, 890 890 .cra_blocksize = SHA3_224_BLOCK_SIZE, 891 891 .cra_ctxsize = sizeof(struct tegra_sha_ctx), 892 892 .cra_alignmask = 0, ··· 911 911 .cra_name = "sha3-256", 912 912 .cra_driver_name = "tegra-se-sha3-256", 913 913 .cra_priority = 300, 914 - .cra_flags = CRYPTO_ALG_TYPE_AHASH, 914 + .cra_flags = CRYPTO_ALG_ASYNC, 915 915 .cra_blocksize = SHA3_256_BLOCK_SIZE, 916 916 .cra_ctxsize = sizeof(struct tegra_sha_ctx), 917 917 .cra_alignmask = 0, ··· 936 936 .cra_name = "sha3-384", 937 937 .cra_driver_name = "tegra-se-sha3-384", 938 938 .cra_priority = 300, 939 - .cra_flags = CRYPTO_ALG_TYPE_AHASH, 939 + .cra_flags = CRYPTO_ALG_ASYNC, 940 940 .cra_blocksize = SHA3_384_BLOCK_SIZE, 941 941 .cra_ctxsize = sizeof(struct tegra_sha_ctx), 942 942 .cra_alignmask = 0, ··· 961 961 .cra_name = "sha3-512", 962 962 .cra_driver_name = "tegra-se-sha3-512", 963 963 .cra_priority = 300, 964 - .cra_flags = CRYPTO_ALG_TYPE_AHASH, 964 + .cra_flags = CRYPTO_ALG_ASYNC, 965 965 .cra_blocksize = SHA3_512_BLOCK_SIZE, 966 966 .cra_ctxsize = sizeof(struct tegra_sha_ctx), 967 967 .cra_alignmask = 0, ··· 988 988 .cra_name = "hmac(sha224)", 989 989 .cra_driver_name = "tegra-se-hmac-sha224", 990 990 .cra_priority = 300, 991 - .cra_flags = CRYPTO_ALG_TYPE_AHASH | CRYPTO_ALG_NEED_FALLBACK, 991 + .cra_flags = CRYPTO_ALG_ASYNC | 992 + CRYPTO_ALG_NEED_FALLBACK, 992 993 .cra_blocksize = SHA224_BLOCK_SIZE, 993 994 .cra_ctxsize = sizeof(struct tegra_sha_ctx), 994 995 .cra_alignmask = 0, ··· 1016 1015 .cra_name = "hmac(sha256)", 1017 1016 .cra_driver_name = "tegra-se-hmac-sha256", 1018 1017 .cra_priority = 300, 1019 - .cra_flags = CRYPTO_ALG_TYPE_AHASH | CRYPTO_ALG_NEED_FALLBACK, 1018 + .cra_flags = CRYPTO_ALG_ASYNC | 1019 + CRYPTO_ALG_NEED_FALLBACK, 1020 1020 .cra_blocksize = SHA256_BLOCK_SIZE, 1021 1021 .cra_ctxsize = sizeof(struct tegra_sha_ctx), 1022 1022 .cra_alignmask = 0, ··· 1044 1042 .cra_name = "hmac(sha384)", 1045 1043 .cra_driver_name = "tegra-se-hmac-sha384", 1046 1044 .cra_priority = 300, 1047 - .cra_flags = CRYPTO_ALG_TYPE_AHASH | CRYPTO_ALG_NEED_FALLBACK, 1045 + .cra_flags = CRYPTO_ALG_ASYNC | 1046 + CRYPTO_ALG_NEED_FALLBACK, 1048 1047 .cra_blocksize = SHA384_BLOCK_SIZE, 1049 1048 .cra_ctxsize = sizeof(struct tegra_sha_ctx), 1050 1049 .cra_alignmask = 0, ··· 1072 1069 .cra_name = "hmac(sha512)", 1073 1070 .cra_driver_name = "tegra-se-hmac-sha512", 1074 1071 .cra_priority = 300, 1075 - .cra_flags = CRYPTO_ALG_TYPE_AHASH | CRYPTO_ALG_NEED_FALLBACK, 1072 + .cra_flags = CRYPTO_ALG_ASYNC | 1073 + CRYPTO_ALG_NEED_FALLBACK, 1076 1074 .cra_blocksize = SHA512_BLOCK_SIZE, 1077 1075 .cra_ctxsize = sizeof(struct tegra_sha_ctx), 1078 1076 .cra_alignmask = 0,