net/bnxt: fix memory leak when mapping failure
Checks
Commit Message
From: Yunjian Wang <wangyunjian@huawei.com>
We allocated memory for the 'buf' when sending message to HWRM,
but we don't free it when mapping the address to IO address
fails. It will lead to memory leak.
Fixes: 19e6af01bb36 ("net/bnxt: support get/set EEPROM")
Cc: stable@dpdk.org
Signed-off-by: Yunjian Wang <wangyunjian@huawei.com>
---
drivers/net/bnxt/bnxt_hwrm.c | 3 +++
1 file changed, 3 insertions(+)
Comments
On Mon, Nov 30, 2020 at 5:00 PM wangyunjian <wangyunjian@huawei.com> wrote:
>
> From: Yunjian Wang <wangyunjian@huawei.com>
>
> We allocated memory for the 'buf' when sending message to HWRM,
> but we don't free it when mapping the address to IO address
> fails. It will lead to memory leak.
>
> Fixes: 19e6af01bb36 ("net/bnxt: support get/set EEPROM")
> Cc: stable@dpdk.org
>
> Signed-off-by: Yunjian Wang <wangyunjian@huawei.com>
Patch applied to dpdk-next-net-brcm. Thanks
> ---
> drivers/net/bnxt/bnxt_hwrm.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
> index 24c33185b4..ebbf504c0c 100644
> --- a/drivers/net/bnxt/bnxt_hwrm.c
> +++ b/drivers/net/bnxt/bnxt_hwrm.c
> @@ -4320,6 +4320,7 @@ int bnxt_get_nvram_directory(struct bnxt *bp, uint32_t len, uint8_t *data)
> return -ENOMEM;
> dma_handle = rte_malloc_virt2iova(buf);
> if (dma_handle == RTE_BAD_IOVA) {
> + rte_free(buf);
> PMD_DRV_LOG(ERR,
> "unable to map response address to physical memory\n");
> return -ENOMEM;
> @@ -4354,6 +4355,7 @@ int bnxt_hwrm_get_nvram_item(struct bnxt *bp, uint32_t index,
>
> dma_handle = rte_malloc_virt2iova(buf);
> if (dma_handle == RTE_BAD_IOVA) {
> + rte_free(buf);
> PMD_DRV_LOG(ERR,
> "unable to map response address to physical memory\n");
> return -ENOMEM;
> @@ -4407,6 +4409,7 @@ int bnxt_hwrm_flash_nvram(struct bnxt *bp, uint16_t dir_type,
>
> dma_handle = rte_malloc_virt2iova(buf);
> if (dma_handle == RTE_BAD_IOVA) {
> + rte_free(buf);
> PMD_DRV_LOG(ERR,
> "unable to map response address to physical memory\n");
> return -ENOMEM;
> --
> 2.18.1
>
@@ -4320,6 +4320,7 @@ int bnxt_get_nvram_directory(struct bnxt *bp, uint32_t len, uint8_t *data)
return -ENOMEM;
dma_handle = rte_malloc_virt2iova(buf);
if (dma_handle == RTE_BAD_IOVA) {
+ rte_free(buf);
PMD_DRV_LOG(ERR,
"unable to map response address to physical memory\n");
return -ENOMEM;
@@ -4354,6 +4355,7 @@ int bnxt_hwrm_get_nvram_item(struct bnxt *bp, uint32_t index,
dma_handle = rte_malloc_virt2iova(buf);
if (dma_handle == RTE_BAD_IOVA) {
+ rte_free(buf);
PMD_DRV_LOG(ERR,
"unable to map response address to physical memory\n");
return -ENOMEM;
@@ -4407,6 +4409,7 @@ int bnxt_hwrm_flash_nvram(struct bnxt *bp, uint16_t dir_type,
dma_handle = rte_malloc_virt2iova(buf);
if (dma_handle == RTE_BAD_IOVA) {
+ rte_free(buf);
PMD_DRV_LOG(ERR,
"unable to map response address to physical memory\n");
return -ENOMEM;