cryptodev: fix PMD memory leak
Checks
Commit Message
This patch fixes the memory leak during queue pair release.
Originally the operation ring is not freed when releasing
queue pair, cause the next queue_pair configure call fail
and memory leak.
Fixes: eec136f3c54f ("aesni_gcm: add driver for AES-GCM crypto operations")
Fixes: cf7685d68f00 ("crypto/zuc: add driver for ZUC library")
Fixes: d61f70b4c918 ("crypto/libcrypto: add driver for OpenSSL library")
Fixes: 3aafc423cf4d ("snow3g: add driver for SNOW 3G library")
Cc: stable@dpdk.org
Signed-off-by: Fan Zhang <roy.fan.zhang@intel.com>
---
drivers/crypto/aesni_gcm/aesni_gcm_pmd_ops.c | 5 +++++
drivers/crypto/openssl/rte_openssl_pmd_ops.c | 5 +++++
drivers/crypto/snow3g/rte_snow3g_pmd_ops.c | 5 +++++
drivers/crypto/zuc/rte_zuc_pmd_ops.c | 5 +++++
4 files changed, 20 insertions(+)
Comments
> -----Original Message-----
> From: Zhang, Roy Fan
> Sent: Friday, December 21, 2018 2:11 PM
> To: dev@dpdk.org
> Cc: akhil.goyal@nxp.com; De Lara Guarch, Pablo
> <pablo.de.lara.guarch@intel.com>; Trahe, Fiona <fiona.trahe@intel.com>;
> stable@dpdk.org
> Subject: [PATCH] cryptodev: fix PMD memory leak
>
> This patch fixes the memory leak during queue pair release.
> Originally the operation ring is not freed when releasing queue pair, cause
> the next queue_pair configure call fail and memory leak.
>
> Fixes: eec136f3c54f ("aesni_gcm: add driver for AES-GCM crypto operations")
> Fixes: cf7685d68f00 ("crypto/zuc: add driver for ZUC library")
> Fixes: d61f70b4c918 ("crypto/libcrypto: add driver for OpenSSL library")
> Fixes: 3aafc423cf4d ("snow3g: add driver for SNOW 3G library")
>
> Cc: stable@dpdk.org
>
> Signed-off-by: Fan Zhang <roy.fan.zhang@intel.com>
> ---
> drivers/crypto/aesni_gcm/aesni_gcm_pmd_ops.c | 5 +++++
> drivers/crypto/openssl/rte_openssl_pmd_ops.c | 5 +++++
> drivers/crypto/snow3g/rte_snow3g_pmd_ops.c | 5 +++++
> drivers/crypto/zuc/rte_zuc_pmd_ops.c | 5 +++++
> 4 files changed, 20 insertions(+)
Title should be renamed to "drivers/crypto:".
Apart from that,
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of De Lara Guarch,
> Pablo
> Sent: Friday, December 21, 2018 3:44 PM
> To: Zhang, Roy Fan <roy.fan.zhang@intel.com>; dev@dpdk.org
> Cc: akhil.goyal@nxp.com; Trahe, Fiona <fiona.trahe@intel.com>;
> stable@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH] cryptodev: fix PMD memory leak
>
>
>
> > -----Original Message-----
> > From: Zhang, Roy Fan
> > Sent: Friday, December 21, 2018 2:11 PM
> > To: dev@dpdk.org
> > Cc: akhil.goyal@nxp.com; De Lara Guarch, Pablo
> > <pablo.de.lara.guarch@intel.com>; Trahe, Fiona
> > <fiona.trahe@intel.com>; stable@dpdk.org
> > Subject: [PATCH] cryptodev: fix PMD memory leak
> >
> > This patch fixes the memory leak during queue pair release.
> > Originally the operation ring is not freed when releasing queue pair,
> > cause the next queue_pair configure call fail and memory leak.
> >
> > Fixes: eec136f3c54f ("aesni_gcm: add driver for AES-GCM crypto
> > operations")
> > Fixes: cf7685d68f00 ("crypto/zuc: add driver for ZUC library")
> > Fixes: d61f70b4c918 ("crypto/libcrypto: add driver for OpenSSL
> > library")
> > Fixes: 3aafc423cf4d ("snow3g: add driver for SNOW 3G library")
> >
> > Cc: stable@dpdk.org
> >
> > Signed-off-by: Fan Zhang <roy.fan.zhang@intel.com>
> > ---
> > drivers/crypto/aesni_gcm/aesni_gcm_pmd_ops.c | 5 +++++
> > drivers/crypto/openssl/rte_openssl_pmd_ops.c | 5 +++++
> > drivers/crypto/snow3g/rte_snow3g_pmd_ops.c | 5 +++++
> > drivers/crypto/zuc/rte_zuc_pmd_ops.c | 5 +++++
> > 4 files changed, 20 insertions(+)
>
> Title should be renamed to "drivers/crypto:".
>
> Apart from that,
>
> Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Applied to dpdk-next-crypto.
Thanks,
Pablo
@@ -153,6 +153,11 @@ static int
aesni_gcm_pmd_qp_release(struct rte_cryptodev *dev, uint16_t qp_id)
{
if (dev->data->queue_pairs[qp_id] != NULL) {
+ struct aesni_gcm_qp *qp = dev->data->queue_pairs[qp_id];
+
+ if (qp->processed_pkts)
+ rte_ring_free(qp->processed_pkts);
+
rte_free(dev->data->queue_pairs[qp_id]);
dev->data->queue_pairs[qp_id] = NULL;
}
@@ -657,6 +657,11 @@ static int
openssl_pmd_qp_release(struct rte_cryptodev *dev, uint16_t qp_id)
{
if (dev->data->queue_pairs[qp_id] != NULL) {
+ struct openssl_qp *qp = dev->data->queue_pairs[qp_id];
+
+ if (qp->processed_ops)
+ rte_ring_free(qp->processed_ops);
+
rte_free(dev->data->queue_pairs[qp_id]);
dev->data->queue_pairs[qp_id] = NULL;
}
@@ -142,6 +142,11 @@ static int
snow3g_pmd_qp_release(struct rte_cryptodev *dev, uint16_t qp_id)
{
if (dev->data->queue_pairs[qp_id] != NULL) {
+ struct snow3g_qp *qp = dev->data->queue_pairs[qp_id];
+
+ if (qp->processed_ops)
+ rte_ring_free(qp->processed_ops);
+
rte_free(dev->data->queue_pairs[qp_id]);
dev->data->queue_pairs[qp_id] = NULL;
}
@@ -142,6 +142,11 @@ static int
zuc_pmd_qp_release(struct rte_cryptodev *dev, uint16_t qp_id)
{
if (dev->data->queue_pairs[qp_id] != NULL) {
+ struct zuc_qp *qp = dev->data->queue_pairs[qp_id];
+
+ if (qp->processed_ops)
+ rte_ring_free(qp->processed_ops);
+
rte_free(dev->data->queue_pairs[qp_id]);
dev->data->queue_pairs[qp_id] = NULL;
}