diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-05-21 20:16:49 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-05-21 20:16:49 -0400 |
commit | e51a3630565f61a5151f24f9ece191277ddaa320 (patch) | |
tree | b66b46a021aeab28e41197620ea7e42481431b99 /crypto | |
parent | 3d854120e97b87c04f3a4b0e272d61acedb144c7 (diff) | |
parent | 7b2a18e05feb86f9be25602abfa9604a6b977f79 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
Pull crypto fix from Herbert Xu:
"This fixes a the crash in the newly added algif_aead interface when it
tries to link SG lists"
* git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6:
crypto: algif_aead - fix invalid sgl linking
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/algif_aead.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/crypto/algif_aead.c b/crypto/algif_aead.c index 00a6fe166fed..69abada22373 100644 --- a/crypto/algif_aead.c +++ b/crypto/algif_aead.c | |||
@@ -33,7 +33,7 @@ struct aead_ctx { | |||
33 | /* | 33 | /* |
34 | * RSGL_MAX_ENTRIES is an artificial limit where user space at maximum | 34 | * RSGL_MAX_ENTRIES is an artificial limit where user space at maximum |
35 | * can cause the kernel to allocate RSGL_MAX_ENTRIES * ALG_MAX_PAGES | 35 | * can cause the kernel to allocate RSGL_MAX_ENTRIES * ALG_MAX_PAGES |
36 | * bytes | 36 | * pages |
37 | */ | 37 | */ |
38 | #define RSGL_MAX_ENTRIES ALG_MAX_PAGES | 38 | #define RSGL_MAX_ENTRIES ALG_MAX_PAGES |
39 | struct af_alg_sgl rsgl[RSGL_MAX_ENTRIES]; | 39 | struct af_alg_sgl rsgl[RSGL_MAX_ENTRIES]; |
@@ -435,11 +435,10 @@ static int aead_recvmsg(struct socket *sock, struct msghdr *msg, size_t ignored, | |||
435 | if (err < 0) | 435 | if (err < 0) |
436 | goto unlock; | 436 | goto unlock; |
437 | usedpages += err; | 437 | usedpages += err; |
438 | /* chain the new scatterlist with initial list */ | 438 | /* chain the new scatterlist with previous one */ |
439 | if (cnt) | 439 | if (cnt) |
440 | scatterwalk_crypto_chain(ctx->rsgl[0].sg, | 440 | af_alg_link_sg(&ctx->rsgl[cnt-1], &ctx->rsgl[cnt]); |
441 | ctx->rsgl[cnt].sg, 1, | 441 | |
442 | sg_nents(ctx->rsgl[cnt-1].sg)); | ||
443 | /* we do not need more iovecs as we have sufficient memory */ | 442 | /* we do not need more iovecs as we have sufficient memory */ |
444 | if (outlen <= usedpages) | 443 | if (outlen <= usedpages) |
445 | break; | 444 | break; |