|
| From: | Vivian Wang |
| Subject: | Re: [PATCH v5 0/4] linux-user: Fix siginfo_t contents when jumping to non-readable pages |
| Date: | Fri, 19 Aug 2022 00:55:12 +0800 |
| User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.0.3 |
Hi, I noticed that when we get a SEGV due to jumping to non-readable memory, sometimes si_addr and program counter in siginfo_t are slightly off. I tracked this down to the assumption that translators stop before the end of a page, while in reality they may stop right after it.
Hi,
Could this be related to issue 1155 [1]? On RISC-V, I'm getting incorrect [m|s]tval/[m|s]epc combinations for page faults in system emulation and incorrect si_addr and program counter on SIGSEGV in user emulation. Since it seems to only affect instructions that cross page boundaries, and RISC-V also has variable length instructions, it seems that I've run into the same problem as what is fixed here.
Could this fix be extended be extended to targets/riscv?
dram
[1]: https://gitlab.com/qemu-project/qemu/-/issues/1155
Patch 1 fixes an invalidation issue, which may prevent SEGV from
happening altogether.
Patches 2-3 fix the main issue on x86_64 and s390x. Many other
architectures have fixed-size instructions and are not affected.
Patch 4 adds tests.
Note: this series depends on [1].
Best regards,
Ilya
v1: https://lists.gnu.org/archive/html/qemu-devel/2022-08/msg00822.html
v1 -> v2: Fix individual translators instead of translator_loop
(Peter).
v2: https://lists.gnu.org/archive/html/qemu-devel/2022-08/msg01079.html
v2 -> v3: Peek at the next instruction on s390x (Richard).
Undo more on i386 (Richard).
Check PAGE_EXEC, not PAGE_READ (Peter, Richard).
v3: https://lists.gnu.org/archive/html/qemu-devel/2022-08/msg01306.html
v3 -> v4: Improve the commit message in patch 1 to better reflect what
exactly is being fixed there.
Factor out the is_same_page() patch (Richard).
Do not touch the common code in the i386 fix (Richard).
v4: https://lists.gnu.org/archive/html/qemu-devel/2022-08/msg01747.html
v4 -> v5: Drop patch 2.
Use a different fix for the invalidation issue based on
discussion with Richard [2].
[1] https://lists.gnu.org/archive/html/qemu-devel/2022-08/msg02472.html
[2] https://lists.gnu.org/archive/html/qemu-devel/2022-08/msg02556.html
Ilya Leoshkevich (4):
linux-user: Clear tb_jmp_cache on mprotect()
target/s390x: Make translator stop before the end of a page
target/i386: Make translator stop before the end of a page
tests/tcg: Test siginfo_t contents when jumping to non-readable pages
linux-user/mmap.c | 14 +++
target/i386/tcg/translate.c | 25 +++++-
target/s390x/tcg/translate.c | 15 +++-
tests/tcg/multiarch/noexec.h | 114 ++++++++++++++++++++++++
tests/tcg/s390x/Makefile.target | 1 +
tests/tcg/s390x/noexec.c | 145 +++++++++++++++++++++++++++++++
tests/tcg/x86_64/Makefile.target | 3 +-
tests/tcg/x86_64/noexec.c | 116 +++++++++++++++++++++++++
8 files changed, 427 insertions(+), 6 deletions(-)
create mode 100644 tests/tcg/multiarch/noexec.h
create mode 100644 tests/tcg/s390x/noexec.c
create mode 100644 tests/tcg/x86_64/noexec.c
| [Prev in Thread] | Current Thread | [Next in Thread] |