> On Apr 21, 2022, at 9:46 PM, Gonglei (Arei) <arei.gonglei@xxxxxxxxxx> wrote: > > > >> -----Original Message----- >> From: zhenwei pi [mailto:pizhenwei@xxxxxxxxxxxxx] >> Sent: Thursday, April 21, 2022 6:40 PM >> To: Gonglei (Arei) <arei.gonglei@xxxxxxxxxx>; mst@xxxxxxxxxx >> Cc: jasowang@xxxxxxxxxx; herbert@xxxxxxxxxxxxxxxxxxx; >> linux-kernel@xxxxxxxxxxxxxxx; virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx; >> linux-crypto@xxxxxxxxxxxxxxx; helei.sig11@xxxxxxxxxxxxx; >> davem@xxxxxxxxxxxxx; zhenwei pi <pizhenwei@xxxxxxxxxxxxx> >> Subject: [PATCH v3 4/5] virtio-crypto: adjust dst_len at ops callback >> >> From: lei he <helei.sig11@xxxxxxxxxxxxx> >> >> For some akcipher operations(eg, decryption of pkcs1pad(rsa)), the length of >> returned result maybe less than akcipher_req->dst_len, we need to recalculate >> the actual dst_len through the virt-queue protocol. >> > OK ... > >> Cc: Michael S. Tsirkin <mst@xxxxxxxxxx> >> Cc: Jason Wang <jasowang@xxxxxxxxxx> >> Cc: Gonglei <arei.gonglei@xxxxxxxxxx> >> Signed-off-by: lei he <helei.sig11@xxxxxxxxxxxxx> >> Signed-off-by: zhenwei pi <pizhenwei@xxxxxxxxxxxxx> >> --- >> drivers/crypto/virtio/virtio_crypto_akcipher_algs.c | 5 ++++- >> 1 file changed, 4 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/crypto/virtio/virtio_crypto_akcipher_algs.c >> b/drivers/crypto/virtio/virtio_crypto_akcipher_algs.c >> index 9561bc2df62b..82db86e088c2 100644 >> --- a/drivers/crypto/virtio/virtio_crypto_akcipher_algs.c >> +++ b/drivers/crypto/virtio/virtio_crypto_akcipher_algs.c >> @@ -90,9 +90,12 @@ static void >> virtio_crypto_dataq_akcipher_callback(struct virtio_crypto_request * >> } >> >> akcipher_req = vc_akcipher_req->akcipher_req; >> - if (vc_akcipher_req->opcode != VIRTIO_CRYPTO_AKCIPHER_VERIFY) >> + if (vc_akcipher_req->opcode != VIRTIO_CRYPTO_AKCIPHER_VERIFY) { >> + /* actuall length maybe less than dst buffer */ >> + akcipher_req->dst_len = len - sizeof(vc_req->status); > > ...but why minus sizeof(vc_req->status)? The len here indicates the total length of data written by the device. for encrypt/decrypt/sign, the virt crypto device writes two parts of data: dst_data and status(virtio_crypto_inhdr). To obtain dst_len, the size of status needs to be subtracted. > > > Regards, > -Gonglei