| From 0031274acd735d4ecbae1a6cdcb8d984ba8304c7 Mon Sep 17 00:00:00 2001 |
| From: Parav Pandit <parav@mellanox.com> |
| Date: Thu, 19 Sep 2019 15:58:14 -0500 |
| Subject: [PATCH] net/mlx5: Fix rtable reference leak |
| |
| commit 2347cee83b2bd868bde2d283db0fac89f22be4e0 upstream. |
| |
| If the rt entry gateway family is not AF_INET for multipath device, |
| rtable reference is leaked. |
| Hence, fix it by releasing the reference. |
| |
| Fixes: 5fb091e8130b ("net/mlx5e: Use hint to resolve route when in HW multipath mode") |
| Fixes: e32ee6c78efa ("net/mlx5e: Support tunnel encap over tagged Ethernet") |
| Signed-off-by: Parav Pandit <parav@mellanox.com> |
| Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun.c b/drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun.c |
| index 231e7cdfc6f7..03c39b9d36ce 100644 |
| --- a/drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun.c |
| +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun.c |
| @@ -75,15 +75,19 @@ static int mlx5e_route_lookup_ipv4(struct mlx5e_priv *priv, |
| if (ret) |
| return ret; |
| |
| - if (mlx5_lag_is_multipath(mdev) && rt->rt_gw_family != AF_INET) |
| + if (mlx5_lag_is_multipath(mdev) && rt->rt_gw_family != AF_INET) { |
| + ip_rt_put(rt); |
| return -ENETUNREACH; |
| + } |
| #else |
| return -EOPNOTSUPP; |
| #endif |
| |
| ret = get_route_and_out_devs(priv, rt->dst.dev, route_dev, out_dev); |
| - if (ret < 0) |
| + if (ret < 0) { |
| + ip_rt_put(rt); |
| return ret; |
| + } |
| |
| if (!(*out_ttl)) |
| *out_ttl = ip4_dst_hoplimit(&rt->dst); |
| @@ -127,8 +131,10 @@ static int mlx5e_route_lookup_ipv6(struct mlx5e_priv *priv, |
| *out_ttl = ip6_dst_hoplimit(dst); |
| |
| ret = get_route_and_out_devs(priv, dst->dev, route_dev, out_dev); |
| - if (ret < 0) |
| + if (ret < 0) { |
| + dst_release(dst); |
| return ret; |
| + } |
| #else |
| return -EOPNOTSUPP; |
| #endif |
| -- |
| 2.7.4 |
| |