Skip to content

Commit 175504c

Browse files
Takuya Yoshikawaavikivity
authored andcommitted
KVM: Take missing slots_lock for kvm_io_bus_unregister_dev()
In KVM_CREATE_IRQCHIP, kvm_io_bus_unregister_dev() is called without taking slots_lock in the error handling path. Signed-off-by: Takuya Yoshikawa <[email protected]> Signed-off-by: Avi Kivity <[email protected]>
1 parent a355c85 commit 175504c

File tree

2 files changed

+6
-0
lines changed

2 files changed

+6
-0
lines changed

arch/ia64/kvm/kvm-ia64.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -951,7 +951,9 @@ long kvm_arch_vm_ioctl(struct file *filp,
951951
goto out;
952952
r = kvm_setup_default_irq_routing(kvm);
953953
if (r) {
954+
mutex_lock(&kvm->slots_lock);
954955
kvm_ioapic_destroy(kvm);
956+
mutex_unlock(&kvm->slots_lock);
955957
goto out;
956958
}
957959
break;

arch/x86/kvm/x86.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3309,8 +3309,10 @@ long kvm_arch_vm_ioctl(struct file *filp,
33093309
if (vpic) {
33103310
r = kvm_ioapic_init(kvm);
33113311
if (r) {
3312+
mutex_lock(&kvm->slots_lock);
33123313
kvm_io_bus_unregister_dev(kvm, KVM_PIO_BUS,
33133314
&vpic->dev);
3315+
mutex_unlock(&kvm->slots_lock);
33143316
kfree(vpic);
33153317
goto create_irqchip_unlock;
33163318
}
@@ -3321,10 +3323,12 @@ long kvm_arch_vm_ioctl(struct file *filp,
33213323
smp_wmb();
33223324
r = kvm_setup_default_irq_routing(kvm);
33233325
if (r) {
3326+
mutex_lock(&kvm->slots_lock);
33243327
mutex_lock(&kvm->irq_lock);
33253328
kvm_ioapic_destroy(kvm);
33263329
kvm_destroy_pic(kvm);
33273330
mutex_unlock(&kvm->irq_lock);
3331+
mutex_unlock(&kvm->slots_lock);
33283332
}
33293333
create_irqchip_unlock:
33303334
mutex_unlock(&kvm->lock);

0 commit comments

Comments
 (0)