]> git.baikalelectronics.ru Git - kernel.git/commit
xfrm: policy: delete inexact policies from inexact list on hash rebuild
authorFlorian Westphal <fw@strlen.de>
Fri, 4 Jan 2019 13:17:02 +0000 (14:17 +0100)
committerSteffen Klassert <steffen.klassert@secunet.com>
Wed, 9 Jan 2019 12:58:23 +0000 (13:58 +0100)
commit8c6c2aff7fd72084bc3ab8c782542d36559d5044
treea894ebd2fb7513a758f9836c4e1bcf7d5ac1f2c7
parent489b35c950d3625dfddb6d3858ab9711a6e10324
xfrm: policy: delete inexact policies from inexact list on hash rebuild

An xfrm hash rebuild has to reset the inexact policy list before the
policies get re-inserted: A change of hash thresholds will result in
policies to get moved from inexact tree to the policy hash table.

If the thresholds are increased again later, they get moved from hash
table to inexact tree.

We must unlink all policies from the inexact tree before re-insertion.

Otherwise 'migrate' may find policies that are in main hash table a
second time, when it searches the inexact lists.

Furthermore, re-insertion without deletion can cause elements ->next to
point back to itself, causing soft lockups or double-frees.

Reported-by: syzbot+9d971dd21eb26567036b@syzkaller.appspotmail.com
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