> On May 7, 2018, at 5:18 AM, Raslan Darawsheh <rasl...@mellanox.com> wrote:

Please don't use PMD/code specific words in the title. I suggest:
        net/mlx5: fix double free on error handling

> When attr_ctx is NULL it will attempt to free the list of devices twice.
> So, changing it to be freed in error handling only.
> 
> Fixes: 771fa900 ("mlx5: introduce new driver for Mellanox ConnectX-4 
> adapters")

Prefer to put 12 figures?

> Cc: sta...@dpdk.org

New line here.

> Signed-off-by: Raslan Darawsheh <rasl...@mellanox.com>
> ---
> drivers/net/mlx5/mlx5.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
> index 5190b9f..d34076b 100644
> --- a/drivers/net/mlx5/mlx5.c
> +++ b/drivers/net/mlx5/mlx5.c
> @@ -690,7 +690,6 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv 
> __rte_unused,
>               break;
>       }
>       if (attr_ctx == NULL) {
> -             mlx5_glue->free_device_list(list);
>               switch (err) {
>               case 0:
>                       DRV_LOG(ERR,
> @@ -701,6 +700,8 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv 
> __rte_unused,
>                       DRV_LOG(ERR,
>                               "cannot use device, are drivers up to date?");
>                       goto error;
> +             default:
> +                     goto error;
>               }
>       }
>       ibv_dev = list[i];
> -- 

Nice catch!
Looks the goto lines are redundant. How about this instead?

diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
index 5190b9fcd..270f59b27 100644
--- a/drivers/net/mlx5/mlx5.c
+++ b/drivers/net/mlx5/mlx5.c
@@ -690,18 +690,16 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv 
__rte_unused,
                break;
        }
        if (attr_ctx == NULL) {
-               mlx5_glue->free_device_list(list);
                switch (err) {
                case 0:
                        DRV_LOG(ERR,
                                "cannot access device, is mlx5_ib loaded?");
                        err = ENODEV;
-                       goto error;
                case EINVAL:
                        DRV_LOG(ERR,
                                "cannot use device, are drivers up to date?");
-                       goto error;
                }
+               goto error;
        }
        ibv_dev = list[i];
        DRV_LOG(DEBUG, "device opened");


Thanks,
Yongseok

Reply via email to