Messages in this thread Patch in this message | | | Date | Tue, 7 Feb 2012 10:50:22 +0400 | From | Anton Vorontsov <> | Subject | [PATCH 4/8] powerpc/mm: 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/powerpc/mm/mmu_context_nohash.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/arch/powerpc/mm/mmu_context_nohash.c b/arch/powerpc/mm/mmu_context_nohash.c index 5b63bd3..13ec484 100644 --- a/arch/powerpc/mm/mmu_context_nohash.c +++ b/arch/powerpc/mm/mmu_context_nohash.c @@ -43,6 +43,7 @@ #include <linux/kernel.h> #include <linux/mm.h> #include <linux/init.h> +#include <linux/sched.h> #include <linux/spinlock.h> #include <linux/bootmem.h> #include <linux/notifier.h> @@ -360,8 +361,10 @@ static int __cpuinit mmu_context_cpu_notify(struct notifier_block *self, /* We also clear the cpu_vm_mask bits of CPUs going away */ read_lock(&tasklist_lock); 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); break; -- 1.7.7.6
| |