From 28fd1f84dc0fdbccd071d7371b5d30c964dfa93a Mon Sep 17 00:00:00 2001 From: "Liam R. Howlett" Date: Thu, 17 Nov 2022 14:32:36 -0500 Subject: [PATCH] maple_tree: Reduce user error potential When iterating, a user may modify the tree and cause the iterator to be out of range. Detect this scenario and correct it by setting to the limit and invalidating the state. Signed-off-by: Liam R. Howlett --- 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.50.1