Skip to content

Commit f407764

Browse files
committed
crypto: x86/ghash - Use proper helpers to clone request
Rather than copying a request by hand with memcpy, use the correct API helpers to setup the new request. This will matter once the API helpers start setting up chained requests as a simple memcpy will break chaining. Signed-off-by: Herbert Xu <[email protected]>
1 parent 075db21 commit f407764

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

arch/x86/crypto/ghash-clmulni-intel_glue.c

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,20 @@ static int ghash_async_init(struct ahash_request *req)
189189
return crypto_shash_init(desc);
190190
}
191191

192+
static void ghash_init_cryptd_req(struct ahash_request *req)
193+
{
194+
struct ahash_request *cryptd_req = ahash_request_ctx(req);
195+
struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
196+
struct ghash_async_ctx *ctx = crypto_ahash_ctx(tfm);
197+
struct cryptd_ahash *cryptd_tfm = ctx->cryptd_tfm;
198+
199+
ahash_request_set_tfm(cryptd_req, &cryptd_tfm->base);
200+
ahash_request_set_callback(cryptd_req, req->base.flags,
201+
req->base.complete, req->base.data);
202+
ahash_request_set_crypt(cryptd_req, req->src, req->result,
203+
req->nbytes);
204+
}
205+
192206
static int ghash_async_update(struct ahash_request *req)
193207
{
194208
struct ahash_request *cryptd_req = ahash_request_ctx(req);
@@ -198,8 +212,7 @@ static int ghash_async_update(struct ahash_request *req)
198212

199213
if (!crypto_simd_usable() ||
200214
(in_atomic() && cryptd_ahash_queued(cryptd_tfm))) {
201-
memcpy(cryptd_req, req, sizeof(*req));
202-
ahash_request_set_tfm(cryptd_req, &cryptd_tfm->base);
215+
ghash_init_cryptd_req(req);
203216
return crypto_ahash_update(cryptd_req);
204217
} else {
205218
struct shash_desc *desc = cryptd_shash_desc(cryptd_req);
@@ -216,8 +229,7 @@ static int ghash_async_final(struct ahash_request *req)
216229

217230
if (!crypto_simd_usable() ||
218231
(in_atomic() && cryptd_ahash_queued(cryptd_tfm))) {
219-
memcpy(cryptd_req, req, sizeof(*req));
220-
ahash_request_set_tfm(cryptd_req, &cryptd_tfm->base);
232+
ghash_init_cryptd_req(req);
221233
return crypto_ahash_final(cryptd_req);
222234
} else {
223235
struct shash_desc *desc = cryptd_shash_desc(cryptd_req);
@@ -257,8 +269,7 @@ static int ghash_async_digest(struct ahash_request *req)
257269

258270
if (!crypto_simd_usable() ||
259271
(in_atomic() && cryptd_ahash_queued(cryptd_tfm))) {
260-
memcpy(cryptd_req, req, sizeof(*req));
261-
ahash_request_set_tfm(cryptd_req, &cryptd_tfm->base);
272+
ghash_init_cryptd_req(req);
262273
return crypto_ahash_digest(cryptd_req);
263274
} else {
264275
struct shash_desc *desc = cryptd_shash_desc(cryptd_req);

0 commit comments

Comments
 (0)