maple_tree: reduce user error potential

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
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
Liam R. Howlett 2023-01-20 11:26:04 -05:00 committed by Andrew Morton
parent 65be6f058b
commit 50e81c82ad
1 changed files with 10 additions and 0 deletions

View File

@ -4732,6 +4732,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;
@ -4838,6 +4843,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);