This is a note to let you know that I've just added the patch titled KVM: Clean up error handling during VCPU creation to the 3.0-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: kvm-clean-up-error-handling-during-vcpu-creation.patch and it can be found in the queue-3.0 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From jslaby@xxxxxxx Mon Apr 1 16:35:27 2013 From: Jiri Slaby <jslaby@xxxxxxx> Date: Tue, 19 Mar 2013 12:36:46 +0100 Subject: KVM: Clean up error handling during VCPU creation To: gregkh@xxxxxxxxxxxxxxxxxxx Cc: jirislaby@xxxxxxxxx, stable@xxxxxxxxxxxxxxx, Jan Kiszka <jan.kiszka@xxxxxxxxxxx>, Avi Kivity <avi@xxxxxxxxxx>, Jiri Slaby <jslaby@xxxxxxx> Message-ID: <1363693019-14812-1-git-send-email-jslaby@xxxxxxx> From: Jan Kiszka <jan.kiszka@xxxxxxxxxxx> commit d780592b99d7d8a5ff905f6bacca519d4a342c76 upstream. So far kvm_arch_vcpu_setup is responsible for freeing the vcpu struct if it fails. Move this confusing resonsibility back into the hands of kvm_vm_ioctl_create_vcpu. Only kvm_arch_vcpu_setup of x86 is affected, all other archs cannot fail. Signed-off-by: Jan Kiszka <jan.kiszka@xxxxxxxxxxx> Signed-off-by: Avi Kivity <avi@xxxxxxxxxx> Signed-off-by: Jiri Slaby <jslaby@xxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- arch/x86/kvm/x86.c | 5 ----- virt/kvm/kvm_main.c | 11 ++++++----- 2 files changed, 6 insertions(+), 10 deletions(-) --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -6116,12 +6116,7 @@ int kvm_arch_vcpu_setup(struct kvm_vcpu if (r == 0) r = kvm_mmu_setup(vcpu); vcpu_put(vcpu); - if (r < 0) - goto free_vcpu; - return 0; -free_vcpu: - kvm_x86_ops->vcpu_free(vcpu); return r; } --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -1616,18 +1616,18 @@ static int kvm_vm_ioctl_create_vcpu(stru r = kvm_arch_vcpu_setup(vcpu); if (r) - return r; + goto vcpu_destroy; mutex_lock(&kvm->lock); if (atomic_read(&kvm->online_vcpus) == KVM_MAX_VCPUS) { r = -EINVAL; - goto vcpu_destroy; + goto unlock_vcpu_destroy; } kvm_for_each_vcpu(r, v, kvm) if (v->vcpu_id == id) { r = -EEXIST; - goto vcpu_destroy; + goto unlock_vcpu_destroy; } BUG_ON(kvm->vcpus[atomic_read(&kvm->online_vcpus)]); @@ -1637,7 +1637,7 @@ static int kvm_vm_ioctl_create_vcpu(stru r = create_vcpu_fd(vcpu); if (r < 0) { kvm_put_kvm(kvm); - goto vcpu_destroy; + goto unlock_vcpu_destroy; } kvm->vcpus[atomic_read(&kvm->online_vcpus)] = vcpu; @@ -1651,8 +1651,9 @@ static int kvm_vm_ioctl_create_vcpu(stru mutex_unlock(&kvm->lock); return r; -vcpu_destroy: +unlock_vcpu_destroy: mutex_unlock(&kvm->lock); +vcpu_destroy: kvm_arch_vcpu_destroy(vcpu); return r; } Patches currently in stable-queue which might be from jslaby@xxxxxxx are queue-3.0/kvm-x86-prevent-starting-pit-timers-in-the-absence-of-irqchip-support.patch queue-3.0/kvm-x86-invalid-opcode-oops-on-set_sregs-with-osxsave-bit-set-cve-2012-4461.patch queue-3.0/mm-hotplug-correctly-add-new-zone-to-all-other-nodes-zone-lists.patch queue-3.0/macvtap-zerocopy-validate-vectors-before-building-skb.patch queue-3.0/x25-validate-incoming-call-user-data-lengths.patch queue-3.0/batman-adv-bat_socket_read-missing-checks.patch queue-3.0/kvm-fix-buffer-overflow-in-kvm_set_irq.patch queue-3.0/x25-handle-undersized-fragmented-skbs.patch queue-3.0/nfsv4-include-bitmap-in-nfsv4-get-acl-data.patch queue-3.0/nfs-nfs_getaclargs.acl_len-is-a-size_t.patch queue-3.0/nfsv4-fix-an-oops-in-the-nfsv4-getacl-code.patch queue-3.0/kvm-clean-up-error-handling-during-vcpu-creation.patch queue-3.0/kvm-ensure-all-vcpus-are-consistent-with-in-kernel-irqchip-settings.patch queue-3.0/batman-adv-only-write-requested-number-of-byte-to-user-buffer.patch -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html