From: Liam R. Howlett Date: Tue, 11 Apr 2023 15:10:44 +0000 (-0400) Subject: maple_tree: reduce user error potential X-Git-Tag: v6.2.11~11 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8ccada581ba33aa368a263149e939702049bb535;p=thirdparty%2Fkernel%2Fstable.git maple_tree: reduce user error potential commit 50e81c82ad947045c7ed26ddc9acb17276b653b6 upstream. 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. Link: https://lkml.kernel.org/r/20230120162650.984577-4-Liam.Howlett@oracle.com Cc: Fixes: 54a611b60590 ("Maple Tree: add new data structure") Signed-off-by: Liam R. Howlett Signed-off-by: Greg Kroah-Hartman --- diff --git a/lib/maple_tree.c b/lib/maple_tree.c index e0a76f6368e4e..9a97bab901b68 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -4736,6 +4736,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; @@ -4842,6 +4847,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);