2022-04-22 09:01:26

by Lei He

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



> On Apr 21, 2022, at 9:46 PM, Gonglei (Arei) <[email protected]> wrote:
>
>
>
>> -----Original Message-----
>> From: zhenwei pi [mailto:[email protected]]
>> Sent: Thursday, April 21, 2022 6:40 PM
>> To: Gonglei (Arei) <[email protected]>; [email protected]
>> Cc: [email protected]; [email protected];
>> [email protected]; [email protected];
>> [email protected]; [email protected];
>> [email protected]; zhenwei pi <[email protected]>
>> Subject: [PATCH v3 4/5] virtio-crypto: adjust dst_len at ops callback
>>
>> From: lei he <[email protected]>
>>
>> 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 <[email protected]>
>> Cc: Jason Wang <[email protected]>
>> Cc: Gonglei <[email protected]>
>> Signed-off-by: lei he <[email protected]>
>> Signed-off-by: zhenwei pi <[email protected]>
>> ---
>> 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