mirror of
https://github.com/torvalds/linux.git
synced 2025-11-30 23:16:01 +07:00
Merge tag 'v6.18-p3' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
Pull crypto fixes from Herbert Xu: - Fix bug in crypto_skcipher that breaks the new ti driver - Check for invalid assoclen in essiv * tag 'v6.18-p3' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: crypto: essiv - Check ssize for decryption and in-place encryption crypto: skcipher - Fix reqsize handling
This commit is contained in:
@@ -186,9 +186,14 @@ static int essiv_aead_crypt(struct aead_request *req, bool enc)
|
|||||||
const struct essiv_tfm_ctx *tctx = crypto_aead_ctx(tfm);
|
const struct essiv_tfm_ctx *tctx = crypto_aead_ctx(tfm);
|
||||||
struct essiv_aead_request_ctx *rctx = aead_request_ctx(req);
|
struct essiv_aead_request_ctx *rctx = aead_request_ctx(req);
|
||||||
struct aead_request *subreq = &rctx->aead_req;
|
struct aead_request *subreq = &rctx->aead_req;
|
||||||
|
int ivsize = crypto_aead_ivsize(tfm);
|
||||||
|
int ssize = req->assoclen - ivsize;
|
||||||
struct scatterlist *src = req->src;
|
struct scatterlist *src = req->src;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
if (ssize < 0)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
crypto_cipher_encrypt_one(tctx->essiv_cipher, req->iv, req->iv);
|
crypto_cipher_encrypt_one(tctx->essiv_cipher, req->iv, req->iv);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -198,19 +203,12 @@ static int essiv_aead_crypt(struct aead_request *req, bool enc)
|
|||||||
*/
|
*/
|
||||||
rctx->assoc = NULL;
|
rctx->assoc = NULL;
|
||||||
if (req->src == req->dst || !enc) {
|
if (req->src == req->dst || !enc) {
|
||||||
scatterwalk_map_and_copy(req->iv, req->dst,
|
scatterwalk_map_and_copy(req->iv, req->dst, ssize, ivsize, 1);
|
||||||
req->assoclen - crypto_aead_ivsize(tfm),
|
|
||||||
crypto_aead_ivsize(tfm), 1);
|
|
||||||
} else {
|
} else {
|
||||||
u8 *iv = (u8 *)aead_request_ctx(req) + tctx->ivoffset;
|
u8 *iv = (u8 *)aead_request_ctx(req) + tctx->ivoffset;
|
||||||
int ivsize = crypto_aead_ivsize(tfm);
|
|
||||||
int ssize = req->assoclen - ivsize;
|
|
||||||
struct scatterlist *sg;
|
struct scatterlist *sg;
|
||||||
int nents;
|
int nents;
|
||||||
|
|
||||||
if (ssize < 0)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
nents = sg_nents_for_len(req->src, ssize);
|
nents = sg_nents_for_len(req->src, ssize);
|
||||||
if (nents < 0)
|
if (nents < 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|||||||
@@ -294,6 +294,8 @@ static int crypto_skcipher_init_tfm(struct crypto_tfm *tfm)
|
|||||||
return crypto_init_lskcipher_ops_sg(tfm);
|
return crypto_init_lskcipher_ops_sg(tfm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
crypto_skcipher_set_reqsize(skcipher, crypto_tfm_alg_reqsize(tfm));
|
||||||
|
|
||||||
if (alg->exit)
|
if (alg->exit)
|
||||||
skcipher->base.exit = crypto_skcipher_exit_tfm;
|
skcipher->base.exit = crypto_skcipher_exit_tfm;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user