Commit 1cd83fb7 authored by Mikulas Patocka's avatar Mikulas Patocka
Browse files

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: default avatarMikulas Patocka <mpatocka@redhat.com>
parent 5076d459
Loading
Loading
Loading
Loading
+24 −23
Original line number Diff line number Diff line
@@ -4354,46 +4354,47 @@ static int get_mac(struct crypto_shash **shash, struct crypto_ahash **ahash,
	int r;

	if (a->alg_string) {
		if (ahash) {
			*ahash = crypto_alloc_ahash(a->alg_string, 0, CRYPTO_ALG_ALLOCATES_MEMORY);
			if (IS_ERR(*ahash)) {
				*ahash = NULL;
				goto try_shash;
		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_ahash_setkey(*ahash, a->key, a->key_size);
				r = crypto_shash_setkey(*shash, a->key, a->key_size);
				if (r) {
					*error = error_key;
					return r;
				}
			} else if (crypto_ahash_get_flags(*ahash) & CRYPTO_TFM_NEED_KEY) {
			} else if (crypto_shash_get_flags(*shash) & CRYPTO_TFM_NEED_KEY) {
				*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)) {
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(*shash);
			*shash = NULL;
				r = PTR_ERR(*ahash);
				*ahash = NULL;
				return r;
			}

			if (a->key) {
			r = crypto_shash_setkey(*shash, a->key, a->key_size);
				r = crypto_ahash_setkey(*ahash, a->key, a->key_size);
				if (r) {
					*error = error_key;
					return r;
				}
		} else if (crypto_shash_get_flags(*shash) & CRYPTO_TFM_NEED_KEY) {
			} else if (crypto_ahash_get_flags(*ahash) & CRYPTO_TFM_NEED_KEY) {
				*error = error_key;
				return -ENOKEY;
			}
			return 0;
		}
		*error = error_alg;
		return -ENOENT;
	}

	return 0;