Messages in this thread Patch in this message | | | Date | Tue, 7 Feb 2012 10:50:38 +0400 | From | Anton Vorontsov <> | Subject | [PATCH 5/8] sh: Fix possible race on task->mm |
| |
Checking for task->mm is dangerous as ->mm might disappear (exit_mm() assigns NULL under task_lock(), so tasklist lock is not enough).
We can't use get_task_mm()/mmput() pair as mmput() might sleep, so let's take the task lock while we care about its mm.
Signed-off-by: Anton Vorontsov <anton.vorontsov@linaro.org> --- arch/sh/kernel/smp.c | 5 ++++- 1 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/arch/sh/kernel/smp.c b/arch/sh/kernel/smp.c index 3147a9a..11d29dc 100644 --- a/arch/sh/kernel/smp.c +++ b/arch/sh/kernel/smp.c @@ -154,9 +154,12 @@ int __cpu_disable(void) local_flush_tlb_all(); read_lock(&tasklist_lock); - for_each_process(p) + for_each_process(p) { + task_lock(p); if (p->mm) cpumask_clear_cpu(cpu, mm_cpumask(p->mm)); + task_unlock(p); + } read_unlock(&tasklist_lock); return 0; -- 1.7.7.6
| |