Commit-ID: 1a9e2c0d1b7e24642074de9083206bea2b7da581 Gitweb: http://git.kernel.org/tip/1a9e2c0d1b7e24642074de9083206bea2b7da581 Author: Michel Lespinasse <walken@xxxxxxxxxx> AuthorDate: Sat, 24 Nov 2012 18:44:22 -0800 Committer: Pekka Enberg <penberg@xxxxxxxxxx> CommitDate: Tue, 11 Dec 2012 12:29:36 +0200 kvm tools: ensure non-overlapping intervals in rb_int_insert() The rbtree interval API is designed for handling non-overlapping intervals; modify rb_int_insert() to guarantee this property is maintained by returning -EEXIST when attempting to insert a new interval that overlaps an existing interval. Also fix an issue where the computation of 'result' could trigger an integer overflow which would break the rbtree ordering. Signed-off-by: Michel Lespinasse <walken@xxxxxxxxxx> Signed-off-by: Pekka Enberg <penberg@xxxxxxxxxx> --- tools/kvm/util/rbtree-interval.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tools/kvm/util/rbtree-interval.c b/tools/kvm/util/rbtree-interval.c index d7fa96a..fd69252 100644 --- a/tools/kvm/util/rbtree-interval.c +++ b/tools/kvm/util/rbtree-interval.c @@ -99,13 +99,13 @@ int rb_int_insert(struct rb_root *root, struct rb_int_node *i_node) struct rb_node **node = &root->rb_node, *parent = NULL; while (*node) { - int result = i_node->low - rb_int(*node)->low; + struct rb_int_node *cur = rb_int(*node); parent = *node; - if (result < 0) - node = &((*node)->rb_left); - else if (result > 0) - node = &((*node)->rb_right); + if (i_node->high <= cur->low) + node = &cur->node.rb_left; + else if (cur->high <= i_node->low) + node = &cur->node.rb_right; else return -EEXIST; } -- To unsubscribe from this list: send the line "unsubscribe linux-tip-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html