drivers: dpaa: fix 'bman_pool' leak in dpaa_mbuf_create_pool

Message ID 20190409143301.16482-1-liq3ea@163.com (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers
Series drivers: dpaa: fix 'bman_pool' leak in dpaa_mbuf_create_pool |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK
ci/intel-Performance-Testing success Performance Testing PASS
ci/mellanox-Performance-Testing success Performance Testing PASS

Commit Message

Li Qiang April 9, 2019, 2:33 p.m. UTC
  When 'rte_zmalloc' failed dpaa_mbuf_create_pool() forgets freeing
'bp' thus leading resource leak. This patch avoids this.

Spotted by Coverity: CID 337679

Signed-off-by: Li Qiang <liq3ea@163.com>
---
 drivers/mempool/dpaa/dpaa_mempool.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
  

Comments

Li Qiang April 9, 2019, 2:57 p.m. UTC | #1
Sorry this patch has an error, please see the v2.

Thanks,
Li Qiang

Li Qiang <liq3ea@163.com> 于2019年4月9日周二 下午10:33写道:

> When 'rte_zmalloc' failed dpaa_mbuf_create_pool() forgets freeing
> 'bp' thus leading resource leak. This patch avoids this.
>
> Spotted by Coverity: CID 337679
>
> Signed-off-by: Li Qiang <liq3ea@163.com>
> ---
>  drivers/mempool/dpaa/dpaa_mempool.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/mempool/dpaa/dpaa_mempool.c
> b/drivers/mempool/dpaa/dpaa_mempool.c
> index 003081772..3d5c0022c 100644
> --- a/drivers/mempool/dpaa/dpaa_mempool.c
> +++ b/drivers/mempool/dpaa/dpaa_mempool.c
> @@ -78,8 +78,10 @@ dpaa_mbuf_create_pool(struct rte_mempool *mp)
>                 rte_dpaa_bpid_info = (struct dpaa_bp_info
> *)rte_zmalloc(NULL,
>                                 sizeof(struct dpaa_bp_info) *
> DPAA_MAX_BPOOLS,
>                                 RTE_CACHE_LINE_SIZE);
> -               if (rte_dpaa_bpid_info == NULL)
> +               if (rte_dpaa_bpid_info == NULL) {
> +                       bman_free_pool(bp);
>                         return -ENOMEM;
> +               };
>         }
>
>         rte_dpaa_bpid_info[bpid].mp = mp;
> --
> 2.17.1
>
>
>
  

Patch

diff --git a/drivers/mempool/dpaa/dpaa_mempool.c b/drivers/mempool/dpaa/dpaa_mempool.c
index 003081772..3d5c0022c 100644
--- a/drivers/mempool/dpaa/dpaa_mempool.c
+++ b/drivers/mempool/dpaa/dpaa_mempool.c
@@ -78,8 +78,10 @@  dpaa_mbuf_create_pool(struct rte_mempool *mp)
 		rte_dpaa_bpid_info = (struct dpaa_bp_info *)rte_zmalloc(NULL,
 				sizeof(struct dpaa_bp_info) * DPAA_MAX_BPOOLS,
 				RTE_CACHE_LINE_SIZE);
-		if (rte_dpaa_bpid_info == NULL)
+		if (rte_dpaa_bpid_info == NULL) {
+			bman_free_pool(bp);
 			return -ENOMEM;
+		};
 	}
 
 	rte_dpaa_bpid_info[bpid].mp = mp;