]> Git Repo - J-linux.git/commitdiff
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec
authorDavid S. Miller <[email protected]>
Fri, 6 Sep 2019 13:09:16 +0000 (15:09 +0200)
committerDavid S. Miller <[email protected]>
Fri, 6 Sep 2019 13:09:16 +0000 (15:09 +0200)
Steffen Klassert says:

====================
pull request (net): ipsec 2019-09-05

1) Several xfrm interface fixes from Nicolas Dichtel:
   - Avoid an interface ID corruption on changelink.
   - Fix wrong intterface names in the logs.
   - Fix a list corruption when changing network namespaces.
   - Fix unregistation of the underying phydev.

2) Fix a potential warning when merging xfrm_plocy nodes.
   From Florian Westphal.

Please pull or let me know if there are problems.
====================

Signed-off-by: David S. Miller <[email protected]>
1  2 
net/xfrm/xfrm_policy.c

diff --combined net/xfrm/xfrm_policy.c
index ec94f5795ea4b3b5bce37736a46131f728b987a5,0fa7c5ce3b2cf594bbc99f73a8454067eb50f499..21e939235b3908ba3c363e2a570f41acd316173e
@@@ -912,6 -912,7 +912,7 @@@ restart
                } else if (delta > 0) {
                        p = &parent->rb_right;
                } else {
+                       bool same_prefixlen = node->prefixlen == n->prefixlen;
                        struct xfrm_policy *tmp;
  
                        hlist_for_each_entry(tmp, &n->hhead, bydst) {
                                hlist_del_rcu(&tmp->bydst);
                        }
  
+                       node->prefixlen = prefixlen;
                        xfrm_policy_inexact_list_reinsert(net, node, family);
  
-                       if (node->prefixlen == n->prefixlen) {
+                       if (same_prefixlen) {
                                kfree_rcu(n, rcu);
                                return;
                        }
                        rb_erase(*p, new);
                        kfree_rcu(n, rcu);
                        n = node;
-                       n->prefixlen = prefixlen;
                        goto restart;
                }
        }
@@@ -3269,7 -3271,7 +3271,7 @@@ decode_session4(struct sk_buff *skb, st
        struct flowi4 *fl4 = &fl->u.ip4;
        int oif = 0;
  
 -      if (skb_dst(skb))
 +      if (skb_dst(skb) && skb_dst(skb)->dev)
                oif = skb_dst(skb)->dev->ifindex;
  
        memset(fl4, 0, sizeof(struct flowi4));
@@@ -3387,7 -3389,7 +3389,7 @@@ decode_session6(struct sk_buff *skb, st
  
        nexthdr = nh[nhoff];
  
 -      if (skb_dst(skb))
 +      if (skb_dst(skb) && skb_dst(skb)->dev)
                oif = skb_dst(skb)->dev->ifindex;
  
        memset(fl6, 0, sizeof(struct flowi6));
This page took 0.096937 seconds and 4 git commands to generate.