diff options
author | Alan Cox <alan@linux.intel.com> | 2012-08-22 09:34:11 -0400 |
---|---|---|
committer | Marcelo Tosatti <mtosatti@redhat.com> | 2012-08-26 14:11:48 -0400 |
commit | 760a9a30adc558a75916a13902f38c6792fa8c4b (patch) | |
tree | a6a061b4f621845a8c3f762c518e557b56b27689 /virt/kvm/kvm_main.c | |
parent | 9acb172543aecb783e2e1e53e3f447d4c0f5c150 (diff) |
kvm: Fix nonsense handling of compat ioctl
KVM_SET_SIGNAL_MASK passed a NULL argument leaves the on stack signal
sets uninitialized. It then passes them through to
kvm_vcpu_ioctl_set_sigmask.
We should be passing a NULL in this case not translated garbage.
Signed-off-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Diffstat (limited to 'virt/kvm/kvm_main.c')
-rw-r--r-- | virt/kvm/kvm_main.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 246852397e30..d617f69131d7 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c | |||
@@ -1976,9 +1976,10 @@ static long kvm_vcpu_compat_ioctl(struct file *filp, | |||
1976 | if (copy_from_user(&csigset, sigmask_arg->sigset, | 1976 | if (copy_from_user(&csigset, sigmask_arg->sigset, |
1977 | sizeof csigset)) | 1977 | sizeof csigset)) |
1978 | goto out; | 1978 | goto out; |
1979 | } | 1979 | sigset_from_compat(&sigset, &csigset); |
1980 | sigset_from_compat(&sigset, &csigset); | 1980 | r = kvm_vcpu_ioctl_set_sigmask(vcpu, &sigset); |
1981 | r = kvm_vcpu_ioctl_set_sigmask(vcpu, &sigset); | 1981 | } else |
1982 | r = kvm_vcpu_ioctl_set_sigmask(vcpu, NULL); | ||
1982 | break; | 1983 | break; |
1983 | } | 1984 | } |
1984 | default: | 1985 | default: |