Re: [External] [PATCH v3 4/5] virtio-crypto: adjust dst_len at ops callback

From: 何磊
Date: Fri Apr 22 2022 - 02:58:47 EST




> 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