summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorPeng Zhang <zhangpeng.00@bytedance.com>2023-03-14 15:42:01 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2023-04-13 17:55:36 +0300
commit4f5760757fa2eee2f118934d116569b6255c4e3b (patch)
treef46ec425028b483290951857084ad1b1718b54ec /lib
parentf042ee354c827bf4946cf3113a3b5eaa030c6ea4 (diff)
downloadlinux-4f5760757fa2eee2f118934d116569b6255c4e3b.tar.xz
maple_tree: fix get wrong data_end in mtree_lookup_walk()
commit ec07967d7523adb3670f9dfee0232e3bc868f3de upstream. 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> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'lib')
-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 96be96a1f35d..08e41a993eb6 100644
--- a/lib/maple_tree.c
+++ b/lib/maple_tree.c
@@ -3870,18 +3870,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)))