summaryrefslogtreecommitdiff
authorPablo Neira Ayuso <pablo@netfilter.org>2019-03-12 11:10:59 (GMT)
committer Greg Kroah-Hartman <gregkh@linuxfoundation.org>2019-05-04 06:49:06 (GMT)
commit54fa5832c0e34b734d90576ca48cc01e52942d82 (patch)
tree3f15aa3b8b03af68c7d45b26dc7f87e4a22eec56
parentaba0a087a00096c3831b6524852a972df5f5f3d9 (diff)
downloadcommon-54fa5832c0e34b734d90576ca48cc01e52942d82.zip
common-54fa5832c0e34b734d90576ca48cc01e52942d82.tar.gz
common-54fa5832c0e34b734d90576ca48cc01e52942d82.tar.bz2
netfilter: nft_set_rbtree: check for inactive element after flag mismatch
[ Upstream commit 05b7639da55f5555b9866a1f4b7e8995232a6323 ] Otherwise, we hit bogus ENOENT when removing elements. Fixes: e701001e7cbe ("netfilter: nft_rbtree: allow adjacent intervals with dynamic updates") Reported-by: Václav Zindulka <vaclav.zindulka@tlapnet.cz> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> Signed-off-by: Sasha Levin (Microsoft) <sashal@kernel.org>
Diffstat
-rw-r--r--net/netfilter/nft_set_rbtree.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/net/netfilter/nft_set_rbtree.c b/net/netfilter/nft_set_rbtree.c
index 93820e0..4ee8acd 100644
--- a/net/netfilter/nft_set_rbtree.c
+++ b/net/netfilter/nft_set_rbtree.c
@@ -191,10 +191,6 @@ static void *nft_rbtree_deactivate(const struct net *net,
else if (d > 0)
parent = parent->rb_right;
else {
- if (!nft_set_elem_active(&rbe->ext, genmask)) {
- parent = parent->rb_left;
- continue;
- }
if (nft_rbtree_interval_end(rbe) &&
!nft_rbtree_interval_end(this)) {
parent = parent->rb_left;
@@ -203,6 +199,9 @@ static void *nft_rbtree_deactivate(const struct net *net,
nft_rbtree_interval_end(this)) {
parent = parent->rb_right;
continue;
+ } else if (!nft_set_elem_active(&rbe->ext, genmask)) {
+ parent = parent->rb_left;
+ continue;
}
nft_set_elem_change_active(net, set, &rbe->ext);
return rbe;