| From 2ea75be3219571d0ec009ce20d9971e54af96e09 Mon Sep 17 00:00:00 2001 |
| From: David Matlack <dmatlack@google.com> |
| Date: Fri, 19 Sep 2014 16:03:25 -0700 |
| Subject: kvm: don't take vcpu mutex for obviously invalid vcpu ioctls |
| |
| From: David Matlack <dmatlack@google.com> |
| |
| commit 2ea75be3219571d0ec009ce20d9971e54af96e09 upstream. |
| |
| vcpu ioctls can hang the calling thread if issued while a vcpu is running. |
| However, invalid ioctls can happen when userspace tries to probe the kind |
| of file descriptors (e.g. isatty() calls ioctl(TCGETS)); in that case, |
| we know the ioctl is going to be rejected as invalid anyway and we can |
| fail before trying to take the vcpu mutex. |
| |
| This patch does not change functionality, it just makes invalid ioctls |
| fail faster. |
| |
| Signed-off-by: David Matlack <dmatlack@google.com> |
| Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| virt/kvm/kvm_main.c | 4 ++++ |
| 1 file changed, 4 insertions(+) |
| |
| --- a/virt/kvm/kvm_main.c |
| +++ b/virt/kvm/kvm_main.c |
| @@ -52,6 +52,7 @@ |
| |
| #include <asm/processor.h> |
| #include <asm/io.h> |
| +#include <asm/ioctl.h> |
| #include <asm/uaccess.h> |
| #include <asm/pgtable.h> |
| |
| @@ -1981,6 +1982,9 @@ static long kvm_vcpu_ioctl(struct file * |
| if (vcpu->kvm->mm != current->mm) |
| return -EIO; |
| |
| + if (unlikely(_IOC_TYPE(ioctl) != KVMIO)) |
| + return -EINVAL; |
| + |
| #if defined(CONFIG_S390) || defined(CONFIG_PPC) || defined(CONFIG_MIPS) |
| /* |
| * Special cases: vcpu ioctls that are asynchronous to vcpu execution, |