> -----Original Message----- > From: Michael S. Tsirkin [mailto:mst@xxxxxxxxxx] > Sent: Tuesday, August 16, 2022 4:43 PM > To: Lei He <helei.sig11@xxxxxxxxxxxxx> > Cc: Gonglei (Arei) <arei.gonglei@xxxxxxxxxx>; > herbert@xxxxxxxxxxxxxxxxxxx; virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx; > linux-crypto@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; > pizhenwei@xxxxxxxxxxxxx > Subject: Re: [PATCH] crypto-virtio: fix memory-leak > Pls 's/crypto-virtio/virtio-crypto' in order to keep consistency. Reviewed-by: Gonglei <arei.gonglei@xxxxxxxxxx> Regards, -Gonglei > On Tue, Aug 16, 2022 at 03:59:16PM +0800, Lei He wrote: > > From: lei he <helei.sig11@xxxxxxxxxxxxx> > > > > Fix memory-leak for virtio-crypto akcipher request, this problem is > > introduced by 59ca6c93387d3(virtio-crypto: implement RSA algorithm). > > The leak can be reproduced and tested with the following script inside > > virtual machine: > > > > #!/bin/bash > > > > LOOP_TIMES=10000 > > > > # required module: pkcs8_key_parser, virtio_crypto modprobe > > pkcs8_key_parser # if CONFIG_PKCS8_PRIVATE_KEY_PARSER=m modprobe > > virtio_crypto # if CONFIG_CRYPTO_DEV_VIRTIO=m rm -rf /tmp/data dd > > if=/dev/random of=/tmp/data count=1 bs=230 > > > > # generate private key and self-signed cert openssl req -nodes -x509 > > -newkey rsa:2048 -keyout key.pem \ > > -outform der -out cert.der \ > > -subj > "/C=CN/ST=GD/L=SZ/O=vihoo/OU=dev/CN=always.com/emailAddress=yy@ > always.com" > > # convert private key from pem to der > > openssl pkcs8 -in key.pem -topk8 -nocrypt -outform DER -out key.der > > > > # add key > > PRIV_KEY_ID=`cat key.der | keyctl padd asymmetric test_priv_key @s` > > echo "priv key id = "$PRIV_KEY_ID PUB_KEY_ID=`cat cert.der | keyctl > > padd asymmetric test_pub_key @s` echo "pub key id = "$PUB_KEY_ID > > > > # query key > > keyctl pkey_query $PRIV_KEY_ID 0 > > keyctl pkey_query $PUB_KEY_ID 0 > > > > # here we only run pkey_encrypt becasuse it is the fastest interface > > function bench_pub() { > > keyctl pkey_encrypt $PUB_KEY_ID 0 /tmp/data > enc=pkcs1 >/tmp/enc.pub } > > > > # do bench_pub in loop to obtain the memory leak for (( i = 0; i < > > ${LOOP_TIMES}; ++i )); do > > bench_pub > > done > > > > Signed-off-by: lei he <helei.sig11@xxxxxxxxxxxxx> > > trash below pls drop. > > > > # Please enter the commit message for your changes. Lines starting # > > with '#' will be kept; you may remove them yourself if you want to. > > # An empty message aborts the commit. > > # > > # Date: Tue Aug 16 11:53:30 2022 +0800 > > # > > # On branch master > > # Your branch is ahead of 'origin/master' by 1 commit. > > # (use "git push" to publish your local commits) > > # > > # Changes to be committed: > > # modified: drivers/crypto/virtio/virtio_crypto_akcipher_algs.c > > # > > # Untracked files: > > # cert.der > > # key.der > > # key.pem > > # > > > > # Please enter the commit message for your changes. Lines starting # > > with '#' will be kept; you may remove them yourself if you want to. > > # An empty message aborts the commit. > > # > > # Date: Tue Aug 16 11:53:30 2022 +0800 > > # > > # On branch master > > # Your branch is ahead of 'origin/master' by 1 commit. > > # (use "git push" to publish your local commits) > > # > > # Changes to be committed: > > # modified: drivers/crypto/virtio/virtio_crypto_akcipher_algs.c > > # > > # Untracked files: > > # cert.der > > # key.der > > # key.pem > > # > > > > # Please enter the commit message for your changes. Lines starting # > > with '#' will be kept; you may remove them yourself if you want to. > > # An empty message aborts the commit. > > # > > # Date: Tue Aug 16 11:53:30 2022 +0800 > > # > > # On branch master > > # Your branch is ahead of 'origin/master' by 1 commit. > > # (use "git push" to publish your local commits) > > # > > # Changes to be committed: > > # modified: drivers/crypto/virtio/virtio_crypto_akcipher_algs.c > > # > > # Untracked files: > > # cert.der > > # key.der > > # key.pem > > # > > --- > > with commit log fixed: > > Acked-by: Michael S. Tsirkin <mst@xxxxxxxxxx> > > > drivers/crypto/virtio/virtio_crypto_akcipher_algs.c | 4 ++++ > > 1 file changed, 4 insertions(+) > > > > diff --git a/drivers/crypto/virtio/virtio_crypto_akcipher_algs.c > > b/drivers/crypto/virtio/virtio_crypto_akcipher_algs.c > > index 2a60d0525cde..168195672e2e 100644 > > --- a/drivers/crypto/virtio/virtio_crypto_akcipher_algs.c > > +++ b/drivers/crypto/virtio/virtio_crypto_akcipher_algs.c > > @@ -56,6 +56,10 @@ static void virtio_crypto_akcipher_finalize_req( > > struct virtio_crypto_akcipher_request *vc_akcipher_req, > > struct akcipher_request *req, int err) { > > + kfree(vc_akcipher_req->src_buf); > > + kfree(vc_akcipher_req->dst_buf); > > + vc_akcipher_req->src_buf = NULL; > > + vc_akcipher_req->dst_buf = NULL; > > virtcrypto_clear_request(&vc_akcipher_req->base); > > > > > > crypto_finalize_akcipher_request(vc_akcipher_req->base.dataq->engine, > > req, err); > > -- > > 2.20.1