diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-05-01 08:15:36 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-05-01 08:15:36 -0700 |
commit | a0be7522b25f17ac2c3964a24b88b5fe7c9404b8 (patch) | |
tree | aba2be9ce572e19d6dc65c56adaa3398a03578c4 | |
parent | 3b2b74cad34e7a0cf6d4929ee9e8ad4e11a84867 (diff) | |
parent | b1145ce395f7785487c128fe8faf8624e6586d84 (diff) | |
download | kernel_samsung_tuna-a0be7522b25f17ac2c3964a24b88b5fe7c9404b8.zip kernel_samsung_tuna-a0be7522b25f17ac2c3964a24b88b5fe7c9404b8.tar.gz kernel_samsung_tuna-a0be7522b25f17ac2c3964a24b88b5fe7c9404b8.tar.bz2 |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6:
[CRYPTO] cryptd: Correct kzalloc error test
[CRYPTO] eseqiv: Fix off-by-one encryption
[CRYPTO] api: Fix scatterwalk_sg_chain
[CRYPTO] authenc: Fix async crypto crash in crypto_authenc_genicv()
-rw-r--r-- | crypto/authenc.c | 5 | ||||
-rw-r--r-- | crypto/cryptd.c | 4 | ||||
-rw-r--r-- | crypto/eseqiv.c | 3 | ||||
-rw-r--r-- | include/crypto/scatterwalk.h | 4 |
4 files changed, 12 insertions, 4 deletions
diff --git a/crypto/authenc.c b/crypto/authenc.c index ed8ac5a..4b22676 100644 --- a/crypto/authenc.c +++ b/crypto/authenc.c @@ -217,9 +217,10 @@ static void crypto_authenc_givencrypt_done(struct crypto_async_request *req, int err) { if (!err) { - struct aead_givcrypt_request *greq = req->data; + struct aead_request *areq = req->data; + struct skcipher_givcrypt_request *greq = aead_request_ctx(areq); - err = crypto_authenc_genicv(&greq->areq, greq->giv, 0); + err = crypto_authenc_genicv(areq, greq->giv, 0); } aead_request_complete(req->data, err); diff --git a/crypto/cryptd.c b/crypto/cryptd.c index 2504252..b150de5 100644 --- a/crypto/cryptd.c +++ b/crypto/cryptd.c @@ -190,8 +190,10 @@ static struct crypto_instance *cryptd_alloc_instance(struct crypto_alg *alg, int err; inst = kzalloc(sizeof(*inst) + sizeof(*ctx), GFP_KERNEL); - if (IS_ERR(inst)) + if (!inst) { + inst = ERR_PTR(-ENOMEM); goto out; + } err = -ENAMETOOLONG; if (snprintf(inst->alg.cra_driver_name, CRYPTO_MAX_ALG_NAME, diff --git a/crypto/eseqiv.c b/crypto/eseqiv.c index b14f14e..881d309 100644 --- a/crypto/eseqiv.c +++ b/crypto/eseqiv.c @@ -136,7 +136,8 @@ static int eseqiv_givencrypt(struct skcipher_givcrypt_request *req) } ablkcipher_request_set_crypt(subreq, reqctx->src, dst, - req->creq.nbytes, req->creq.info); + req->creq.nbytes + ivsize, + req->creq.info); memcpy(req->creq.info, ctx->salt, ivsize); diff --git a/include/crypto/scatterwalk.h b/include/crypto/scatterwalk.h index 224658b..833d208 100644 --- a/include/crypto/scatterwalk.h +++ b/include/crypto/scatterwalk.h @@ -57,10 +57,14 @@ static inline void scatterwalk_sg_chain(struct scatterlist *sg1, int num, struct scatterlist *sg2) { sg_set_page(&sg1[num - 1], (void *)sg2, 0, 0); + sg1[num - 1].page_link &= ~0x02; } static inline struct scatterlist *scatterwalk_sg_next(struct scatterlist *sg) { + if (sg_is_last(sg)) + return NULL; + return (++sg)->length ? sg : (void *)sg_page(sg); } |