um: defer killing userspace on page table update failures
authorJohannes Berg <johannes.berg@intel.com>
Wed, 13 Jan 2021 21:08:03 +0000 (22:08 +0100)
committerRichard Weinberger <richard@nod.at>
Fri, 12 Feb 2021 20:32:04 +0000 (21:32 +0100)
commita7d48886cacf8b426e0079bca9639d2657cf2d38
treeba45b820c900f3bd2f93a37d78bb77be3f93a106
parent47da29763ec9a153b9b685bff9db659e4e09e494
um: defer killing userspace on page table update failures

In some cases we can get to fix_range_common() with mmap_sem held,
and in others we get there without it being held. For example, we
get there with it held from sys_mprotect(), and without it held
from fork_handler().

Avoid any issues in this and simply defer killing the task until
it runs the next time. Do it on the mm so that another task that
shares the same mm can't continue running afterwards.

Cc: stable@vger.kernel.org
Fixes: 468f65976a8d ("um: Fix hung task in fix_range_common()")
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Richard Weinberger <richard@nod.at>
arch/um/include/shared/skas/mm_id.h
arch/um/kernel/tlb.c
arch/um/os-Linux/skas/process.c