[PATCH v3 03/48] maple_tree: Reduce user error potential
Liam Howlett
liam.howlett at oracle.com
Mon Jan 16 18:34:10 PST 2023
From: "Liam R. Howlett" <Liam.Howlett at Oracle.com>
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 at oracle.com>
---
lib/maple_tree.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/lib/maple_tree.c b/lib/maple_tree.c
index c15e63ac6e93..9af88726d88a 100644
--- a/lib/maple_tree.c
+++ b/lib/maple_tree.c
@@ -4742,6 +4742,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;
@@ -4848,6 +4853,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
More information about the maple-tree
mailing list