From: David S. Miller Date: Fri, 6 Sep 2019 13:09:16 +0000 (+0200) Subject: Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec X-Git-Tag: v5.3~5^2~36 X-Git-Url: https://repo.jachan.dev/J-linux.git/commitdiff_plain/2e9550ed67cc861e6607d63e7d1036dce28f4902?hp=-c Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec 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 --- 2e9550ed67cc861e6607d63e7d1036dce28f4902 diff --combined net/xfrm/xfrm_policy.c index ec94f5795ea4,0fa7c5ce3b2c..21e939235b39 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c @@@ -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) { @@@ -919,9 -920,11 +920,11 @@@ 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; } @@@ -929,7 -932,6 +932,6 @@@ 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));