From: Eric Biggers <ebiggers@kernel.org>
To: linux-crypto@vger.kernel.org
Subject: [PATCH 01/29] crypto: skcipher - document skcipher_walk_done() and rename some vars
Date: Sat, 21 Dec 2024 01:10:28 -0800 [thread overview]
Message-ID: <20241221091056.282098-2-ebiggers@kernel.org> (raw)
In-Reply-To: <20241221091056.282098-1-ebiggers@kernel.org>
From: Eric Biggers <ebiggers@google.com>
skcipher_walk_done() has an unusual calling convention, and some of its
local variables have unclear names. Document it and rename variables to
make it a bit clearer what is going on. No change in behavior.
Signed-off-by: Eric Biggers <ebiggers@google.com>
---
crypto/skcipher.c | 50 ++++++++++++++++++++----------
include/crypto/internal/skcipher.h | 2 +-
2 files changed, 35 insertions(+), 17 deletions(-)
diff --git a/crypto/skcipher.c b/crypto/skcipher.c
index d5fe0eca3826..8749c44f98a2 100644
--- a/crypto/skcipher.c
+++ b/crypto/skcipher.c
@@ -87,21 +87,39 @@ static int skcipher_done_slow(struct skcipher_walk *walk, unsigned int bsize)
addr = skcipher_get_spot(addr, bsize);
scatterwalk_copychunks(addr, &walk->out, bsize, 1);
return 0;
}
-int skcipher_walk_done(struct skcipher_walk *walk, int err)
+/**
+ * skcipher_walk_done() - finish one step of a skcipher_walk
+ * @walk: the skcipher_walk
+ * @res: number of bytes *not* processed (>= 0) from walk->nbytes,
+ * or a -errno value to terminate the walk due to an error
+ *
+ * This function cleans up after one step of walking through the source and
+ * destination scatterlists, and advances to the next step if applicable.
+ * walk->nbytes is set to the number of bytes available in the next step,
+ * walk->total is set to the new total number of bytes remaining, and
+ * walk->{src,dst}.virt.addr is set to the next pair of data pointers. If there
+ * is no more data, or if an error occurred (i.e. -errno return), then
+ * walk->nbytes and walk->total are set to 0 and all resources owned by the
+ * skcipher_walk are freed.
+ *
+ * Return: 0 or a -errno value. If @res was a -errno value then it will be
+ * returned, but other errors may occur too.
+ */
+int skcipher_walk_done(struct skcipher_walk *walk, int res)
{
- unsigned int n = walk->nbytes;
- unsigned int nbytes = 0;
+ unsigned int n = walk->nbytes; /* num bytes processed this step */
+ unsigned int total = 0; /* new total remaining */
if (!n)
goto finish;
- if (likely(err >= 0)) {
- n -= err;
- nbytes = walk->total - n;
+ if (likely(res >= 0)) {
+ n -= res; /* subtract num bytes *not* processed */
+ total = walk->total - n;
}
if (likely(!(walk->flags & (SKCIPHER_WALK_SLOW |
SKCIPHER_WALK_COPY |
SKCIPHER_WALK_DIFF)))) {
@@ -113,35 +131,35 @@ int skcipher_walk_done(struct skcipher_walk *walk, int err)
} else if (walk->flags & SKCIPHER_WALK_COPY) {
skcipher_map_dst(walk);
memcpy(walk->dst.virt.addr, walk->page, n);
skcipher_unmap_dst(walk);
} else if (unlikely(walk->flags & SKCIPHER_WALK_SLOW)) {
- if (err > 0) {
+ if (res > 0) {
/*
* Didn't process all bytes. Either the algorithm is
* broken, or this was the last step and it turned out
* the message wasn't evenly divisible into blocks but
* the algorithm requires it.
*/
- err = -EINVAL;
- nbytes = 0;
+ res = -EINVAL;
+ total = 0;
} else
n = skcipher_done_slow(walk, n);
}
- if (err > 0)
- err = 0;
+ if (res > 0)
+ res = 0;
- walk->total = nbytes;
+ walk->total = total;
walk->nbytes = 0;
scatterwalk_advance(&walk->in, n);
scatterwalk_advance(&walk->out, n);
- scatterwalk_done(&walk->in, 0, nbytes);
- scatterwalk_done(&walk->out, 1, nbytes);
+ scatterwalk_done(&walk->in, 0, total);
+ scatterwalk_done(&walk->out, 1, total);
- if (nbytes) {
+ if (total) {
crypto_yield(walk->flags & SKCIPHER_WALK_SLEEP ?
CRYPTO_TFM_REQ_MAY_SLEEP : 0);
return skcipher_walk_next(walk);
}
@@ -156,11 +174,11 @@ int skcipher_walk_done(struct skcipher_walk *walk, int err)
kfree(walk->buffer);
if (walk->page)
free_page((unsigned long)walk->page);
out:
- return err;
+ return res;
}
EXPORT_SYMBOL_GPL(skcipher_walk_done);
static int skcipher_next_slow(struct skcipher_walk *walk, unsigned int bsize)
{
diff --git a/include/crypto/internal/skcipher.h b/include/crypto/internal/skcipher.h
index 08d1e8c63afc..4f49621d3eb6 100644
--- a/include/crypto/internal/skcipher.h
+++ b/include/crypto/internal/skcipher.h
@@ -194,11 +194,11 @@ void crypto_unregister_lskcipher(struct lskcipher_alg *alg);
int crypto_register_lskciphers(struct lskcipher_alg *algs, int count);
void crypto_unregister_lskciphers(struct lskcipher_alg *algs, int count);
int lskcipher_register_instance(struct crypto_template *tmpl,
struct lskcipher_instance *inst);
-int skcipher_walk_done(struct skcipher_walk *walk, int err);
+int skcipher_walk_done(struct skcipher_walk *walk, int res);
int skcipher_walk_virt(struct skcipher_walk *walk,
struct skcipher_request *req,
bool atomic);
int skcipher_walk_aead_encrypt(struct skcipher_walk *walk,
struct aead_request *req, bool atomic);
--
2.47.1
next prev parent reply other threads:[~2024-12-21 9:11 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-21 9:10 [PATCH 00/29] crypto: scatterlist handling improvements Eric Biggers
2024-12-21 9:10 ` Eric Biggers [this message]
2024-12-21 9:10 ` [PATCH 02/29] crypto: skcipher - remove unnecessary page alignment of bounce buffer Eric Biggers
2024-12-21 9:10 ` [PATCH 03/29] crypto: skcipher - remove redundant clamping to page size Eric Biggers
2024-12-21 9:10 ` [PATCH 04/29] crypto: skcipher - remove redundant check for SKCIPHER_WALK_SLOW Eric Biggers
2024-12-21 9:10 ` [PATCH 05/29] crypto: skcipher - fold skcipher_walk_skcipher() into skcipher_walk_virt() Eric Biggers
2024-12-21 9:10 ` [PATCH 06/29] crypto: skcipher - clean up initialization of skcipher_walk::flags Eric Biggers
2024-12-21 9:10 ` [PATCH 07/29] crypto: skcipher - optimize initializing skcipher_walk fields Eric Biggers
2024-12-21 11:16 ` Herbert Xu
2024-12-29 22:10 ` Eric Biggers
2025-01-02 1:03 ` Herbert Xu
2024-12-21 9:10 ` [PATCH 08/29] crypto: skcipher - call cond_resched() directly Eric Biggers
2024-12-21 9:10 ` [PATCH 09/29] crypto: omap - switch from scatter_walk to plain offset Eric Biggers
2024-12-21 9:10 ` [PATCH 10/29] crypto: powerpc/p10-aes-gcm - simplify handling of linear associated data Eric Biggers
2024-12-21 9:10 ` [PATCH 11/29] crypto: scatterwalk - move to next sg entry just in time Eric Biggers
2024-12-21 9:10 ` [PATCH 12/29] crypto: scatterwalk - add new functions for skipping data Eric Biggers
2024-12-21 9:10 ` [PATCH 13/29] crypto: scatterwalk - add new functions for iterating through data Eric Biggers
2024-12-21 11:27 ` Herbert Xu
2024-12-23 19:53 ` Eric Biggers
2024-12-21 9:10 ` [PATCH 14/29] crypto: scatterwalk - add new functions for copying data Eric Biggers
2024-12-21 9:10 ` [PATCH 15/29] crypto: skcipher - use scatterwalk_start_at_pos() Eric Biggers
2024-12-21 9:10 ` [PATCH 16/29] crypto: aegis - use the new scatterwalk functions Eric Biggers
2024-12-21 9:10 ` [PATCH 17/29] crypto: arm/ghash " Eric Biggers
2024-12-21 9:10 ` [PATCH 18/29] crypto: arm64 " Eric Biggers
2024-12-21 9:10 ` [PATCH 19/29] crypto: keywrap " Eric Biggers
2024-12-21 9:10 ` [PATCH 20/29] crypto: nx " Eric Biggers
2024-12-21 9:10 ` [PATCH 21/29] crypto: s390/aes-gcm " Eric Biggers
2024-12-21 9:10 ` [PATCH 22/29] crypto: s5p-sss " Eric Biggers
2024-12-21 9:10 ` [PATCH 23/29] crypto: stm32 " Eric Biggers
2024-12-21 9:10 ` [PATCH 24/29] crypto: x86/aes-gcm " Eric Biggers
2024-12-21 9:10 ` [PATCH 25/29] crypto: x86/aegis " Eric Biggers
2024-12-21 9:10 ` [PATCH 26/29] net/tls: " Eric Biggers
2024-12-23 15:48 ` Jakub Kicinski
2024-12-23 19:42 ` Eric Biggers
2024-12-23 20:44 ` Jakub Kicinski
2024-12-29 23:58 ` Eric Biggers
2024-12-21 9:10 ` [PATCH 27/29] crypto: skcipher - " Eric Biggers
2024-12-21 9:10 ` [PATCH 28/29] crypto: scatterwalk - remove obsolete functions Eric Biggers
2024-12-21 9:10 ` [PATCH 29/29] crypto: scatterwalk - don't split at page boundaries when !HIGHMEM Eric Biggers
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=20241221091056.282098-2-ebiggers@kernel.org \
--to=ebiggers@kernel.org \
--cc=linux-crypto@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.