On Thu, Jul 28, 2016 at 04:44:44PM +0100, Peter Maydell wrote: > This patchset fixes bugs in our handling of failure to read > or write guest memory on entry and exit from a signal handler. > This is supposed to cause a SIGSEGV, but the guest is permitted > a chance to handle the SIGSEGV (assuming it wasn't generated > in the course of trying to enter a SIGSEGV handler in the first > place). Our current implementation makes the SIGSEGV always > fatal, regardless of whether the guest had a signal handler > set up for it. > > The main cause of this bug is that our implementation of > force_sig() had drifted away from the semantics of the kernel > function of that name, so the series renames that to > dump_core_and_abort(), and provides a force_sig() that just > queues a synchronous signal to be taken in the usual way. > > The patchset sits on top of my various other pending linux-user > fixes. There are getting to be quite a lot of those now, so > you can find them and this patchset at: > > https://git.linaro.org/people/peter.maydell/qemu-arm.git linux-fixes > > The test program I used is at > http://people.linaro.org/~peter.maydell/sigaltstack.c > (NB: contains a magic constant that will need tweaking for > non-x86 guests); it arranges to take a SIGSEGV while trying to > take a SIGUSR1. > > Although this is a bugfix, it's for a fairly obscure corner > case, so we might want to defer this to 2.8.
Applied to linux-user que, thanks! > thanks > -- PMM > > Peter Maydell (6): > linux-user: Recheck for pending synchronous signals too > linux-user: Pass si_type information to queue_signal() explicitly > linux-user: SIGSEGV on signal entry need not be fatal > linux-user: ARM: Give SIGSEGV if signal frame setup fails > linux-user: SIGSEGV from sigreturn need not be fatal > linux-user: Implement force_sigsegv() via force_sig() > > linux-user/main.c | 124 ++++++++++++++++----------------- > linux-user/qemu.h | 3 +- > linux-user/signal.c | 189 > ++++++++++++++++++++++++++++++--------------------- > linux-user/syscall.c | 6 +- > 4 files changed, 180 insertions(+), 142 deletions(-) > > -- > 1.9.1 >