summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeng Zhang <zhangpeng.00@bytedance.com>2023-03-14 15:42:01 +0300
committerAndrew Morton <akpm@linux-foundation.org>2023-04-06 04:06:25 +0300
commitec07967d7523adb3670f9dfee0232e3bc868f3de (patch)
treebc3d63dc5fdf531b03347e0ff33c064bfc79c35c
parent6fe7d6b992113719e96744d974212df3fcddc76c (diff)
downloadlinux-ec07967d7523adb3670f9dfee0232e3bc868f3de.tar.xz
maple_tree: fix get wrong data_end in mtree_lookup_walk()
if (likely(offset > end)) max = pivots[offset]; The above code should be changed to if (likely(offset < end)), which is correct. This affects the correctness of ma_data_end(). Now it seems that the final result will not be wrong, but it is best to change it. This patch does not change the code as above, because it simplifies the code by the way. Link: https://lkml.kernel.org/r/20230314124203.91572-1-zhangpeng.00@bytedance.com Link: https://lkml.kernel.org/r/20230314124203.91572-2-zhangpeng.00@bytedance.com Fixes: 54a611b60590 ("Maple Tree: add new data structure") Signed-off-by: Peng Zhang <zhangpeng.00@bytedance.com> Reviewed-by: Liam R. Howlett <Liam.Howlett@oracle.com> Cc: <stable@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-rw-r--r--lib/maple_tree.c15
1 files changed, 5 insertions, 10 deletions
diff --git a/lib/maple_tree.c b/lib/maple_tree.c
index b1db0bd71aed..b8a230f5d94e 100644
--- a/lib/maple_tree.c
+++ b/lib/maple_tree.c
@@ -3941,18 +3941,13 @@ static inline void *mtree_lookup_walk(struct ma_state *mas)
end = ma_data_end(node, type, pivots, max);
if (unlikely(ma_dead_node(node)))
goto dead_node;
-
- if (pivots[offset] >= mas->index)
- goto next;
-
do {
- offset++;
- } while ((offset < end) && (pivots[offset] < mas->index));
-
- if (likely(offset > end))
- max = pivots[offset];
+ if (pivots[offset] >= mas->index) {
+ max = pivots[offset];
+ break;
+ }
+ } while (++offset < end);
-next:
slots = ma_slots(node, type);
next = mt_slot(mas->tree, slots, offset);
if (unlikely(ma_dead_node(node)))