Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b6908c29 authored by Alaa Hleihel's avatar Alaa Hleihel Committed by Saeed Mahameed
Browse files

net/mlx5: Fix memory leak in bad flow of mlx5_alloc_irq_vectors



Fix a memory leak where in case that pci_alloc_irq_vectors failed,
priv->irq_info was not released.

Fixes: e126ba97 ("mlx5: Add driver for Mellanox Connect-IB adapters")
Signed-off-by: default avatarAlaa Hleihel <alaa@mellanox.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
parent 05e0cc84
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -319,6 +319,7 @@ static int mlx5_alloc_irq_vectors(struct mlx5_core_dev *dev)
	struct mlx5_eq_table *table = &priv->eq_table;
	int num_eqs = 1 << MLX5_CAP_GEN(dev, log_max_eq);
	int nvec;
	int err;

	nvec = MLX5_CAP_GEN(dev, num_ports) * num_online_cpus() +
	       MLX5_EQ_VEC_COMP_BASE;
@@ -328,21 +329,23 @@ static int mlx5_alloc_irq_vectors(struct mlx5_core_dev *dev)

	priv->irq_info = kcalloc(nvec, sizeof(*priv->irq_info), GFP_KERNEL);
	if (!priv->irq_info)
		goto err_free_msix;
		return -ENOMEM;

	nvec = pci_alloc_irq_vectors(dev->pdev,
			MLX5_EQ_VEC_COMP_BASE + 1, nvec,
			PCI_IRQ_MSIX);
	if (nvec < 0)
		return nvec;
	if (nvec < 0) {
		err = nvec;
		goto err_free_irq_info;
	}

	table->num_comp_vectors = nvec - MLX5_EQ_VEC_COMP_BASE;

	return 0;

err_free_msix:
err_free_irq_info:
	kfree(priv->irq_info);
	return -ENOMEM;
	return err;
}

static void mlx5_free_irq_vectors(struct mlx5_core_dev *dev)