[CRIU] [PATCH] kcmp: Fix ret code comparison

Cyrill Gorcunov gorcunov at openvz.org
Mon Apr 21 13:33:53 PDT 2014


In the early draft of kcmp syscall it has been returning
[-1|0|1] values but finally [0|1|2] were merged into the
kernel, but I forgot to update the criu code. The good
thing is that because we're using rbtree the kcmp results
are still sorted and tree is balanced but sometime we may
take a wrong branch generating new ID even if the object
is present in the tree which eventually may lead to dump
faulure.

Reported-by: Deyan Doychev <deyan at 1h.com>
Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
---
 kcmp-ids.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/kcmp-ids.c b/kcmp-ids.c
index 3f75cff33f46..f42685e9fff0 100644
--- a/kcmp-ids.c
+++ b/kcmp-ids.c
@@ -149,12 +149,14 @@ static u32 kid_generate_sub(struct kid_tree *tree, struct kid_entry *e,
 				this->elem.idx, elem->idx);
 
 		parent = *new;
-		if (ret < 0)
+		if (ret == 1)
 			node = node->rb_left, new = &((*new)->rb_left);
-		else if (ret > 0)
+		else if (ret == 2)
 			node = node->rb_right, new = &((*new)->rb_right);
-		else
+		else if (ret == 0)
 			return this->subid;
+		else
+			BUG();
 	}
 
 	sub = alloc_kid_entry(tree, elem);
-- 
1.8.3.1



More information about the CRIU mailing list