From d23939da8c1b742690abd257417c8715f9fece60 Mon Sep 17 00:00:00 2001 From: Dominique Martinet Date: Fri, 22 Sep 2017 10:06:59 +0900 Subject: [PATCH] process/vm: fix lookup_process_memory_range (again) That optimistically going left was a more serious bug than just last iteration, we could just pass by a match and continue down the tree if the match was not a leaf. Fix the actual algorithm issue Conflicts: kernel/process.c --- kernel/process.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/kernel/process.c b/kernel/process.c index c26dc638..7c9afaf4 100644 --- a/kernel/process.c +++ b/kernel/process.c @@ -1293,7 +1293,7 @@ struct vm_range *lookup_process_memory_range( int i; struct vm_range *range = NULL, *match = NULL; struct rb_root *root = &vm->vm_range_tree; - struct rb_node *node = root->rb_node, *prev = NULL; + struct rb_node *node = root->rb_node; dkprintf("lookup_process_memory_range(%p,%lx,%lx)\n", vm, start, end); @@ -1312,7 +1312,6 @@ struct vm_range *lookup_process_memory_range( } while (node) { - prev = node; range = rb_entry(node, struct vm_range, vm_rb_node); if (end <= range->start) { node = node->rb_left; @@ -1329,10 +1328,6 @@ struct vm_range *lookup_process_memory_range( } } - /* We optimistically try to go left, go back if we went too far */ - if (!node && range && start < range->end) - node = prev; - if (match && end > match->start) { vm->range_cache_ind = (vm->range_cache_ind - 1 + VM_RANGE_CACHE_SIZE) % VM_RANGE_CACHE_SIZE;