diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2014-03-14 14:36:56 +0000 |
---|---|---|
committer | Riku Voipio <riku.voipio@linaro.org> | 2014-03-17 11:44:32 +0200 |
commit | a7ec0f98e3a37a4d31c832cfa14dc2c1c0890421 (patch) | |
tree | e444ff239a0d3947bc2207ae6c4544f2d270eb79 /linux-user/syscall_defs.h | |
parent | 1c275925bfbbc2de84a8f0e09d1dd70bbefb6da3 (diff) |
linux-user: Don't allow guest to block SIGSEGV
Don't allow the linux-user guest to block SIGSEGV -- QEMU needs this
signal to detect accesses to pages which it has marked read-only
because it has cached translated code from them.
We implement this by making the do_sigprocmask() wrapper suppress
SIGSEGV when doing the host process signal mask manipulation; instead
we store the current state of SIGSEGV in the TaskState struct.
If we get a SIGSEGV for the guest when the guest has blocked the
signal, we treat it as if the default SEGV handler was in place,
as the kernel does for forced SIGSEGV delivery.
This patch is based on an idea by Alex Barcelo, but rather than
simply lying to the guest about the SIGSEGV state we track it.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reported-by: Alex Barcelo <abarcelo@ac.upc.edu>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
Diffstat (limited to 'linux-user/syscall_defs.h')
0 files changed, 0 insertions, 0 deletions