Skip to contentSkip to conversation

vm_is_stack: use for_each_thread() rather then buggy while_each_thread()

PATCH In review Oleg Nesterov 2 participants 2 messages Aug 7, 2014 – Aug 9, 2014

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

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().

---
 mm/util.c |    9 +++------
 1 files changed, 3 insertions(+), 6 deletions(-)
mm/util.c +3 -6
index d5ea733..33e9f44 100644
@@ -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
Acked-by on v1 1/1
#1 lore raw
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 updates vm_is_stack().

Quoted 1 line

3.4+