summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Hurley <john.hurley@netronome.com>2018-07-20 21:07:54 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2018-07-28 07:57:15 +0200
commit3313c38be9f42432e0fbfca1dfc924ac51973fb0 (patch)
tree9a026b430ce4b5892953fdc33e2b9bbea6d52dbe
parentdead7d65a7c664fa2797add93c5f493223afe21c (diff)
downloadlinux-stable-3313c38be9f42432e0fbfca1dfc924ac51973fb0.tar.gz
linux-stable-3313c38be9f42432e0fbfca1dfc924ac51973fb0.tar.bz2
linux-stable-3313c38be9f42432e0fbfca1dfc924ac51973fb0.zip
nfp: flower: ensure dead neighbour entries are not offloaded
[ Upstream commit b809ec869b2cf2af053ffd99e5a46ab600e94aa2 ] Previously only the neighbour state was checked to decide if an offloaded entry should be removed. However, there can be situations when the entry is dead but still marked as valid. This can lead to dead entries not being removed from fw tables or even incorrect data being added. Check the entry dead bit before deciding if it should be added to or removed from fw neighbour tables. Fixes: 8e6a9046b66a ("nfp: flower vxlan neighbour offload") Signed-off-by: John Hurley <john.hurley@netronome.com> Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c b/drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c
index ec524d97869d..5ef61132604e 100644
--- a/drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c
+++ b/drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c
@@ -317,7 +317,7 @@ nfp_tun_write_neigh(struct net_device *netdev, struct nfp_app *app,
payload.dst_ipv4 = flow->daddr;
/* If entry has expired send dst IP with all other fields 0. */
- if (!(neigh->nud_state & NUD_VALID)) {
+ if (!(neigh->nud_state & NUD_VALID) || neigh->dead) {
nfp_tun_del_route_from_cache(app, payload.dst_ipv4);
/* Trigger ARP to verify invalid neighbour state. */
neigh_event_send(neigh, NULL);