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

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