KVM: arm/arm64: Hold slots_lock when unregistering kvm io bus devices
We were not holding the kvm->slots_lock as required when calling kvm_io_bus_unregister_dev() as required. This only affects the error path, but still, let's do our due diligence. Reported by: Eric Auger <eric.auger@redhat.com> Signed-off-by: Christoffer Dall <cdall@linaro.org> Reviewed-by: Eric Auger <eric.auger@redhat.com>
This commit is contained in:
parent
552c9f47f8
commit
fa472fa91a
|
@ -614,15 +614,16 @@ int vgic_register_redist_iodev(struct kvm_vcpu *vcpu)
|
||||||
mutex_lock(&kvm->slots_lock);
|
mutex_lock(&kvm->slots_lock);
|
||||||
ret = kvm_io_bus_register_dev(kvm, KVM_MMIO_BUS, sgi_base,
|
ret = kvm_io_bus_register_dev(kvm, KVM_MMIO_BUS, sgi_base,
|
||||||
SZ_64K, &sgi_dev->dev);
|
SZ_64K, &sgi_dev->dev);
|
||||||
mutex_unlock(&kvm->slots_lock);
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
kvm_io_bus_unregister_dev(kvm, KVM_MMIO_BUS,
|
kvm_io_bus_unregister_dev(kvm, KVM_MMIO_BUS,
|
||||||
&rd_dev->dev);
|
&rd_dev->dev);
|
||||||
return ret;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
vgic->vgic_redist_free_offset += 2 * SZ_64K;
|
vgic->vgic_redist_free_offset += 2 * SZ_64K;
|
||||||
return 0;
|
out:
|
||||||
|
mutex_unlock(&kvm->slots_lock);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vgic_unregister_redist_iodev(struct kvm_vcpu *vcpu)
|
static void vgic_unregister_redist_iodev(struct kvm_vcpu *vcpu)
|
||||||
|
@ -647,10 +648,12 @@ static int vgic_register_all_redist_iodevs(struct kvm *kvm)
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
/* The current c failed, so we start with the previous one. */
|
/* The current c failed, so we start with the previous one. */
|
||||||
|
mutex_lock(&kvm->slots_lock);
|
||||||
for (c--; c >= 0; c--) {
|
for (c--; c >= 0; c--) {
|
||||||
vcpu = kvm_get_vcpu(kvm, c);
|
vcpu = kvm_get_vcpu(kvm, c);
|
||||||
vgic_unregister_redist_iodev(vcpu);
|
vgic_unregister_redist_iodev(vcpu);
|
||||||
}
|
}
|
||||||
|
mutex_unlock(&kvm->slots_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
Loading…
Reference in New Issue