Blame SOURCES/0002-crypto-shash-remove-shash_desc-flags.patch

Kmods SIG 1bd144
From 877b5691f27a1aec0d9b53095a323e45c30069e2 Mon Sep 17 00:00:00 2001
Kmods SIG 1bd144
From: Eric Biggers <ebiggers@google.com>
Kmods SIG 1bd144
Date: Sun, 14 Apr 2019 17:37:09 -0700
Kmods SIG 1bd144
Subject: [Backport 877b5691f27a] crypto: shash - remove shash_desc::flags
Kmods SIG 1bd144
Kmods SIG 1bd144
The flags field in 'struct shash_desc' never actually does anything.
Kmods SIG 1bd144
The only ostensibly supported flag is CRYPTO_TFM_REQ_MAY_SLEEP.
Kmods SIG 1bd144
However, no shash algorithm ever sleeps, making this flag a no-op.
Kmods SIG 1bd144
Kmods SIG 1bd144
With this being the case, inevitably some users who can't sleep wrongly
Kmods SIG 1bd144
pass MAY_SLEEP.  These would all need to be fixed if any shash algorithm
Kmods SIG 1bd144
actually started sleeping.  For example, the shash_ahash_*() functions,
Kmods SIG 1bd144
which wrap a shash algorithm with the ahash API, pass through MAY_SLEEP
Kmods SIG 1bd144
from the ahash API to the shash API.  However, the shash functions are
Kmods SIG 1bd144
called under kmap_atomic(), so actually they're assumed to never sleep.
Kmods SIG 1bd144
Kmods SIG 1bd144
Even if it turns out that some users do need preemption points while
Kmods SIG 1bd144
hashing large buffers, we could easily provide a helper function
Kmods SIG 1bd144
crypto_shash_update_large() which divides the data into smaller chunks
Kmods SIG 1bd144
and calls crypto_shash_update() and cond_resched() for each chunk.  It's
Kmods SIG 1bd144
not necessary to have a flag in 'struct shash_desc', nor is it necessary
Kmods SIG 1bd144
to make individual shash algorithms aware of this at all.
Kmods SIG 1bd144
Kmods SIG 1bd144
Therefore, remove shash_desc::flags, and document that the
Kmods SIG 1bd144
crypto_shash_*() functions can be called from any context.
Kmods SIG 1bd144
Kmods SIG 1bd144
Signed-off-by: Eric Biggers <ebiggers@google.com>
Kmods SIG 1bd144
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Kmods SIG 1bd144
---
Kmods SIG 1bd144
 src/crypto.c   | 1 -
Kmods SIG 1bd144
 src/keystore.c | 1 -
Kmods SIG 1bd144
 2 files changed, 2 deletions(-)
Kmods SIG 1bd144
Kmods SIG 1bd144
diff --git a/src/crypto.c b/src/crypto.c
Kmods SIG 1bd144
index f664da55234e93b18194237e9995a16c70f1334d..491cf5baa8c23b5f97254f4d5cb43d32e3339f8f 100644
Kmods SIG 1bd144
--- a/src/crypto.c
Kmods SIG 1bd144
+++ b/src/crypto.c
Kmods SIG 1bd144
@@ -68,7 +68,6 @@ static int ecryptfs_hash_digest(struct crypto_shash *tfm,
Kmods SIG 1bd144
 	int err;
Kmods SIG 1bd144
 
Kmods SIG 1bd144
 	desc->tfm = tfm;
Kmods SIG 1bd144
-	desc->flags = CRYPTO_TFM_REQ_MAY_SLEEP;
Kmods SIG 1bd144
 	err = crypto_shash_digest(desc, src, len, dst);
Kmods SIG 1bd144
 	shash_desc_zero(desc);
Kmods SIG 1bd144
 	return err;
Kmods SIG 1bd144
diff --git a/src/keystore.c b/src/keystore.c
Kmods SIG 1bd144
index e74fe84d0886879c04cc26297f0e8b27db8281a6..90fbac5d485b3a79728f342e81e2bcdaa8b0e552 100644
Kmods SIG 1bd144
--- a/src/keystore.c
Kmods SIG 1bd144
+++ b/src/keystore.c
Kmods SIG 1bd144
@@ -769,7 +769,6 @@ ecryptfs_write_tag_70_packet(char *dest, size_t *remaining_bytes,
Kmods SIG 1bd144
 	}
Kmods SIG 1bd144
 
Kmods SIG 1bd144
 	s->hash_desc->tfm = s->hash_tfm;
Kmods SIG 1bd144
-	s->hash_desc->flags = CRYPTO_TFM_REQ_MAY_SLEEP;
Kmods SIG 1bd144
 
Kmods SIG 1bd144
 	rc = crypto_shash_digest(s->hash_desc,
Kmods SIG 1bd144
 				 (u8 *)s->auth_tok->token.password.session_key_encryption_key,
Kmods SIG 1bd144
-- 
Kmods SIG 1bd144
2.31.1
Kmods SIG 1bd144