Message ID | 20220401015334.40252-1-dsahern@kernel.org (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net] xfrm: Pass flowi_oif or l3mdev as oif to xfrm_dst_lookup | expand |
On Thu, 31 Mar 2022 19:53:34 -0600 David Ahern wrote: > To: netdev@vger.kernel.org, kuba@kernel.org, davem@davemloft.net, pabeni@redhat.com > Cc: oliver.sang@intel.com, David Ahern <dsahern@kernel.org> > Subject: [PATCH net] xfrm: Pass flowi_oif or l3mdev as oif to xfrm_dst_lookup This needs Steffen and Herbert on CC. I'd just CC them in but patch was marked as Awaiting upstream in our PW already, so repost would be better. Regardless which tree it ends up getting applied to. > The commit referenced in the Fixes tag no longer changes the > flow oif to the l3mdev ifindex. A xfrm use case was expecting > the flowi_oif to be the VRF if relevant and the change broke > that test. Update xfrm_bundle_create to pass oif if set and any > potential flowi_l3mdev if oif is not set. > > Fixes: 40867d74c374 ("net: Add l3mdev index to flow struct and avoid oif reset for port devices") > Reported-by: kernel test robot <oliver.sang@intel.com> > Signed-off-by: David Ahern <dsahern@kernel.org>
On 4/1/22 12:50 PM, Jakub Kicinski wrote: > On Thu, 31 Mar 2022 19:53:34 -0600 David Ahern wrote: >> To: netdev@vger.kernel.org, kuba@kernel.org, davem@davemloft.net, pabeni@redhat.com >> Cc: oliver.sang@intel.com, David Ahern <dsahern@kernel.org> >> Subject: [PATCH net] xfrm: Pass flowi_oif or l3mdev as oif to xfrm_dst_lookup > > This needs Steffen and Herbert on CC. I'd just CC them in but > patch was marked as Awaiting upstream in our PW already, so > repost would be better. Regardless which tree it ends up getting > applied to. Prior l3mdev stuff went in through net/net-next, hence the cc list for this one. I will re-send adding them. > >> The commit referenced in the Fixes tag no longer changes the >> flow oif to the l3mdev ifindex. A xfrm use case was expecting >> the flowi_oif to be the VRF if relevant and the change broke >> that test. Update xfrm_bundle_create to pass oif if set and any >> potential flowi_l3mdev if oif is not set. >> >> Fixes: 40867d74c374 ("net: Add l3mdev index to flow struct and avoid oif reset for port devices") >> Reported-by: kernel test robot <oliver.sang@intel.com> >> Signed-off-by: David Ahern <dsahern@kernel.org>
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c index 19aa994f5d2c..00bd0ecff5a1 100644 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c @@ -2593,12 +2593,14 @@ static struct dst_entry *xfrm_bundle_create(struct xfrm_policy *policy, if (xfrm[i]->props.mode != XFRM_MODE_TRANSPORT) { __u32 mark = 0; + int oif; if (xfrm[i]->props.smark.v || xfrm[i]->props.smark.m) mark = xfrm_smark_get(fl->flowi_mark, xfrm[i]); family = xfrm[i]->props.family; - dst = xfrm_dst_lookup(xfrm[i], tos, fl->flowi_oif, + oif = fl->flowi_oif ? : fl->flowi_l3mdev; + dst = xfrm_dst_lookup(xfrm[i], tos, oif, &saddr, &daddr, family, mark); err = PTR_ERR(dst); if (IS_ERR(dst))
The commit referenced in the Fixes tag no longer changes the flow oif to the l3mdev ifindex. A xfrm use case was expecting the flowi_oif to be the VRF if relevant and the change broke that test. Update xfrm_bundle_create to pass oif if set and any potential flowi_l3mdev if oif is not set. Fixes: 40867d74c374 ("net: Add l3mdev index to flow struct and avoid oif reset for port devices") Reported-by: kernel test robot <oliver.sang@intel.com> Signed-off-by: David Ahern <dsahern@kernel.org> --- net/xfrm/xfrm_policy.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)