[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v4 0/5] linux-user: Fix siginfo_t contents when jumping to non-re
From: |
Ilya Leoshkevich |
Subject: |
[PATCH v4 0/5] linux-user: Fix siginfo_t contents when jumping to non-readable pages |
Date: |
Thu, 11 Aug 2022 11:55:29 +0200 |
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.
Patch 1 fixes a minor invalidation issue, which may prevent SEGV from
happening altogether.
Patch 2 introduces a helper function.
Patches 3-4 fix the main issue on x86_64 and s390x. Many other
architectures have fixed-size instructions and are not affected.
Patch 5 adds tests.
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).
Ilya Leoshkevich (5):
accel/tcg: Invalidate translations when clearing PAGE_EXEC
accel/tcg: Introduce is_same_page()
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
accel/tcg/translate-all.c | 17 ++--
include/exec/translator.h | 10 +++
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 +++++++++++++++++++++++++
9 files changed, 435 insertions(+), 11 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
--
2.37.1
- [PATCH v4 0/5] linux-user: Fix siginfo_t contents when jumping to non-readable pages,
Ilya Leoshkevich <=
- [PATCH v4 2/5] accel/tcg: Introduce is_same_page(), Ilya Leoshkevich, 2022/08/11
- [PATCH v4 1/5] accel/tcg: Invalidate translations when clearing PAGE_EXEC, Ilya Leoshkevich, 2022/08/11
- [PATCH v4 3/5] target/s390x: Make translator stop before the end of a page, Ilya Leoshkevich, 2022/08/11
- [PATCH v4 4/5] target/i386: Make translator stop before the end of a page, Ilya Leoshkevich, 2022/08/11
- [PATCH v4 5/5] tests/tcg: Test siginfo_t contents when jumping to non-readable pages, Ilya Leoshkevich, 2022/08/11