[PATCH 03/43] maple_tree: Reduce user error potential

From: Liam Howlett
Date: Tue Nov 29 2022 - 11:45:20 EST


From: "Liam R. Howlett" <Liam.Howlett@xxxxxxxxxx>

When iterating, a user may operate on the tree and cause the maple state
to be altered and left in an unintuitive state. Detect this scenario
and correct it by setting to the limit and invalidating the state.

Signed-off-by: Liam R. Howlett <Liam.Howlett@xxxxxxxxxx>
---
lib/maple_tree.c | 10 ++++++++++
1 file changed, 10 insertions(+)

diff --git a/lib/maple_tree.c b/lib/maple_tree.c
index ff28bd6d4745..440539ff0d11 100644
--- a/lib/maple_tree.c
+++ b/lib/maple_tree.c
@@ -4735,6 +4735,11 @@ static inline void *mas_next_entry(struct ma_state *mas, unsigned long limit)
unsigned long last;
enum maple_type mt;

+ if (mas->index > limit) {
+ mas->index = mas->last = limit;
+ mas_pause(mas);
+ return NULL;
+ }
last = mas->last;
retry:
offset = mas->offset;
@@ -4841,6 +4846,11 @@ static inline void *mas_prev_entry(struct ma_state *mas, unsigned long min)
{
void *entry;

+ if (mas->index < min) {
+ mas->index = mas->last = min;
+ mas_pause(mas);
+ return NULL;
+ }
retry:
while (likely(!mas_is_none(mas))) {
entry = mas_prev_nentry(mas, min, mas->index);
--
2.35.1