mirror of
https://github.com/torvalds/linux.git
synced 2026-05-12 16:18:45 +02:00
ipv4: Prepare inet_rtm_getroute() to .flowi4_tos conversion.
Store rtm->rtm_tos in a dscp_t variable, which can then be used for setting fl4.flowi4_tos and also be passed as parameter of ip_route_input_rcu(). The .flowi4_tos field is going to be converted to dscp_t to ensure ECN bits aren't erroneously taken into account during route lookups. Having a dscp_t variable available will simplify that conversion, as we'll just have to drop the inet_dscp_to_dsfield() call. Note that we can't just convert rtm->rtm_tos to dscp_t because this structure is exported to user space. Signed-off-by: Guillaume Nault <gnault@redhat.com> Reviewed-by: Ido Schimmel <idosch@nvidia.com> Link: https://patch.msgid.link/7bc1c7dc47ad1393569095d334521fae59af5bc7.1736944951.git.gnault@redhat.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
2c77bcb344
commit
65a55aa7e6
|
|
@ -3270,6 +3270,7 @@ static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh,
|
|||
struct flowi4 fl4 = {};
|
||||
__be32 dst = 0;
|
||||
__be32 src = 0;
|
||||
dscp_t dscp;
|
||||
kuid_t uid;
|
||||
u32 iif;
|
||||
int err;
|
||||
|
|
@ -3284,6 +3285,7 @@ static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh,
|
|||
dst = nla_get_in_addr_default(tb[RTA_DST], 0);
|
||||
iif = nla_get_u32_default(tb[RTA_IIF], 0);
|
||||
mark = nla_get_u32_default(tb[RTA_MARK], 0);
|
||||
dscp = inet_dsfield_to_dscp(rtm->rtm_tos);
|
||||
if (tb[RTA_UID])
|
||||
uid = make_kuid(current_user_ns(), nla_get_u32(tb[RTA_UID]));
|
||||
else
|
||||
|
|
@ -3308,7 +3310,7 @@ static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh,
|
|||
|
||||
fl4.daddr = dst;
|
||||
fl4.saddr = src;
|
||||
fl4.flowi4_tos = rtm->rtm_tos & INET_DSCP_MASK;
|
||||
fl4.flowi4_tos = inet_dscp_to_dsfield(dscp);
|
||||
fl4.flowi4_oif = nla_get_u32_default(tb[RTA_OIF], 0);
|
||||
fl4.flowi4_mark = mark;
|
||||
fl4.flowi4_uid = uid;
|
||||
|
|
@ -3332,9 +3334,8 @@ static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh,
|
|||
fl4.flowi4_iif = iif; /* for rt_fill_info */
|
||||
skb->dev = dev;
|
||||
skb->mark = mark;
|
||||
err = ip_route_input_rcu(skb, dst, src,
|
||||
inet_dsfield_to_dscp(rtm->rtm_tos),
|
||||
dev, &res) ? -EINVAL : 0;
|
||||
err = ip_route_input_rcu(skb, dst, src, dscp, dev,
|
||||
&res) ? -EINVAL : 0;
|
||||
|
||||
rt = skb_rtable(skb);
|
||||
if (err == 0 && rt->dst.error)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user