[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v6 05/21] linux-user: Clear translations and tb_jmp_cache on mpro
From: |
Richard Henderson |
Subject: |
[PATCH v6 05/21] linux-user: Clear translations and tb_jmp_cache on mprotect() |
Date: |
Thu, 18 Aug 2022 20:25:59 -0700 |
From: Ilya Leoshkevich <iii@linux.ibm.com>
Currently it's possible to execute pages that do not have PAGE_EXEC
if there is an existing translation block. Fix by clearing tb_jmp_cache
and invalidating TBs, which forces recheck of permission bits.
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Message-Id: <20220817150506.592862-2-iii@linux.ibm.com>
[rth: Invalidate is required -- e.g. riscv fallthrough cross test]
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
fixup mprotect
---
linux-user/mmap.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/linux-user/mmap.c b/linux-user/mmap.c
index 048c4135af..e9dc8848be 100644
--- a/linux-user/mmap.c
+++ b/linux-user/mmap.c
@@ -115,6 +115,7 @@ int target_mprotect(abi_ulong start, abi_ulong len, int
target_prot)
{
abi_ulong end, host_start, host_end, addr;
int prot1, ret, page_flags, host_prot;
+ CPUState *cpu;
trace_target_mprotect(start, len, target_prot);
@@ -177,7 +178,14 @@ int target_mprotect(abi_ulong start, abi_ulong len, int
target_prot)
goto error;
}
}
+
page_set_flags(start, start + len, page_flags);
+ tb_invalidate_phys_range(start, start + len);
+
+ CPU_FOREACH(cpu) {
+ cpu_tb_jmp_cache_clear(cpu);
+ }
+
mmap_unlock();
return 0;
error:
--
2.34.1
- [PATCH v6 00/21] linux-user: Fix siginfo_t contents when jumping to non-readable pages, Richard Henderson, 2022/08/18
- [PATCH v6 02/21] linux-user/hppa: Allocate page zero as a commpage, Richard Henderson, 2022/08/18
- [PATCH v6 01/21] linux-user/arm: Mark the commpage executable, Richard Henderson, 2022/08/18
- [PATCH v6 03/21] linux-user/x86_64: Allocate vsyscall page as a commpage, Richard Henderson, 2022/08/18
- [PATCH v6 05/21] linux-user: Clear translations and tb_jmp_cache on mprotect(),
Richard Henderson <=
- [PATCH v6 04/21] linux-user: Honor PT_GNU_STACK, Richard Henderson, 2022/08/18
- [PATCH v6 06/21] tests/tcg/i386: Move smc_code2 to an executable section, Richard Henderson, 2022/08/18
- [PATCH v6 07/21] accel/tcg: Introduce is_same_page(), Richard Henderson, 2022/08/18
- [PATCH v6 09/21] accel/tcg: Unlock mmap_lock after longjmp, Richard Henderson, 2022/08/18
- [PATCH v6 11/21] accel/tcg: Move qemu_ram_addr_from_host_nofail to physmem.c, Richard Henderson, 2022/08/18
- [PATCH v6 13/21] accel/tcg: Add nofault parameter to get_page_addr_code_hostp, Richard Henderson, 2022/08/18