vmm: Avoid infinite loop in vcpu_lock_all error case.

Reported by:	Coverity (CIDs 1501060,1501071)
Reviewed by:	corvink, markj, emaste
Differential Revision:	https://reviews.freebsd.org/D37648
This commit is contained in:
John Baldwin 2022-12-09 10:26:49 -08:00
parent 91980db1be
commit d212d6ebb4

View File

@ -149,7 +149,7 @@ vcpu_lock_all(struct vmmdev_softc *sc)
{
struct vcpu *vcpu;
int error;
uint16_t i, maxcpus;
uint16_t i, j, maxcpus;
vm_slock_vcpus(sc->vm);
maxcpus = vm_get_maxcpus(sc->vm);
@ -163,11 +163,11 @@ vcpu_lock_all(struct vmmdev_softc *sc)
}
if (error) {
while (--i >= 0) {
vcpu = vm_vcpu(sc->vm, i);
for (j = 0; j < i; j++) {
vcpu = vm_vcpu(sc->vm, j);
if (vcpu == NULL)
continue;
vcpu_unlock_one(sc, i, vcpu);
vcpu_unlock_one(sc, j, vcpu);
}
vm_unlock_vcpus(sc->vm);
}