From: Ard Biesheuvel <a...@kernel.org>

commit 500e6807ce93b1fdc7d5b827c5cc167cc35630db 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: dbaf0624ffa5 ("crypto: add virtio-crypto driver")
Cc: "Michael S. Tsirkin" <m...@redhat.com>
Cc: Jason Wang <jasow...@redhat.com>
Cc: Gonglei <arei.gong...@huawei.com>
Cc: virtualization@lists.linux-foundation.org
Signed-off-by: Ard Biesheuvel <a...@kernel.org>
Signed-off-by: Herbert Xu <herb...@gondor.apana.org.au>
Signed-off-by: Greg Kroah-Hartman <gre...@linuxfoundation.org>

---
 drivers/crypto/virtio/virtio_crypto_algs.c |    9 +++++++++
 1 file changed, 9 insertions(+)

--- a/drivers/crypto/virtio/virtio_crypto_algs.c
+++ b/drivers/crypto/virtio/virtio_crypto_algs.c
@@ -435,6 +435,11 @@ __virtio_crypto_ablkcipher_do_req(struct
                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;
@@ -571,6 +576,10 @@ static void virtio_crypto_ablkcipher_fin
        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);


_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

Reply via email to