Message ID | 4c397061eb9f054cdcc3f5e60716b77c6b7912ad.1728982714.git.gnault@redhat.com (mailing list archive) |
---|---|
State | Awaiting Upstream |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | xfrm: Convert __xfrm4_dst_lookup() and its callers to dscp_t. | expand |
On Tue, Oct 15, 2024 at 2:14 AM Guillaume Nault <gnault@redhat.com> wrote: > > Pass a dscp_t variable to xfrm_dst_lookup(), instead of an int, to > prevent accidental setting of ECN bits in ->flowi4_tos. > > Only xfrm_bundle_create() actually calls xfrm_dst_lookup(). Since it > already has a dscp_t variable to pass as parameter, we only need to > remove the inet_dscp_to_dsfield() conversion. > > Signed-off-by: Guillaume Nault <gnault@redhat.com> > --- > net/xfrm/xfrm_policy.c | 10 +++++----- > 1 file changed, 5 insertions(+), 5 deletions(-) > > diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c > index c6ea3ca69e95..6e30b110accf 100644 > --- a/net/xfrm/xfrm_policy.c > +++ b/net/xfrm/xfrm_policy.c > @@ -291,7 +291,7 @@ struct dst_entry *__xfrm_dst_lookup(struct net *net, int tos, int oif, > EXPORT_SYMBOL(__xfrm_dst_lookup); > > static inline struct dst_entry *xfrm_dst_lookup(struct xfrm_state *x, > - int tos, int oif, > + dscp_t dscp, int oif, FWIW this looks like it's going to conflict with a commit currently in the ipsec tree: https://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec.git/commit/?id=e509996b16728e37d5a909a5c63c1bd64f23b306 Eyal.
On Tue, Oct 15, 2024 at 04:48:57AM -0700, Eyal Birger wrote: > On Tue, Oct 15, 2024 at 2:14 AM Guillaume Nault <gnault@redhat.com> wrote: > > > > Pass a dscp_t variable to xfrm_dst_lookup(), instead of an int, to > > prevent accidental setting of ECN bits in ->flowi4_tos. > > > > Only xfrm_bundle_create() actually calls xfrm_dst_lookup(). Since it > > already has a dscp_t variable to pass as parameter, we only need to > > remove the inet_dscp_to_dsfield() conversion. > > > > Signed-off-by: Guillaume Nault <gnault@redhat.com> > > --- > > net/xfrm/xfrm_policy.c | 10 +++++----- > > 1 file changed, 5 insertions(+), 5 deletions(-) > > > > diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c > > index c6ea3ca69e95..6e30b110accf 100644 > > --- a/net/xfrm/xfrm_policy.c > > +++ b/net/xfrm/xfrm_policy.c > > @@ -291,7 +291,7 @@ struct dst_entry *__xfrm_dst_lookup(struct net *net, int tos, int oif, > > EXPORT_SYMBOL(__xfrm_dst_lookup); > > > > static inline struct dst_entry *xfrm_dst_lookup(struct xfrm_state *x, > > - int tos, int oif, > > + dscp_t dscp, int oif, > > > FWIW this looks like it's going to conflict with a commit currently in > the ipsec tree: > https://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec.git/commit/?id=e509996b16728e37d5a909a5c63c1bd64f23b306 Indeed. I'll send v2 once the ipsec tree will be merged. Thanks! > Eyal. >
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c index c6ea3ca69e95..6e30b110accf 100644 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c @@ -291,7 +291,7 @@ struct dst_entry *__xfrm_dst_lookup(struct net *net, int tos, int oif, EXPORT_SYMBOL(__xfrm_dst_lookup); static inline struct dst_entry *xfrm_dst_lookup(struct xfrm_state *x, - int tos, int oif, + dscp_t dscp, int oif, xfrm_address_t *prev_saddr, xfrm_address_t *prev_daddr, int family, u32 mark) @@ -310,7 +310,8 @@ static inline struct dst_entry *xfrm_dst_lookup(struct xfrm_state *x, daddr = x->coaddr; } - dst = __xfrm_dst_lookup(net, tos, oif, saddr, daddr, family, mark); + dst = __xfrm_dst_lookup(net, inet_dscp_to_dsfield(dscp), oif, saddr, + daddr, family, mark); if (!IS_ERR(dst)) { if (prev_saddr != saddr) @@ -2695,9 +2696,8 @@ static struct dst_entry *xfrm_bundle_create(struct xfrm_policy *policy, family = xfrm[i]->props.family; oif = fl->flowi_oif ? : fl->flowi_l3mdev; - dst = xfrm_dst_lookup(xfrm[i], - inet_dscp_to_dsfield(dscp), oif, - &saddr, &daddr, family, mark); + dst = xfrm_dst_lookup(xfrm[i], dscp, oif, &saddr, + &daddr, family, mark); err = PTR_ERR(dst); if (IS_ERR(dst)) goto put_states;
Pass a dscp_t variable to xfrm_dst_lookup(), instead of an int, to prevent accidental setting of ECN bits in ->flowi4_tos. Only xfrm_bundle_create() actually calls xfrm_dst_lookup(). Since it already has a dscp_t variable to pass as parameter, we only need to remove the inet_dscp_to_dsfield() conversion. Signed-off-by: Guillaume Nault <gnault@redhat.com> --- net/xfrm/xfrm_policy.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)