Skip to content

Commit af903dc

Browse files
committed
Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
Pull crypto fixes from Herbert Xu: "This fixes an unaligned panic in x86/sha-mb and a bug in ccm that triggers with certain underlying implementations" * 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: crypto: ccm - preserve the IV buffer crypto: x86/sha1-mb - fix panic due to unaligned access crypto: x86/sha256-mb - fix panic due to unaligned access
2 parents 39dae59 + 441f99c commit af903dc

File tree

3 files changed

+15
-13
lines changed

3 files changed

+15
-13
lines changed

arch/x86/crypto/sha1-mb/sha1_mb_mgr_flush_avx2.S

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,8 @@ LABEL skip_ %I
157157
.endr
158158

159159
# Find min length
160-
vmovdqa _lens+0*16(state), %xmm0
161-
vmovdqa _lens+1*16(state), %xmm1
160+
vmovdqu _lens+0*16(state), %xmm0
161+
vmovdqu _lens+1*16(state), %xmm1
162162

163163
vpminud %xmm1, %xmm0, %xmm2 # xmm2 has {D,C,B,A}
164164
vpalignr $8, %xmm2, %xmm3, %xmm3 # xmm3 has {x,x,D,C}
@@ -178,8 +178,8 @@ LABEL skip_ %I
178178
vpsubd %xmm2, %xmm0, %xmm0
179179
vpsubd %xmm2, %xmm1, %xmm1
180180

181-
vmovdqa %xmm0, _lens+0*16(state)
182-
vmovdqa %xmm1, _lens+1*16(state)
181+
vmovdqu %xmm0, _lens+0*16(state)
182+
vmovdqu %xmm1, _lens+1*16(state)
183183

184184
# "state" and "args" are the same address, arg1
185185
# len is arg2
@@ -235,8 +235,8 @@ ENTRY(sha1_mb_mgr_get_comp_job_avx2)
235235
jc .return_null
236236

237237
# Find min length
238-
vmovdqa _lens(state), %xmm0
239-
vmovdqa _lens+1*16(state), %xmm1
238+
vmovdqu _lens(state), %xmm0
239+
vmovdqu _lens+1*16(state), %xmm1
240240

241241
vpminud %xmm1, %xmm0, %xmm2 # xmm2 has {D,C,B,A}
242242
vpalignr $8, %xmm2, %xmm3, %xmm3 # xmm3 has {x,x,D,C}

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,8 @@ LABEL skip_ %I
155155
.endr
156156

157157
# Find min length
158-
vmovdqa _lens+0*16(state), %xmm0
159-
vmovdqa _lens+1*16(state), %xmm1
158+
vmovdqu _lens+0*16(state), %xmm0
159+
vmovdqu _lens+1*16(state), %xmm1
160160

161161
vpminud %xmm1, %xmm0, %xmm2 # xmm2 has {D,C,B,A}
162162
vpalignr $8, %xmm2, %xmm3, %xmm3 # xmm3 has {x,x,D,C}
@@ -176,8 +176,8 @@ LABEL skip_ %I
176176
vpsubd %xmm2, %xmm0, %xmm0
177177
vpsubd %xmm2, %xmm1, %xmm1
178178

179-
vmovdqa %xmm0, _lens+0*16(state)
180-
vmovdqa %xmm1, _lens+1*16(state)
179+
vmovdqu %xmm0, _lens+0*16(state)
180+
vmovdqu %xmm1, _lens+1*16(state)
181181

182182
# "state" and "args" are the same address, arg1
183183
# len is arg2
@@ -234,8 +234,8 @@ ENTRY(sha256_mb_mgr_get_comp_job_avx2)
234234
jc .return_null
235235

236236
# Find min length
237-
vmovdqa _lens(state), %xmm0
238-
vmovdqa _lens+1*16(state), %xmm1
237+
vmovdqu _lens(state), %xmm0
238+
vmovdqu _lens+1*16(state), %xmm1
239239

240240
vpminud %xmm1, %xmm0, %xmm2 # xmm2 has {D,C,B,A}
241241
vpalignr $8, %xmm2, %xmm3, %xmm3 # xmm3 has {x,x,D,C}

crypto/ccm.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ static int crypto_ccm_decrypt(struct aead_request *req)
363363
unsigned int cryptlen = req->cryptlen;
364364
u8 *authtag = pctx->auth_tag;
365365
u8 *odata = pctx->odata;
366-
u8 *iv = req->iv;
366+
u8 *iv = pctx->idata;
367367
int err;
368368

369369
cryptlen -= authsize;
@@ -379,6 +379,8 @@ static int crypto_ccm_decrypt(struct aead_request *req)
379379
if (req->src != req->dst)
380380
dst = pctx->dst;
381381

382+
memcpy(iv, req->iv, 16);
383+
382384
skcipher_request_set_tfm(skreq, ctx->ctr);
383385
skcipher_request_set_callback(skreq, pctx->flags,
384386
crypto_ccm_decrypt_done, req);

0 commit comments

Comments
 (0)