• Florian Westphal's avatar
    xfrm: policy: fix infinite loop when merging src-nodes · 12750aba
    Florian Westphal authored
    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: 6ac098b2 ("xfrm: policy: add 2nd-level saddr trees for inexact policies")
    Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
    Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
    12750aba
xfrm_policy.c 101 KB