]> git.baikalelectronics.ru Git - kernel.git/commit
xfrm: policy: fix reinsertion on node merge
authorFlorian Westphal <fw@strlen.de>
Fri, 4 Jan 2019 13:17:03 +0000 (14:17 +0100)
committerSteffen Klassert <steffen.klassert@secunet.com>
Wed, 9 Jan 2019 12:58:23 +0000 (13:58 +0100)
commit0fdd579f65c0b39926d494ffeee78c3a4b82179a
treecdcc736efb633984c64db03202b128abca86ac81
parent8c6c2aff7fd72084bc3ab8c782542d36559d5044
xfrm: policy: fix reinsertion on node merge

"newpos" has wrong scope.  It must be NULL on each iteration of the loop.
Otherwise, when policy is to be inserted at the start, we would instead
insert at point found by the previous loop-iteration instead.

Also, we need to unlink the policy before we reinsert it to the new node,
else we can get next-points-to-self loops.

Because policies are only ordered by priority it is irrelevant which policy
is "more recent" except when two policies have same priority.
(the more recent one is placed after the older one).

In these cases, we can use the ->pos id number to know which one is the
'older': the higher the id, the more recent the policy.

So we only need to unlink all policies from the node that is about to be
removed, and insert them to the replacement node.

Fixes: 9de1558b04a392 ("xfrm: policy: store inexact policies in a tree ordered by destination address")
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
net/xfrm/xfrm_policy.c