]> git.itanic.dy.fi Git - linux-stable/commitdiff
xfrm: move mark and oif flowi decode into common code
authorFlorian Westphal <fw@strlen.de>
Wed, 4 Oct 2023 16:09:52 +0000 (18:09 +0200)
committerSteffen Klassert <steffen.klassert@secunet.com>
Fri, 6 Oct 2023 06:33:47 +0000 (08:33 +0200)
flowi4_oif/flowi6_oif and mark are aliased to flowi_common field, i.e.
all can be used interchangeably.

Instead of duplicating place this in common code.
No functional changes intended.

Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
net/xfrm/xfrm_policy.c

index 064d1744fa362bf5b962d5d341f9379cf6c7fbfc..da29be0b002f711897f6897a24079a6fc3235834 100644 (file)
@@ -3373,14 +3373,8 @@ decode_session4(struct sk_buff *skb, struct flowi *fl, bool reverse)
        int ihl = iph->ihl;
        u8 *xprth = skb_network_header(skb) + ihl * 4;
        struct flowi4 *fl4 = &fl->u.ip4;
-       int oif = 0;
-
-       if (skb_dst(skb) && skb_dst(skb)->dev)
-               oif = skb_dst(skb)->dev->ifindex;
 
        memset(fl4, 0, sizeof(struct flowi4));
-       fl4->flowi4_mark = skb->mark;
-       fl4->flowi4_oif = reverse ? skb->skb_iif : oif;
 
        fl4->flowi4_proto = iph->protocol;
        fl4->daddr = reverse ? iph->saddr : iph->daddr;
@@ -3451,7 +3445,6 @@ decode_session6(struct sk_buff *skb, struct flowi *fl, bool reverse)
        struct ipv6_opt_hdr *exthdr;
        const unsigned char *nh = skb_network_header(skb);
        u16 nhoff = IP6CB(skb)->nhoff;
-       int oif = 0;
        u8 nexthdr;
 
        if (!nhoff)
@@ -3459,12 +3452,7 @@ decode_session6(struct sk_buff *skb, struct flowi *fl, bool reverse)
 
        nexthdr = nh[nhoff];
 
-       if (skb_dst(skb) && skb_dst(skb)->dev)
-               oif = skb_dst(skb)->dev->ifindex;
-
        memset(fl6, 0, sizeof(struct flowi6));
-       fl6->flowi6_mark = skb->mark;
-       fl6->flowi6_oif = reverse ? skb->skb_iif : oif;
 
        fl6->daddr = reverse ? hdr->saddr : hdr->daddr;
        fl6->saddr = reverse ? hdr->daddr : hdr->saddr;
@@ -3570,6 +3558,18 @@ int __xfrm_decode_session(struct net *net, struct sk_buff *skb, struct flowi *fl
                return -EAFNOSUPPORT;
        }
 
+       fl->flowi_mark = skb->mark;
+       if (reverse) {
+               fl->flowi_oif = skb->skb_iif;
+       } else {
+               int oif = 0;
+
+               if (skb_dst(skb) && skb_dst(skb)->dev)
+                       oif = skb_dst(skb)->dev->ifindex;
+
+               fl->flowi_oif = oif;
+       }
+
        return security_xfrm_decode_session(skb, &fl->flowi_secid);
 }
 EXPORT_SYMBOL(__xfrm_decode_session);