]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commit - virt/kvm/kvm_main.c
KVM: Let KVM_SET_SIGNAL_MASK work as advertised
authorJan H. Schönherr <jschoenh@amazon.de>
Fri, 24 Nov 2017 21:39:01 +0000 (22:39 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Mon, 27 Nov 2017 16:53:47 +0000 (17:53 +0100)
commit20b7035c66bacc909ae3ffe92c1a1ea7db99fe4f
tree1d3ba8ee0b1f0caf975b1ce323be02e3c7682752
parentb74558259c5149e5edd79348b70eb34177cbeea0
KVM: Let KVM_SET_SIGNAL_MASK work as advertised

KVM API says for the signal mask you set via KVM_SET_SIGNAL_MASK, that
"any unblocked signal received [...] will cause KVM_RUN to return with
-EINTR" and that "the signal will only be delivered if not blocked by
the original signal mask".

This, however, is only true, when the calling task has a signal handler
registered for a signal. If not, signal evaluation is short-circuited for
SIG_IGN and SIG_DFL, and the signal is either ignored without KVM_RUN
returning or the whole process is terminated.

Make KVM_SET_SIGNAL_MASK behave as advertised by utilizing logic similar
to that in do_sigtimedwait() to avoid short-circuiting of signals.

Signed-off-by: Jan H. Schönherr <jschoenh@amazon.de>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/mips/kvm/mips.c
arch/powerpc/kvm/powerpc.c
arch/s390/kvm/kvm-s390.c
arch/x86/kvm/x86.c
include/linux/kvm_host.h
virt/kvm/arm/arm.c
virt/kvm/kvm_main.c