From: Mikulas Patocka Date: Wed, 17 Sep 2025 15:52:09 +0000 (+0200) Subject: dm-integrity: prefer synchronous hash interface X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1cd83fb79083a2431f513956afca92b690ef11ad;p=thirdparty%2Fkernel%2Fstable.git dm-integrity: prefer synchronous hash interface The previous patch preferred async interface for the purpose of testing. However, the synchronous interface is faster, so it should be preferred. Signed-off-by: Mikulas Patocka --- diff --git a/drivers/md/dm-integrity.c b/drivers/md/dm-integrity.c index 567060fce8cf..7fc855659639 100644 --- a/drivers/md/dm-integrity.c +++ b/drivers/md/dm-integrity.c @@ -4354,13 +4354,33 @@ static int get_mac(struct crypto_shash **shash, struct crypto_ahash **ahash, int r; if (a->alg_string) { + if (shash) { + *shash = crypto_alloc_shash(a->alg_string, 0, CRYPTO_ALG_ALLOCATES_MEMORY); + if (IS_ERR(*shash)) { + *shash = NULL; + goto try_ahash; + } + if (a->key) { + r = crypto_shash_setkey(*shash, a->key, a->key_size); + if (r) { + *error = error_key; + return r; + } + } else if (crypto_shash_get_flags(*shash) & CRYPTO_TFM_NEED_KEY) { + *error = error_key; + return -ENOKEY; + } + return 0; + } +try_ahash: if (ahash) { *ahash = crypto_alloc_ahash(a->alg_string, 0, CRYPTO_ALG_ALLOCATES_MEMORY); if (IS_ERR(*ahash)) { + *error = error_alg; + r = PTR_ERR(*ahash); *ahash = NULL; - goto try_shash; + return r; } - if (a->key) { r = crypto_ahash_setkey(*ahash, a->key, a->key_size); if (r) { @@ -4371,29 +4391,10 @@ static int get_mac(struct crypto_shash **shash, struct crypto_ahash **ahash, *error = error_key; return -ENOKEY; } - return 0; } - -try_shash: - *shash = crypto_alloc_shash(a->alg_string, 0, CRYPTO_ALG_ALLOCATES_MEMORY); - if (IS_ERR(*shash)) { - *error = error_alg; - r = PTR_ERR(*shash); - *shash = NULL; - return r; - } - - if (a->key) { - r = crypto_shash_setkey(*shash, a->key, a->key_size); - if (r) { - *error = error_key; - return r; - } - } else if (crypto_shash_get_flags(*shash) & CRYPTO_TFM_NEED_KEY) { - *error = error_key; - return -ENOKEY; - } + *error = error_alg; + return -ENOENT; } return 0;