| From 211887c97a451e6f931613cf67b6698d25c2f346 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 1 Sep 2021 02:46:21 +0000 |
| Subject: riscv/vdso: make arch_setup_additional_pages wait for mmap_sem for |
| write killable |
| |
| From: Tong Tiangen <tongtiangen@huawei.com> |
| |
| [ Upstream commit 8bb0ab3ae7a4dbe6cf32deb830cf2bdbf5736867 ] |
| |
| riscv architectures relying on mmap_sem for write in their |
| arch_setup_additional_pages. If the waiting task gets killed by the oom |
| killer it would block oom_reaper from asynchronous address space reclaim |
| and reduce the chances of timely OOM resolving. Wait for the lock in |
| the killable mode and return with EINTR if the task got killed while |
| waiting. |
| |
| Signed-off-by: Tong Tiangen <tongtiangen@huawei.com> |
| Reviewed-by: Kefeng Wang <wangkefeng.wang@huawei.com> |
| Fixes: 76d2a0493a17 ("RISC-V: Init and Halt Code") |
| Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/riscv/kernel/vdso.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| diff --git a/arch/riscv/kernel/vdso.c b/arch/riscv/kernel/vdso.c |
| index 3f1d35e7c98a..73d45931a053 100644 |
| --- a/arch/riscv/kernel/vdso.c |
| +++ b/arch/riscv/kernel/vdso.c |
| @@ -65,7 +65,9 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, |
| |
| vdso_len = (vdso_pages + 1) << PAGE_SHIFT; |
| |
| - mmap_write_lock(mm); |
| + if (mmap_write_lock_killable(mm)) |
| + return -EINTR; |
| + |
| vdso_base = get_unmapped_area(NULL, 0, vdso_len, 0, 0); |
| if (IS_ERR_VALUE(vdso_base)) { |
| ret = vdso_base; |
| -- |
| 2.33.0 |
| |