projects
/
platform
/
kernel
/
linux-starfive.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
19d8f78
)
maple_tree: fix mas_prev() and mas_find() state handling
author
Liam R. Howlett
<Liam.Howlett@Oracle.com>
Tue, 11 Apr 2023 15:10:46 +0000
(11:10 -0400)
committer
Greg Kroah-Hartman
<gregkh@linuxfoundation.org>
Thu, 13 Apr 2023 14:55:39 +0000
(16:55 +0200)
commit
17dc622c7b0f94e49bed030726df4db12ecaa6b5
upstream.
When mas_prev() does not find anything, set the state to MAS_NONE.
Handle the MAS_NONE in mas_find() like a MAS_START.
Link:
https://lkml.kernel.org/r/20230120162650.984577-7-Liam.Howlett@oracle.com
Cc: <Stable@vger.kernel.org>
Fixes: 54a611b60590 ("Maple Tree: add new data structure")
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
Reported-by: <syzbot+502859d610c661e56545@syzkaller.appspotmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
lib/maple_tree.c
patch
|
blob
|
history
diff --git
a/lib/maple_tree.c
b/lib/maple_tree.c
index 203bd3e51c984edfe3fe56308f2d9d3664c31aaf..b72ddea9d277f4600be4388dfd29e9d3cceb7606 100644
(file)
--- a/
lib/maple_tree.c
+++ b/
lib/maple_tree.c
@@
-4844,7
+4844,7
@@
static inline void *mas_prev_entry(struct ma_state *mas, unsigned long min)
if (mas->index < min) {
mas->index = mas->last = min;
- mas
_pause(mas)
;
+ mas
->node = MAS_NONE
;
return NULL;
}
retry:
@@
-5906,6
+5906,7
@@
void *mas_prev(struct ma_state *mas, unsigned long min)
if (!mas->index) {
/* Nothing comes before 0 */
mas->last = 0;
+ mas->node = MAS_NONE;
return NULL;
}
@@
-5996,6
+5997,9
@@
void *mas_find(struct ma_state *mas, unsigned long max)
mas->index = ++mas->last;
}
+ if (unlikely(mas_is_none(mas)))
+ mas->node = MAS_START;
+
if (unlikely(mas_is_start(mas))) {
/* First run or continue */
void *entry;