OSDN Git Service

mlx5: Don't accidentally set RTO_ONLINK before mlx5e_route_lookup_ipv4_get()
authorGuillaume Nault <gnault@redhat.com>
Mon, 10 Jan 2022 13:43:14 +0000 (14:43 +0100)
committerJakub Kicinski <kuba@kernel.org>
Wed, 12 Jan 2022 04:36:09 +0000 (20:36 -0800)
Mask the ECN bits before calling mlx5e_route_lookup_ipv4_get(). The
tunnel key might have the last ECN bit set. This interferes with the
route lookup process as ip_route_output_key_hash() interpretes this bit
specially (to restrict the route scope).

Found by code inspection, compile tested only.

Fixes: c7b9038d8af6 ("net/mlx5e: TC preparation refactoring for routing update event")
Fixes: 9a941117fb76 ("net/mlx5e: Maximize ip tunnel key usage on the TC offloading path")
Signed-off-by: Guillaume Nault <gnault@redhat.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun.c

index 3381524..378fc8e 100644 (file)
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
 /* Copyright (c) 2018 Mellanox Technologies. */
 
+#include <net/inet_ecn.h>
 #include <net/vxlan.h>
 #include <net/gre.h>
 #include <net/geneve.h>
@@ -235,7 +236,7 @@ int mlx5e_tc_tun_create_header_ipv4(struct mlx5e_priv *priv,
        int err;
 
        /* add the IP fields */
-       attr.fl.fl4.flowi4_tos = tun_key->tos;
+       attr.fl.fl4.flowi4_tos = tun_key->tos & ~INET_ECN_MASK;
        attr.fl.fl4.daddr = tun_key->u.ipv4.dst;
        attr.fl.fl4.saddr = tun_key->u.ipv4.src;
        attr.ttl = tun_key->ttl;
@@ -350,7 +351,7 @@ int mlx5e_tc_tun_update_header_ipv4(struct mlx5e_priv *priv,
        int err;
 
        /* add the IP fields */
-       attr.fl.fl4.flowi4_tos = tun_key->tos;
+       attr.fl.fl4.flowi4_tos = tun_key->tos & ~INET_ECN_MASK;
        attr.fl.fl4.daddr = tun_key->u.ipv4.dst;
        attr.fl.fl4.saddr = tun_key->u.ipv4.src;
        attr.ttl = tun_key->ttl;