From: "Herbert Xu" <herbert@gondor.apana.org.au>
To: Linus Walleij <linus.walleij@linaro.org>,
Lionel Debieve <lionel.debieve@foss.st.com>,
Li kunyu <kunyu@nfschina.com>,
davem@davemloft.net, linux-arm-kernel@lists.infradead.org,
linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-stm32@st-md-mailman.stormreply.com,
mcoquelin.stm32@gmail.com
Subject: [v7 PATCH 7/8] crypto: stm32 - Fix empty message processing
Date: Sat, 11 Mar 2023 17:09:23 +0800 [thread overview]
Message-ID: <E1pavEB-002xbR-I9@formenos.hmeau.com> (raw)
In-Reply-To: ZAxFBR3TdA7jUAgJ@gondor.apana.org.au
Change the emptymsg check in stm32_hash_copy_hash to rely on whether
we have any existing hash state, rather than whether this particular
update request is empty.
Also avoid computing the hash for empty messages as this could hang.
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
---
drivers/crypto/stm32/stm32-hash.c | 22 +++++++++++++---------
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/drivers/crypto/stm32/stm32-hash.c b/drivers/crypto/stm32/stm32-hash.c
index 478822fc7a4e..f898ec62b459 100644
--- a/drivers/crypto/stm32/stm32-hash.c
+++ b/drivers/crypto/stm32/stm32-hash.c
@@ -95,6 +95,7 @@
#define HASH_FLAGS_SHA1 BIT(19)
#define HASH_FLAGS_SHA224 BIT(20)
#define HASH_FLAGS_SHA256 BIT(21)
+#define HASH_FLAGS_EMPTY BIT(22)
#define HASH_FLAGS_HMAC BIT(23)
#define HASH_OP_UPDATE 1
@@ -310,13 +311,6 @@ static void stm32_hash_write_ctrl(struct stm32_hash_dev *hdev, int bufcnt)
reg |= HASH_CR_LKEY;
}
- /*
- * On the Ux500 we need to set a special flag to indicate that
- * the message is zero length.
- */
- if (hdev->pdata->ux500 && bufcnt == 0)
- reg |= HASH_CR_UX500_EMPTYMSG;
-
if (!hdev->polled)
stm32_hash_write(hdev, HASH_IMR, HASH_DCIE);
@@ -366,13 +360,23 @@ static void stm32_hash_append_sg(struct stm32_hash_request_ctx *rctx)
static int stm32_hash_xmit_cpu(struct stm32_hash_dev *hdev,
const u8 *buf, size_t length, int final)
{
+ struct stm32_hash_request_ctx *rctx = ahash_request_ctx(hdev->req);
+ struct stm32_hash_state *state = &rctx->state;
unsigned int count, len32;
const u32 *buffer = (const u32 *)buf;
u32 reg;
- if (final)
+ if (final) {
hdev->flags |= HASH_FLAGS_FINAL;
+ /* Do not process empty messages if hw is buggy. */
+ if (!(hdev->flags & HASH_FLAGS_INIT) && !length &&
+ hdev->pdata->broken_emptymsg) {
+ state->flags |= HASH_FLAGS_EMPTY;
+ return 0;
+ }
+ }
+
len32 = DIV_ROUND_UP(length, sizeof(u32));
dev_dbg(hdev->dev, "%s: length: %zd, final: %x len32 %i\n",
@@ -827,7 +831,7 @@ static void stm32_hash_copy_hash(struct ahash_request *req)
__be32 *hash = (void *)rctx->digest;
unsigned int i, hashsize;
- if (hdev->pdata->broken_emptymsg && !req->nbytes)
+ if (hdev->pdata->broken_emptymsg && (state->flags & HASH_FLAGS_EMPTY))
return stm32_hash_emptymsg_fallback(req);
switch (state->flags & HASH_FLAGS_ALGO_MASK) {
next prev parent reply other threads:[~2023-03-11 9:42 UTC|newest]
Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-24 21:50 [PATCH] stm32: stm32-hash: Add kmalloc_array allocation check Li kunyu
2023-02-23 6:00 ` Herbert Xu
2023-02-24 23:14 ` Li kunyu
2023-02-23 9:33 ` Herbert Xu
2023-02-23 9:52 ` Linus Walleij
2023-02-23 10:10 ` [PATCH] crypto: stm32 - Save and restore between each request Herbert Xu
2023-02-24 5:51 ` [v2 PATCH] " Herbert Xu
2023-02-25 0:01 ` Linus Walleij
2023-02-25 2:26 ` Li kunyu
2023-02-25 23:15 ` Linus Walleij
2023-02-27 10:39 ` [v3 " Herbert Xu
2023-02-27 21:17 ` Linus Walleij
2023-02-27 21:28 ` Linus Walleij
2023-02-28 8:58 ` Herbert Xu
2023-02-28 9:12 ` Herbert Xu
2023-02-28 9:23 ` Herbert Xu
2023-02-28 9:48 ` [v4 " Herbert Xu
2023-02-28 20:50 ` Linus Walleij
2023-03-01 1:30 ` Herbert Xu
2023-03-01 1:36 ` Herbert Xu
2023-03-01 1:46 ` Herbert Xu
2023-03-01 12:22 ` Linus Walleij
2023-03-02 1:16 ` Herbert Xu
2023-03-02 6:04 ` Herbert Xu
2023-03-04 9:34 ` [v5 PATCH 0/7] " Herbert Xu
2023-03-04 9:37 ` [v5 PATCH 1/7] crypto: stm32 - Save 54 CSR registers Herbert Xu
2023-03-05 21:48 ` Linus Walleij
2023-03-04 9:37 ` [v5 PATCH 2/7] crypto: stm32 - Move polling into do_one_request Herbert Xu
2023-03-05 21:51 ` Linus Walleij
2023-03-04 9:37 ` [v5 PATCH 3/7] crypto: stm32 - Simplify finup Herbert Xu
2023-03-05 22:08 ` Linus Walleij
2023-03-06 4:37 ` Herbert Xu
2023-03-04 9:37 ` [v5 PATCH 4/7] crypto: stm32 - Remove unused hdev->err field Herbert Xu
2023-03-05 22:11 ` Linus Walleij
2023-03-04 9:37 ` [v5 PATCH 5/7] crypto: stm32 - Move hash state into separate structure Herbert Xu
2023-03-04 9:37 ` [v5 PATCH 6/7] crypto: stm32 - Remove unused HASH_FLAGS_ERRORS Herbert Xu
2023-03-04 9:37 ` [v5 PATCH 7/7] crypto: stm32 - Save and restore between each request Herbert Xu
2023-03-06 4:41 ` [v6 PATCH 0/7] " Herbert Xu
2023-03-06 4:41 ` [v5 PATCH 1/7] crypto: stm32 - Save 54 CSR registers Herbert Xu
2023-03-06 4:42 ` [v5 PATCH 2/7] crypto: stm32 - Move polling into do_one_request Herbert Xu
2023-03-06 4:42 ` [v5 PATCH 3/7] crypto: stm32 - Simplify finup Herbert Xu
2023-03-06 8:28 ` Linus Walleij
2023-03-06 4:42 ` [v5 PATCH 4/7] crypto: stm32 - Remove unused hdev->err field Herbert Xu
2023-03-06 4:42 ` [v5 PATCH 5/7] crypto: stm32 - Move hash state into separate structure Herbert Xu
2023-03-06 9:59 ` Linus Walleij
2023-03-06 4:42 ` [v5 PATCH 6/7] crypto: stm32 - Remove unused HASH_FLAGS_ERRORS Herbert Xu
2023-03-06 10:01 ` Linus Walleij
2023-03-06 4:42 ` [v5 PATCH 7/7] crypto: stm32 - Save and restore between each request Herbert Xu
2023-03-06 10:08 ` Linus Walleij
2023-03-07 10:10 ` Herbert Xu
2023-03-07 15:31 ` Linus Walleij
2023-03-08 3:23 ` Herbert Xu
2023-03-08 3:40 ` Herbert Xu
2023-03-08 3:52 ` Herbert Xu
2023-03-08 9:05 ` Linus Walleij
2023-03-08 9:13 ` Herbert Xu
2023-03-08 10:10 ` Herbert Xu
2023-03-08 10:19 ` Herbert Xu
2023-03-08 21:19 ` Linus Walleij
2023-03-09 5:58 ` Herbert Xu
2023-03-09 7:35 ` Linus Walleij
2023-03-09 9:59 ` Herbert Xu
2023-03-09 22:19 ` David Laight
2023-03-10 8:07 ` Linus Walleij
2023-03-07 13:55 ` [v6 PATCH 0/7] " lionel.debieve
2023-03-08 3:46 ` Herbert Xu
2023-03-11 9:08 ` [v7 PATCH 0/8] " Herbert Xu
2023-03-11 9:09 ` [v7 PATCH 1/8] crypto: stm32 - Save 54 CSR registers Herbert Xu
2023-03-11 9:09 ` [v7 PATCH 2/8] crypto: stm32 - Move polling into do_one_request Herbert Xu
2023-03-11 9:09 ` [v7 PATCH 3/8] crypto: stm32 - Simplify finup Herbert Xu
2023-03-11 9:09 ` [v7 PATCH 4/8] crypto: stm32 - Remove unused hdev->err field Herbert Xu
2023-03-11 9:09 ` [v7 PATCH 5/8] crypto: stm32 - Move hash state into separate structure Herbert Xu
2023-03-11 9:09 ` [v7 PATCH 6/8] crypto: stm32 - Remove unused HASH_FLAGS_ERRORS Herbert Xu
2023-03-11 9:09 ` Herbert Xu [this message]
2023-03-11 21:44 ` [v7 PATCH 7/8] crypto: stm32 - Fix empty message processing Linus Walleij
2023-03-11 9:09 ` [v7 PATCH 8/8] crypto: stm32 - Save and restore between each request Herbert Xu
2023-03-11 21:45 ` Linus Walleij
[not found] ` <e7cd1e8b-9ebc-ff6d-a8c4-1ccd11df6de1@foss.st.com>
2023-03-28 3:58 ` [Linux-stm32] " Herbert Xu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=E1pavEB-002xbR-I9@formenos.hmeau.com \
--to=herbert@gondor.apana.org.au \
--cc=davem@davemloft.net \
--cc=kunyu@nfschina.com \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-stm32@st-md-mailman.stormreply.com \
--cc=lionel.debieve@foss.st.com \
--cc=mcoquelin.stm32@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).