mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
xfrm: policy: fix infinite loop when merging src-nodes
With very small change to test script we can trigger softlockup due to
bogus assignment of 'p' (policy to be examined) on restart.
Previously the two to-be-merged nodes had same address/prefixlength pair,
so no erase/reinsert was necessary, we only had to append the list from
node a to b.
If prefix lengths are different, the node has to be deleted and re-inserted
into the tree, with the updated prefix length. This was broken; due to
bogus update to 'p' this loops forever.
Add a 'restart' label and use that instead.
While at it, don't perform the unneeded reinserts of the policies that
are already sorted into the 'new' node.
A previous patch in this series made xfrm_policy_inexact_list_reinsert()
use the relative position indicator to sort policies according to age in
case priorities are identical.
Fixes: 6ac098b2a9 ("xfrm: policy: add 2nd-level saddr trees for inexact policies")
Signed-off-by: Florian Westphal <[email protected]>
Signed-off-by: Steffen Klassert <[email protected]>
This commit is contained in:
parent
fcf86f55f2
commit
12750abad5
2 changed files with 9 additions and 10 deletions
|
|
@ -78,8 +78,8 @@ do_overlap()
|
|||
# adds a new node in the 10.0.0.0/24 tree (dst node exists).
|
||||
ip -net $ns xfrm policy add src 10.2.0.0/24 dst 10.0.0.0/24 dir fwd priority 200 action block
|
||||
|
||||
# adds a 10.2.0.0/24 node, but for different dst.
|
||||
ip -net $ns xfrm policy add src 10.2.0.0/24 dst 10.0.1.0/24 dir fwd priority 200 action block
|
||||
# adds a 10.2.0.0/23 node, but for different dst.
|
||||
ip -net $ns xfrm policy add src 10.2.0.0/23 dst 10.0.1.0/24 dir fwd priority 200 action block
|
||||
|
||||
# dst now overlaps with the 10.0.1.0/24 ESP policy in fwd.
|
||||
# kernel must 'promote' existing one (10.0.0.0/24) to 10.0.0.0/23.
|
||||
|
|
|
|||
Loading…
Reference in a new issue