From: Rafael J. Wysocki The reading of PF_BORROWED_MM in is_user_space() without task_lock() is racy. Fix it. Signed-off-by: Rafael J. Wysocki Acked-by: Pavel Machek Cc: Oleg Nesterov Cc: Aneesh Kumar Cc: "Paul E. McKenney" Cc: Srivatsa Vaddagiri Cc: Gautham R Shenoy Signed-off-by: Andrew Morton --- kernel/power/process.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff -puN kernel/power/process.c~freezer-read-pf_borrowed_mm-in-a-nonracy-way kernel/power/process.c --- a/kernel/power/process.c~freezer-read-pf_borrowed_mm-in-a-nonracy-way +++ a/kernel/power/process.c @@ -8,6 +8,7 @@ #undef DEBUG +#include #include #include #include @@ -88,7 +89,12 @@ static void cancel_freezing(struct task_ static inline int is_user_space(struct task_struct *p) { - return p->mm && !(p->flags & PF_BORROWED_MM); + int ret; + + task_lock(p); + ret = p->mm && !(p->flags & PF_BORROWED_MM); + task_unlock(p); + return ret; } static unsigned int try_to_freeze_tasks(int freeze_user_space) _