Skip to contentSkip to conversation

Patch "arm/arm64: KVM: vgic: Fix error code in kvm_vgic_create()" has been added to the 3.14-stable tree

PATCH [email protected] 1 participant 1 message Jul 1, 2015 Stable branch

lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

arm/arm64: KVM: vgic: Fix error code in kvm_vgic_create()

to the 3.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
arm-arm64-kvm-vgic-fix-error-code-in-kvm_vgic_create.patch
and it can be found in the queue-3.14 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

Quoted 1 line

From 6b50f54064a02b77a7b990032b80234fee59bcd6 Mon Sep 17 00:00:00 2001

From: Christoffer Dall <[email protected]>
Date: Thu, 6 Nov 2014 11:47:39 +0000
Subject: arm/arm64: KVM: vgic: Fix error code in kvm_vgic_create()

From: Christoffer Dall <[email protected]>

commit 6b50f54064a02b77a7b990032b80234fee59bcd6 upstream.

If we detect another vCPU is running we just exit and return 0 as if we succesfully created the VGIC, but the VGIC wouldn't actual be created.

This shouldn't break in-kernel behavior because the kernel will not observe the failed the attempt to create the VGIC, but userspace could be rightfully confused.

---
 virt/kvm/arm/vgic.c |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
virt/kvm/arm/vgic.c +4 -4
@@ -1611,7 +1611,7 @@ out:
 
 int kvm_vgic_create(struct kvm *kvm)
 {
-	int i, vcpu_lock_idx = -1, ret = 0;
+	int i, vcpu_lock_idx = -1, ret;
 	struct kvm_vcpu *vcpu;
 
 	mutex_lock(&kvm->lock);
@@ -1626,6 +1626,7 @@ int kvm_vgic_create(struct kvm *kvm)
 	 * vcpu->mutex.  By grabbing the vcpu->mutex of all VCPUs we ensure
 	 * that no other VCPUs are run while we create the vgic.
 	 */
+	ret = -EBUSY;
 	kvm_for_each_vcpu(i, vcpu, kvm) {
 		if (!mutex_trylock(&vcpu->mutex))
 			goto out_unlock;
@@ -1633,11 +1634,10 @@ int kvm_vgic_create(struct kvm *kvm)
 	}
 
 	kvm_for_each_vcpu(i, vcpu, kvm) {
-		if (vcpu->arch.has_run_once) {
-			ret = -EBUSY;
+		if (vcpu->arch.has_run_once)
 			goto out_unlock;
-		}
 	}
+	ret = 0;
 
 	spin_lock_init(&kvm->arch.vgic.lock);
 	kvm->arch.vgic.vctrl_base = vgic_vctrl_base;

Patches currently in stable-queue which might be from [email protected] are

queue-3.14/arm-arm64-kvm-ensure-memslots-are-within-kvm_phys_size.patch queue-3.14/arm-arm64-kvm-fix-potential-null-dereference-in.patch queue-3.14/arm64-kvm-fix-unmapping-with-48-bit-vas.patch queue-3.14/arm-arm64-kvm-fix-set_clear_sgi_pend_reg-offset.patch queue-3.14/arm-kvm-strict_mm_typechecks-fix-for-user_mem_abort.patch queue-3.14/arm-arm64-kvm-fix-use-of-wnr-bit-in-kvm_is_write_fault.patch queue-3.14/arm-kvm-fix-cpu-hotplug.patch queue-3.14/arm-arm64-kvm-fix-vttbr_baddr_mask-and-pgd-alloc.patch queue-3.14/arm-arm64-kvm-vgic-fix-error-code-in-kvm_vgic_create.patch queue-3.14/kvm-arm-vgic-plug-irq-injection-race.patch