s390/vdso: avoid 64-bit vdso mapping for compat tasks
authorVasily Gorbik <gor@linux.ibm.com>
Fri, 14 Sep 2018 15:29:39 +0000 (17:29 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 20 Nov 2019 17:47:08 +0000 (18:47 +0100)
commit84bfa03445bc34bf486036c124890b6a3a7022af
treefa97fa4a48a65ccafb8c087074f821a7b7326192
parent3d510bdf35c23ca72cfbf40eb84c04e1cbd3a4d8
s390/vdso: avoid 64-bit vdso mapping for compat tasks

[ Upstream commit d1befa65823e9c6d013883b8a41d081ec338c489 ]

vdso_fault used is_compat_task function (on s390 it tests "current"
thread_info flags) to distinguish compat tasks and map 31-bit vdso
pages. But "current" task might not correspond to mm context.

When 31-bit compat inferior is executed under gdb, gdb does
PTRACE_PEEKTEXT on vdso page, causing vdso_fault with "current" being
64-bit gdb process. So, 31-bit inferior ends up with 64-bit vdso mapped.

To avoid this problem a new compat_mm flag has been introduced into
mm context. This flag is used in vdso_fault and vdso_mremap instead
of is_compat_task.

Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
arch/s390/include/asm/mmu.h
arch/s390/include/asm/mmu_context.h
arch/s390/kernel/vdso.c