From: Avi Kivity Date: Sun, 15 Nov 2009 13:09:01 +0000 (+0200) Subject: KVM: Fortify new VCPU_EVENTS API with a flags field X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=5936a64b4f9f7827a8d627d99b5f02f34c642cfe;p=users%2Fdwmw2%2Flinux.git KVM: Fortify new VCPU_EVENTS API with a flags field Signed-off-by: Avi Kivity --- diff --git a/Documentation/kvm/api.txt b/Documentation/kvm/api.txt index fa3e59ee4cfdc..e1a114161027d 100644 --- a/Documentation/kvm/api.txt +++ b/Documentation/kvm/api.txt @@ -685,6 +685,7 @@ struct kvm_vcpu_events { __u8 pad; } nmi; __u32 sipi_vector; + __u32 flags; /* must be zero */ }; 4.30 KVM_SET_VCPU_EVENTS diff --git a/arch/x86/include/asm/kvm.h b/arch/x86/include/asm/kvm.h index 03fd136c6b48f..950df434763f5 100644 --- a/arch/x86/include/asm/kvm.h +++ b/arch/x86/include/asm/kvm.h @@ -276,6 +276,8 @@ struct kvm_vcpu_events { __u8 pad; } nmi; __u32 sipi_vector; + __u32 flags; + __u32 reserved[10]; }; #endif /* _ASM_X86_KVM_H */ diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 862ecb40a0e38..35eea30821d6d 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -1904,12 +1904,17 @@ static void kvm_vcpu_ioctl_x86_get_vcpu_events(struct kvm_vcpu *vcpu, events->sipi_vector = vcpu->arch.sipi_vector; + events->flags = 0; + vcpu_put(vcpu); } -static void kvm_vcpu_ioctl_x86_set_vcpu_events(struct kvm_vcpu *vcpu, - struct kvm_vcpu_events *events) +static int kvm_vcpu_ioctl_x86_set_vcpu_events(struct kvm_vcpu *vcpu, + struct kvm_vcpu_events *events) { + if (events->flags) + return -EINVAL; + vcpu_load(vcpu); vcpu->arch.exception.pending = events->exception.injected; @@ -1930,6 +1935,8 @@ static void kvm_vcpu_ioctl_x86_set_vcpu_events(struct kvm_vcpu *vcpu, vcpu->arch.sipi_vector = events->sipi_vector; vcpu_put(vcpu); + + return 0; } long kvm_arch_vcpu_ioctl(struct file *filp, @@ -2107,9 +2114,7 @@ long kvm_arch_vcpu_ioctl(struct file *filp, if (copy_from_user(&events, argp, sizeof(struct kvm_vcpu_events))) break; - kvm_vcpu_ioctl_x86_set_vcpu_events(vcpu, &events); - - r = 0; + r = kvm_vcpu_ioctl_x86_set_vcpu_events(vcpu, &events); break; } default: