mirror of
https://github.com/torvalds/linux.git
synced 2024-12-27 13:22:23 +00:00
crypto: rsa-pkcs1pad - fix dst len
The output buffer length has to be at least as big as the key_size. It is then updated to the actual output size by the implementation. Cc: <stable@vger.kernel.org> Signed-off-by: Tadeusz Struk <tadeusz.struk@intel.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
47cd30608f
commit
6f0904ada4
@ -387,16 +387,16 @@ static int pkcs1pad_decrypt(struct akcipher_request *req)
|
|||||||
req_ctx->child_req.src = req->src;
|
req_ctx->child_req.src = req->src;
|
||||||
req_ctx->child_req.src_len = req->src_len;
|
req_ctx->child_req.src_len = req->src_len;
|
||||||
req_ctx->child_req.dst = req_ctx->out_sg;
|
req_ctx->child_req.dst = req_ctx->out_sg;
|
||||||
req_ctx->child_req.dst_len = ctx->key_size - 1;
|
req_ctx->child_req.dst_len = ctx->key_size ;
|
||||||
|
|
||||||
req_ctx->out_buf = kmalloc(ctx->key_size - 1,
|
req_ctx->out_buf = kmalloc(ctx->key_size,
|
||||||
(req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP) ?
|
(req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP) ?
|
||||||
GFP_KERNEL : GFP_ATOMIC);
|
GFP_KERNEL : GFP_ATOMIC);
|
||||||
if (!req_ctx->out_buf)
|
if (!req_ctx->out_buf)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
pkcs1pad_sg_set_buf(req_ctx->out_sg, req_ctx->out_buf,
|
pkcs1pad_sg_set_buf(req_ctx->out_sg, req_ctx->out_buf,
|
||||||
ctx->key_size - 1, NULL);
|
ctx->key_size, NULL);
|
||||||
|
|
||||||
akcipher_request_set_tfm(&req_ctx->child_req, ctx->child);
|
akcipher_request_set_tfm(&req_ctx->child_req, ctx->child);
|
||||||
akcipher_request_set_callback(&req_ctx->child_req, req->base.flags,
|
akcipher_request_set_callback(&req_ctx->child_req, req->base.flags,
|
||||||
@ -595,16 +595,16 @@ static int pkcs1pad_verify(struct akcipher_request *req)
|
|||||||
req_ctx->child_req.src = req->src;
|
req_ctx->child_req.src = req->src;
|
||||||
req_ctx->child_req.src_len = req->src_len;
|
req_ctx->child_req.src_len = req->src_len;
|
||||||
req_ctx->child_req.dst = req_ctx->out_sg;
|
req_ctx->child_req.dst = req_ctx->out_sg;
|
||||||
req_ctx->child_req.dst_len = ctx->key_size - 1;
|
req_ctx->child_req.dst_len = ctx->key_size;
|
||||||
|
|
||||||
req_ctx->out_buf = kmalloc(ctx->key_size - 1,
|
req_ctx->out_buf = kmalloc(ctx->key_size,
|
||||||
(req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP) ?
|
(req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP) ?
|
||||||
GFP_KERNEL : GFP_ATOMIC);
|
GFP_KERNEL : GFP_ATOMIC);
|
||||||
if (!req_ctx->out_buf)
|
if (!req_ctx->out_buf)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
pkcs1pad_sg_set_buf(req_ctx->out_sg, req_ctx->out_buf,
|
pkcs1pad_sg_set_buf(req_ctx->out_sg, req_ctx->out_buf,
|
||||||
ctx->key_size - 1, NULL);
|
ctx->key_size, NULL);
|
||||||
|
|
||||||
akcipher_request_set_tfm(&req_ctx->child_req, ctx->child);
|
akcipher_request_set_tfm(&req_ctx->child_req, ctx->child);
|
||||||
akcipher_request_set_callback(&req_ctx->child_req, req->base.flags,
|
akcipher_request_set_callback(&req_ctx->child_req, req->base.flags,
|
||||||
|
Loading…
Reference in New Issue
Block a user