Message ID | 1565637095-7972-1-git-send-email-wenwen@cs.uga.edu |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | [v2] net/mlx4_en: fix a memory leak bug | expand |
On 8/12/2019 10:11 PM, Wenwen Wang wrote: > In mlx4_en_config_rss_steer(), 'rss_map->indir_qp' is allocated through > kzalloc(). After that, mlx4_qp_alloc() is invoked to configure RSS > indirection. However, if mlx4_qp_alloc() fails, the allocated > 'rss_map->indir_qp' is not deallocated, leading to a memory leak bug. > > To fix the above issue, add the 'qp_alloc_err' label to free > 'rss_map->indir_qp'. > > Fixes: 4931c6ef04b4 ("net/mlx4_en: Optimized single ring steering") > > Signed-off-by: Wenwen Wang <wenwen@cs.uga.edu> > --- > drivers/net/ethernet/mellanox/mlx4/en_rx.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c > index 6c01314..db3552f 100644 > --- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c > +++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c > @@ -1187,7 +1187,7 @@ int mlx4_en_config_rss_steer(struct mlx4_en_priv *priv) > err = mlx4_qp_alloc(mdev->dev, priv->base_qpn, rss_map->indir_qp); > if (err) { > en_err(priv, "Failed to allocate RSS indirection QP\n"); > - goto rss_err; > + goto qp_alloc_err; > } > > rss_map->indir_qp->event = mlx4_en_sqp_event; > @@ -1241,6 +1241,7 @@ int mlx4_en_config_rss_steer(struct mlx4_en_priv *priv) > MLX4_QP_STATE_RST, NULL, 0, 0, rss_map->indir_qp); > mlx4_qp_remove(mdev->dev, rss_map->indir_qp); > mlx4_qp_free(mdev->dev, rss_map->indir_qp); > +qp_alloc_err: > kfree(rss_map->indir_qp); > rss_map->indir_qp = NULL; > rss_err: > Thanks for your patch. Reviewed-by: Tariq Toukan <tariqt@mellanox.com>
On Mon, 12 Aug 2019 14:11:35 -0500, Wenwen Wang wrote: > In mlx4_en_config_rss_steer(), 'rss_map->indir_qp' is allocated through > kzalloc(). After that, mlx4_qp_alloc() is invoked to configure RSS > indirection. However, if mlx4_qp_alloc() fails, the allocated > 'rss_map->indir_qp' is not deallocated, leading to a memory leak bug. > > To fix the above issue, add the 'qp_alloc_err' label to free > 'rss_map->indir_qp'. > > Fixes: 4931c6ef04b4 ("net/mlx4_en: Optimized single ring steering") > Signed-off-by: Wenwen Wang <wenwen@cs.uga.edu> Applied, thanks.
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c index 6c01314..db3552f 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c @@ -1187,7 +1187,7 @@ int mlx4_en_config_rss_steer(struct mlx4_en_priv *priv) err = mlx4_qp_alloc(mdev->dev, priv->base_qpn, rss_map->indir_qp); if (err) { en_err(priv, "Failed to allocate RSS indirection QP\n"); - goto rss_err; + goto qp_alloc_err; } rss_map->indir_qp->event = mlx4_en_sqp_event; @@ -1241,6 +1241,7 @@ int mlx4_en_config_rss_steer(struct mlx4_en_priv *priv) MLX4_QP_STATE_RST, NULL, 0, 0, rss_map->indir_qp); mlx4_qp_remove(mdev->dev, rss_map->indir_qp); mlx4_qp_free(mdev->dev, rss_map->indir_qp); +qp_alloc_err: kfree(rss_map->indir_qp); rss_map->indir_qp = NULL; rss_err:
In mlx4_en_config_rss_steer(), 'rss_map->indir_qp' is allocated through kzalloc(). After that, mlx4_qp_alloc() is invoked to configure RSS indirection. However, if mlx4_qp_alloc() fails, the allocated 'rss_map->indir_qp' is not deallocated, leading to a memory leak bug. To fix the above issue, add the 'qp_alloc_err' label to free 'rss_map->indir_qp'. Fixes: 4931c6ef04b4 ("net/mlx4_en: Optimized single ring steering") Signed-off-by: Wenwen Wang <wenwen@cs.uga.edu> --- drivers/net/ethernet/mellanox/mlx4/en_rx.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)