xfrm: Convert struct xfrm_dst_lookup_params -> tos to dscp_t.

Add type annotation to the "tos" field of struct xfrm_dst_lookup_params,
to ensure that the ECN bits aren't mistakenly taken into account when
doing route lookups. Rename that field (tos -> dscp) to make that
change explicit.

Signed-off-by: Guillaume Nault <gnault@redhat.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
This commit is contained in:
Guillaume Nault 2024-10-31 16:52:57 +01:00 committed by Steffen Klassert
parent 3021a2a340
commit e57dfaa4b0
3 changed files with 5 additions and 3 deletions

View File

@ -19,6 +19,7 @@
#include <net/sock.h> #include <net/sock.h>
#include <net/dst.h> #include <net/dst.h>
#include <net/inet_dscp.h>
#include <net/ip.h> #include <net/ip.h>
#include <net/route.h> #include <net/route.h>
#include <net/ipv6.h> #include <net/ipv6.h>
@ -354,7 +355,7 @@ void xfrm_if_unregister_cb(void);
struct xfrm_dst_lookup_params { struct xfrm_dst_lookup_params {
struct net *net; struct net *net;
int tos; dscp_t dscp;
int oif; int oif;
xfrm_address_t *saddr; xfrm_address_t *saddr;
xfrm_address_t *daddr; xfrm_address_t *daddr;

View File

@ -14,6 +14,7 @@
#include <linux/inetdevice.h> #include <linux/inetdevice.h>
#include <net/dst.h> #include <net/dst.h>
#include <net/xfrm.h> #include <net/xfrm.h>
#include <net/inet_dscp.h>
#include <net/ip.h> #include <net/ip.h>
#include <net/l3mdev.h> #include <net/l3mdev.h>
@ -24,7 +25,7 @@ static struct dst_entry *__xfrm4_dst_lookup(struct flowi4 *fl4,
memset(fl4, 0, sizeof(*fl4)); memset(fl4, 0, sizeof(*fl4));
fl4->daddr = params->daddr->a4; fl4->daddr = params->daddr->a4;
fl4->flowi4_tos = params->tos; fl4->flowi4_tos = inet_dscp_to_dsfield(params->dscp);
fl4->flowi4_l3mdev = l3mdev_master_ifindex_by_index(params->net, fl4->flowi4_l3mdev = l3mdev_master_ifindex_by_index(params->net,
params->oif); params->oif);
fl4->flowi4_mark = params->mark; fl4->flowi4_mark = params->mark;

View File

@ -312,7 +312,7 @@ static inline struct dst_entry *xfrm_dst_lookup(struct xfrm_state *x,
params.net = net; params.net = net;
params.saddr = saddr; params.saddr = saddr;
params.daddr = daddr; params.daddr = daddr;
params.tos = inet_dscp_to_dsfield(dscp); params.dscp = dscp;
params.oif = oif; params.oif = oif;
params.mark = mark; params.mark = mark;
params.ipproto = x->id.proto; params.ipproto = x->id.proto;