kvm: svm: fix unsigned compare less than zero comparison
authorColin Ian King <colin.king@canonical.com>
Mon, 19 Sep 2016 06:11:59 +0000 (07:11 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Tue, 20 Sep 2016 07:26:30 +0000 (09:26 +0200)
vm_data->avic_vm_id is a u32, so the check for a error
return (less than zero) such as -EAGAIN from
avic_get_next_vm_id currently has no effect whatsoever.
Fix this by using a temporary int for the comparison
and assign vm_data->avic_vm_id to this. I used an explicit
u32 cast in the assignment to show why vm_data->avic_vm_id
cannot be used in the assign/compare steps.

Signed-off-by: Colin Ian King <colin.king@canonical.com>
Acked-by: Joerg Roedel <jroedel@suse.de>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/svm.c

index 8023d53..9b42214 100644 (file)
@@ -1412,7 +1412,7 @@ static void avic_vm_destroy(struct kvm *kvm)
 static int avic_vm_init(struct kvm *kvm)
 {
        unsigned long flags;
-       int err = -ENOMEM;
+       int vm_id, err = -ENOMEM;
        struct kvm_arch *vm_data = &kvm->arch;
        struct page *p_page;
        struct page *l_page;
@@ -1420,9 +1420,10 @@ static int avic_vm_init(struct kvm *kvm)
        if (!avic)
                return 0;
 
-       vm_data->avic_vm_id = avic_get_next_vm_id();
-       if (vm_data->avic_vm_id < 0)
-               return vm_data->avic_vm_id;
+       vm_id = avic_get_next_vm_id();
+       if (vm_id < 0)
+               return vm_id;
+       vm_data->avic_vm_id = (u32)vm_id;
 
        /* Allocating physical APIC ID table (4KB) */
        p_page = alloc_page(GFP_KERNEL);