mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-01 22:54:01 +00:00
crypto: virtio - implement missing support for output IVs
commit500e6807ce
upstream. In order to allow for CBC to be chained, which is something that the CTS template relies upon, implementations of CBC need to pass the IV to be used for subsequent invocations via the IV buffer. This was not implemented yet for virtio-crypto so implement it now. Fixes:dbaf0624ff
("crypto: add virtio-crypto driver") Cc: "Michael S. Tsirkin" <mst@redhat.com> Cc: Jason Wang <jasowang@redhat.com> Cc: Gonglei <arei.gonglei@huawei.com> Cc: virtualization@lists.linux-foundation.org Signed-off-by: Ard Biesheuvel <ardb@kernel.org> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
f1e47dcc65
commit
02d72fbeea
1 changed files with 9 additions and 0 deletions
|
@ -449,6 +449,11 @@ __virtio_crypto_ablkcipher_do_req(struct virtio_crypto_sym_request *vc_sym_req,
|
|||
goto free;
|
||||
}
|
||||
memcpy(iv, req->info, ivsize);
|
||||
if (!vc_sym_req->encrypt)
|
||||
scatterwalk_map_and_copy(req->info, req->src,
|
||||
req->nbytes - AES_BLOCK_SIZE,
|
||||
AES_BLOCK_SIZE, 0);
|
||||
|
||||
sg_init_one(&iv_sg, iv, ivsize);
|
||||
sgs[num_out++] = &iv_sg;
|
||||
vc_sym_req->iv = iv;
|
||||
|
@ -585,6 +590,10 @@ static void virtio_crypto_ablkcipher_finalize_req(
|
|||
struct ablkcipher_request *req,
|
||||
int err)
|
||||
{
|
||||
if (vc_sym_req->encrypt)
|
||||
scatterwalk_map_and_copy(req->info, req->dst,
|
||||
req->nbytes - AES_BLOCK_SIZE,
|
||||
AES_BLOCK_SIZE, 0);
|
||||
crypto_finalize_ablkcipher_request(vc_sym_req->base.dataq->engine,
|
||||
req, err);
|
||||
kzfree(vc_sym_req->iv);
|
||||
|
|
Loading…
Reference in a new issue