Messages in this thread Patch in this message | | | From | Siddhesh Poyarekar <> | Subject | [PATCH 1/2] Take rcu read lock when iterating through thread group | Date | Thu, 1 Mar 2012 10:50:58 +0530 |
| |
Protect the iteration through thread group with rcu_read_lock when looking for tasks in the group that use the current vma as stack. Thanks KOSAKI Motohiro (kosaki.motohiro@gmail.com) for pointing it out.
Signed-off-by: Siddhesh Poyarekar <siddhesh.poyarekar@gmail.com> --- mm/memory.c | 15 +++++++++++---- 1 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/mm/memory.c b/mm/memory.c index 601a920..a88b764 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -3915,20 +3915,27 @@ void print_vma_addr(char *prefix, unsigned long ip) * just check in the current task. */ int vm_is_stack(struct task_struct *task, - struct vm_area_struct *vma, int in_group) + struct vm_area_struct *vma, int in_group) { + int ret = 0; + if (vm_is_stack_for_task(task, vma)) return 1; if (in_group) { struct task_struct *t = task; + rcu_read_lock(); while_each_thread(task, t) { - if (vm_is_stack_for_task(t, vma)) - return 1; + if (vm_is_stack_for_task(t, vma)) { + ret = 1; + goto done; + } } } - return 0; +done: + rcu_read_unlock(); + return ret; } #ifdef CONFIG_PROVE_LOCKING -- 1.7.7.4
| |