Skip to content

Commit 172b1d6

Browse files
dong-liuliuherbertx
authored andcommitted
crypto: sha256-mb - fix ctx pointer and digest copy
1. fix ctx pointer Use req_ctx which is the ctx for the next job that have been completed in the lanes instead of the first completed job rctx, whose completion could have been called and released. 2. fix digest copy Use XMM register to copy another 16 bytes sha256 digest instead of a regular register. Signed-off-by: Xiaodong Liu <[email protected]> Signed-off-by: Herbert Xu <[email protected]>
1 parent a0118c8 commit 172b1d6

File tree

2 files changed

+6
-5
lines changed

2 files changed

+6
-5
lines changed

arch/x86/crypto/sha256-mb/sha256_mb.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -485,10 +485,10 @@ static int sha_complete_job(struct mcryptd_hash_request_ctx *rctx,
485485

486486
req = cast_mcryptd_ctx_to_req(req_ctx);
487487
if (irqs_disabled())
488-
rctx->complete(&req->base, ret);
488+
req_ctx->complete(&req->base, ret);
489489
else {
490490
local_bh_disable();
491-
rctx->complete(&req->base, ret);
491+
req_ctx->complete(&req->base, ret);
492492
local_bh_enable();
493493
}
494494
}

arch/x86/crypto/sha256-mb/sha256_mb_mgr_flush_avx2.S

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -265,13 +265,14 @@ ENTRY(sha256_mb_mgr_get_comp_job_avx2)
265265
vpinsrd $1, _args_digest+1*32(state, idx, 4), %xmm0, %xmm0
266266
vpinsrd $2, _args_digest+2*32(state, idx, 4), %xmm0, %xmm0
267267
vpinsrd $3, _args_digest+3*32(state, idx, 4), %xmm0, %xmm0
268-
movl _args_digest+4*32(state, idx, 4), tmp2_w
268+
vmovd _args_digest(state , idx, 4) , %xmm0
269269
vpinsrd $1, _args_digest+5*32(state, idx, 4), %xmm1, %xmm1
270270
vpinsrd $2, _args_digest+6*32(state, idx, 4), %xmm1, %xmm1
271271
vpinsrd $3, _args_digest+7*32(state, idx, 4), %xmm1, %xmm1
272272

273-
vmovdqu %xmm0, _result_digest(job_rax)
274-
movl tmp2_w, _result_digest+1*16(job_rax)
273+
vmovdqu %xmm0, _result_digest(job_rax)
274+
offset = (_result_digest + 1*16)
275+
vmovdqu %xmm1, offset(job_rax)
275276

276277
pop %rbx
277278

0 commit comments

Comments
 (0)