]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
dm-integrity: prefer synchronous hash interface
authorMikulas Patocka <mpatocka@redhat.com>
Wed, 17 Sep 2025 15:52:09 +0000 (17:52 +0200)
committerMikulas Patocka <mpatocka@redhat.com>
Tue, 23 Sep 2025 12:51:04 +0000 (14:51 +0200)
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 <mpatocka@redhat.com>
drivers/md/dm-integrity.c

index 567060fce8cf0c4b571f8cd6ac0ed9a31a6a85e4..7fc855659639ebd447b84b319ca78d070a6b28d5 100644 (file)
@@ -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;