]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
crypto: arm64 - use the new scatterwalk functions
authorEric Biggers <ebiggers@google.com>
Wed, 19 Feb 2025 18:23:31 +0000 (10:23 -0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Sun, 2 Mar 2025 07:19:43 +0000 (15:19 +0800)
Use scatterwalk_next() which consolidates scatterwalk_clamp() and
scatterwalk_map(), and use scatterwalk_done_src() which consolidates
scatterwalk_unmap(), scatterwalk_advance(), and scatterwalk_done().
Remove unnecessary code that seemed to be intended to advance to the
next sg entry, which is already handled by the scatterwalk functions.
Adjust variable naming slightly to keep things consistent.

Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
arch/arm64/crypto/aes-ce-ccm-glue.c
arch/arm64/crypto/ghash-ce-glue.c
arch/arm64/crypto/sm4-ce-ccm-glue.c
arch/arm64/crypto/sm4-ce-gcm-glue.c

index a2b5d6f20f4d151931b8f9d29dd945c674ed026a..1c29546983bfcd254be18ccd6f742d69945e5b01 100644 (file)
@@ -156,23 +156,14 @@ static void ccm_calculate_auth_mac(struct aead_request *req, u8 mac[])
        scatterwalk_start(&walk, req->src);
 
        do {
-               u32 n = scatterwalk_clamp(&walk, len);
-               u8 *p;
-
-               if (!n) {
-                       scatterwalk_start(&walk, sg_next(walk.sg));
-                       n = scatterwalk_clamp(&walk, len);
-               }
-               p = scatterwalk_map(&walk);
+               unsigned int n;
+               const u8 *p;
 
+               p = scatterwalk_next(&walk, len, &n);
                macp = ce_aes_ccm_auth_data(mac, p, n, macp, ctx->key_enc,
                                            num_rounds(ctx));
-
+               scatterwalk_done_src(&walk, p, n);
                len -= n;
-
-               scatterwalk_unmap(p);
-               scatterwalk_advance(&walk, n);
-               scatterwalk_done(&walk, 0, len);
        } while (len);
 }
 
index da7b7ec1a664e128bd46b26589a032a32653224b..69d4fb78c30d7a672f152e4e6edb781641e62901 100644 (file)
@@ -308,21 +308,13 @@ static void gcm_calculate_auth_mac(struct aead_request *req, u64 dg[], u32 len)
        scatterwalk_start(&walk, req->src);
 
        do {
-               u32 n = scatterwalk_clamp(&walk, len);
-               u8 *p;
-
-               if (!n) {
-                       scatterwalk_start(&walk, sg_next(walk.sg));
-                       n = scatterwalk_clamp(&walk, len);
-               }
-               p = scatterwalk_map(&walk);
+               unsigned int n;
+               const u8 *p;
 
+               p = scatterwalk_next(&walk, len, &n);
                gcm_update_mac(dg, p, n, buf, &buf_count, ctx);
+               scatterwalk_done_src(&walk, p, n);
                len -= n;
-
-               scatterwalk_unmap(p);
-               scatterwalk_advance(&walk, n);
-               scatterwalk_done(&walk, 0, len);
        } while (len);
 
        if (buf_count) {
index 5e7e17bbec81e158b6550862900ae7689cfcbe40..119f86eb7cc98937ccce2b779d796c1773916624 100644 (file)
@@ -112,17 +112,12 @@ static void ccm_calculate_auth_mac(struct aead_request *req, u8 mac[])
        scatterwalk_start(&walk, req->src);
 
        do {
-               u32 n = scatterwalk_clamp(&walk, assoclen);
-               u8 *p, *ptr;
+               unsigned int n, orig_n;
+               const u8 *p, *orig_p;
 
-               if (!n) {
-                       scatterwalk_start(&walk, sg_next(walk.sg));
-                       n = scatterwalk_clamp(&walk, assoclen);
-               }
-
-               p = ptr = scatterwalk_map(&walk);
-               assoclen -= n;
-               scatterwalk_advance(&walk, n);
+               orig_p = scatterwalk_next(&walk, assoclen, &orig_n);
+               p = orig_p;
+               n = orig_n;
 
                while (n > 0) {
                        unsigned int l, nblocks;
@@ -136,9 +131,9 @@ static void ccm_calculate_auth_mac(struct aead_request *req, u8 mac[])
                                } else {
                                        nblocks = n / SM4_BLOCK_SIZE;
                                        sm4_ce_cbcmac_update(ctx->rkey_enc,
-                                                            mac, ptr, nblocks);
+                                                            mac, p, nblocks);
 
-                                       ptr += nblocks * SM4_BLOCK_SIZE;
+                                       p += nblocks * SM4_BLOCK_SIZE;
                                        n %= SM4_BLOCK_SIZE;
 
                                        continue;
@@ -147,15 +142,15 @@ static void ccm_calculate_auth_mac(struct aead_request *req, u8 mac[])
 
                        l = min(n, SM4_BLOCK_SIZE - len);
                        if (l) {
-                               crypto_xor(mac + len, ptr, l);
+                               crypto_xor(mac + len, p, l);
                                len += l;
-                               ptr += l;
+                               p += l;
                                n -= l;
                        }
                }
 
-               scatterwalk_unmap(p);
-               scatterwalk_done(&walk, 0, assoclen);
+               scatterwalk_done_src(&walk, orig_p, orig_n);
+               assoclen -= orig_n;
        } while (assoclen);
 }
 
index 73bfb6972d3a3890a799913cc19b71f9a46421c9..2e27d7752d4f58a88c795a33e64fbb8fee347331 100644 (file)
@@ -82,20 +82,15 @@ static void gcm_calculate_auth_mac(struct aead_request *req, u8 ghash[])
        scatterwalk_start(&walk, req->src);
 
        do {
-               u32 n = scatterwalk_clamp(&walk, assoclen);
-               u8 *p, *ptr;
+               unsigned int n, orig_n;
+               const u8 *p, *orig_p;
 
-               if (!n) {
-                       scatterwalk_start(&walk, sg_next(walk.sg));
-                       n = scatterwalk_clamp(&walk, assoclen);
-               }
-
-               p = ptr = scatterwalk_map(&walk);
-               assoclen -= n;
-               scatterwalk_advance(&walk, n);
+               orig_p = scatterwalk_next(&walk, assoclen, &orig_n);
+               p = orig_p;
+               n = orig_n;
 
                if (n + buflen < GHASH_BLOCK_SIZE) {
-                       memcpy(&buffer[buflen], ptr, n);
+                       memcpy(&buffer[buflen], p, n);
                        buflen += n;
                } else {
                        unsigned int nblocks;
@@ -103,8 +98,8 @@ static void gcm_calculate_auth_mac(struct aead_request *req, u8 ghash[])
                        if (buflen) {
                                unsigned int l = GHASH_BLOCK_SIZE - buflen;
 
-                               memcpy(&buffer[buflen], ptr, l);
-                               ptr += l;
+                               memcpy(&buffer[buflen], p, l);
+                               p += l;
                                n -= l;
 
                                pmull_ghash_update(ctx->ghash_table, ghash,
@@ -114,17 +109,17 @@ static void gcm_calculate_auth_mac(struct aead_request *req, u8 ghash[])
                        nblocks = n / GHASH_BLOCK_SIZE;
                        if (nblocks) {
                                pmull_ghash_update(ctx->ghash_table, ghash,
-                                                  ptr, nblocks);
-                               ptr += nblocks * GHASH_BLOCK_SIZE;
+                                                  p, nblocks);
+                               p += nblocks * GHASH_BLOCK_SIZE;
                        }
 
                        buflen = n % GHASH_BLOCK_SIZE;
                        if (buflen)
-                               memcpy(&buffer[0], ptr, buflen);
+                               memcpy(&buffer[0], p, buflen);
                }
 
-               scatterwalk_unmap(p);
-               scatterwalk_done(&walk, 0, assoclen);
+               scatterwalk_done_src(&walk, orig_p, orig_n);
+               assoclen -= orig_n;
        } while (assoclen);
 
        /* padding with '0' */