]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
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)
committerPaolo Pisati <paolo.pisati@canonical.com>
Fri, 28 Jan 2022 10:03:26 +0000 (11:03 +0100)
BugLink: https://bugs.launchpad.net/bugs/1959376
commit 48d67543e01d73292e0bb66d3f10fc422e79e031 upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>
drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun.c

index 4a13ef561587d8797e08e52bdcb5e6cb4d9049a6..cf03297c847101701fcd9e05c6044de7d5797ce5 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>
@@ -229,7 +230,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;
@@ -344,7 +345,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;