vm_is_stack: use for_each_thread() rather then buggy while_each_thread()
Subsystems (2)
PATCH 1/1 vm_is_stack: use for_each_thread() rather then buggy while_each_thread()
Aleksei hit the soft lockup during reading /proc/PID/smaps. David investigated the problem and suggested the right fix.
while_each_thread() is racy and should die, this patch updates vm_is_stack().
Reported-and-tested-by Aleksei Besogonov <[email protected]>
Suggested-by David Rientjes <[email protected]>
Signed-off-by Oleg Nesterov <[email protected]>
--- mm/util.c | 9 +++------ 1 files changed, 3 insertions(+), 6 deletions(-)
mm/util.c +3 -6
@@ -277,17 +277,14 @@ pid_t vm_is_stack(struct task_struct *task,if (in_group) {struct task_struct *t; -rcu_read_lock (); -if (!pid_alive (task)) - goto done; - t = task; - do { +rcu_read_lock (); +for_each_thread (task, t) {if (vm_is_stack_for_task (t, vma)) { ret = t->pid; goto done; } - } while_each_thread(task, t); + } done:rcu_read_unlock (); }
Signature · 1 line
1.5.5.1
Quoted 9 lines · Oleg Nesterov
Aleksei hit the soft lockup during reading
/proc/PID/smaps. David investigated the problem and suggested the right fix.
while_each_thread()is racy and should die, this patch updatesvm_is_stack().Reported-and-tested-by Aleksei Besogonov <[email protected]>Suggested-by David Rientjes <[email protected]>Signed-off-by Oleg Nesterov <[email protected]>
Acked-by David Rientjes <[email protected]>
Quoted 1 line
3.4+