|
Thomas Bogendoerfer |
9e3578 |
From: Or Gerlitz <ogerlitz@mellanox.com>
|
|
Thomas Bogendoerfer |
9e3578 |
Date: Tue, 13 Mar 2018 21:43:43 +0200
|
|
Thomas Bogendoerfer |
9e3578 |
Subject: net/mlx5e: Avoid using the ipv6 stub in the TC offload neigh update
|
|
Thomas Bogendoerfer |
9e3578 |
path
|
|
Thomas Bogendoerfer |
9e3578 |
Patch-mainline: v4.16
|
|
Thomas Bogendoerfer |
9e3578 |
Git-commit: 423c9db29943cfc43e3a408192e9efa4178af6a1
|
|
Thomas Bogendoerfer |
9e3578 |
References: bsc#1046303 FATE#322944
|
|
Thomas Bogendoerfer |
9e3578 |
|
|
Thomas Bogendoerfer |
9e3578 |
Currently we use the global ipv6_stub var to access the ipv6 global
|
|
Thomas Bogendoerfer |
9e3578 |
nd table. This practice gets us to troubles when the stub is only partially
|
|
Thomas Bogendoerfer |
9e3578 |
set e.g when ipv6 is loaded under the disabled policy. In this case, as of commit
|
|
Thomas Bogendoerfer |
9e3578 |
343d60aada5a ("ipv6: change ipv6_stub_impl.ipv6_dst_lookup to take net argument")
|
|
Thomas Bogendoerfer |
9e3578 |
the stub is not null, but stub->nd_tbl is and we crash.
|
|
Thomas Bogendoerfer |
9e3578 |
|
|
Thomas Bogendoerfer |
9e3578 |
As we can access the ipv6 nd_tbl directly, the fix is just to avoid the
|
|
Thomas Bogendoerfer |
9e3578 |
reference through the stub. There is one place in the code where we
|
|
Thomas Bogendoerfer |
9e3578 |
issue ipv6 route lookup and keep doing it through the stub, but that
|
|
Thomas Bogendoerfer |
9e3578 |
mentioned commit makes sure we get -EAFNOSUPPORT from the stack.
|
|
Thomas Bogendoerfer |
9e3578 |
|
|
Thomas Bogendoerfer |
9e3578 |
Fixes: 232c001398ae ("net/mlx5e: Add support to neighbour update flow")
|
|
Thomas Bogendoerfer |
9e3578 |
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
|
|
Thomas Bogendoerfer |
9e3578 |
Reviewed-by: Aviv Heller <avivh@mellanox.com>
|
|
Thomas Bogendoerfer |
9e3578 |
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
|
|
Thomas Bogendoerfer |
9e3578 |
Acked-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
|
|
Thomas Bogendoerfer |
9e3578 |
---
|
|
Thomas Bogendoerfer |
9e3578 |
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 6 +++---
|
|
Thomas Bogendoerfer |
9e3578 |
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 2 +-
|
|
Thomas Bogendoerfer |
9e3578 |
2 files changed, 4 insertions(+), 4 deletions(-)
|
|
Thomas Bogendoerfer |
9e3578 |
|
|
Thomas Bogendoerfer |
9e3578 |
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
|
|
Thomas Bogendoerfer |
9e3578 |
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
|
|
Thomas Bogendoerfer |
9e3578 |
@@ -235,7 +235,7 @@ void mlx5e_remove_sqs_fwd_rules(struct m
|
|
Thomas Bogendoerfer |
9e3578 |
static void mlx5e_rep_neigh_update_init_interval(struct mlx5e_rep_priv *rpriv)
|
|
Thomas Bogendoerfer |
9e3578 |
{
|
|
Thomas Bogendoerfer |
9e3578 |
#if IS_ENABLED(CONFIG_IPV6)
|
|
Thomas Bogendoerfer |
9e3578 |
- unsigned long ipv6_interval = NEIGH_VAR(&ipv6_stub->nd_tbl->parms,
|
|
Thomas Bogendoerfer |
9e3578 |
+ unsigned long ipv6_interval = NEIGH_VAR(&nd_tbl.parms,
|
|
Thomas Bogendoerfer |
9e3578 |
DELAY_PROBE_TIME);
|
|
Thomas Bogendoerfer |
9e3578 |
#else
|
|
Thomas Bogendoerfer |
9e3578 |
unsigned long ipv6_interval = ~0UL;
|
|
Thomas Bogendoerfer |
9e3578 |
@@ -371,7 +371,7 @@ static int mlx5e_rep_netevent_event(stru
|
|
Thomas Bogendoerfer |
9e3578 |
case NETEVENT_NEIGH_UPDATE:
|
|
Thomas Bogendoerfer |
9e3578 |
n = ptr;
|
|
Thomas Bogendoerfer |
9e3578 |
#if IS_ENABLED(CONFIG_IPV6)
|
|
Thomas Bogendoerfer |
9e3578 |
- if (n->tbl != ipv6_stub->nd_tbl && n->tbl != &arp_tbl)
|
|
Thomas Bogendoerfer |
9e3578 |
+ if (n->tbl != &nd_tbl && n->tbl != &arp_tbl)
|
|
Thomas Bogendoerfer |
9e3578 |
#else
|
|
Thomas Bogendoerfer |
9e3578 |
if (n->tbl != &arp_tbl)
|
|
Thomas Bogendoerfer |
9e3578 |
#endif
|
|
Thomas Bogendoerfer |
9e3578 |
@@ -419,7 +419,7 @@ static int mlx5e_rep_netevent_event(stru
|
|
Thomas Bogendoerfer |
9e3578 |
* done per device delay prob time parameter.
|
|
Thomas Bogendoerfer |
9e3578 |
*/
|
|
Thomas Bogendoerfer |
9e3578 |
#if IS_ENABLED(CONFIG_IPV6)
|
|
Thomas Bogendoerfer |
9e3578 |
- if (!p->dev || (p->tbl != ipv6_stub->nd_tbl && p->tbl != &arp_tbl))
|
|
Thomas Bogendoerfer |
9e3578 |
+ if (!p->dev || (p->tbl != &nd_tbl && p->tbl != &arp_tbl))
|
|
Thomas Bogendoerfer |
9e3578 |
#else
|
|
Thomas Bogendoerfer |
9e3578 |
if (!p->dev || p->tbl != &arp_tbl)
|
|
Thomas Bogendoerfer |
9e3578 |
#endif
|
|
Thomas Bogendoerfer |
9e3578 |
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
|
|
Thomas Bogendoerfer |
9e3578 |
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
|
|
Thomas Bogendoerfer |
9e3578 |
@@ -484,7 +484,7 @@ void mlx5e_tc_update_neigh_used_value(st
|
|
Thomas Bogendoerfer |
9e3578 |
tbl = &arp_tbl;
|
|
Thomas Bogendoerfer |
9e3578 |
#if IS_ENABLED(CONFIG_IPV6)
|
|
Thomas Bogendoerfer |
9e3578 |
else if (m_neigh->family == AF_INET6)
|
|
Thomas Bogendoerfer |
9e3578 |
- tbl = ipv6_stub->nd_tbl;
|
|
Thomas Bogendoerfer |
9e3578 |
+ tbl = &nd_tbl;
|
|
Thomas Bogendoerfer |
9e3578 |
#endif
|
|
Thomas Bogendoerfer |
9e3578 |
else
|
|
Thomas Bogendoerfer |
9e3578 |
return;
|