mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-11 15:27:47 +00:00
qemu: Fix job usage in qemuDomainBlockJobImpl
CVE-2013-6458
Every API that is going to begin a job should do that before fetching
data from vm->def.
(cherry picked from commit f93d2caa07
)
This commit is contained in:
parent
6eae1538c1
commit
8bdc22d281
@ -13341,16 +13341,25 @@ qemuDomainBlockJobImpl(virDomainPtr dom, const char *path, const char *base,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (!virDomainObjIsActive(vm)) {
|
||||||
|
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||||
|
_("domain is not running"));
|
||||||
|
goto endjob;
|
||||||
|
}
|
||||||
|
|
||||||
device = qemuDiskPathToAlias(vm, path, &idx);
|
device = qemuDiskPathToAlias(vm, path, &idx);
|
||||||
if (!device)
|
if (!device)
|
||||||
goto cleanup;
|
goto endjob;
|
||||||
disk = vm->def->disks[idx];
|
disk = vm->def->disks[idx];
|
||||||
|
|
||||||
if (mode == BLOCK_JOB_PULL && disk->mirror) {
|
if (mode == BLOCK_JOB_PULL && disk->mirror) {
|
||||||
virReportError(VIR_ERR_BLOCK_COPY_ACTIVE,
|
virReportError(VIR_ERR_BLOCK_COPY_ACTIVE,
|
||||||
_("disk '%s' already in active block copy job"),
|
_("disk '%s' already in active block copy job"),
|
||||||
disk->dst);
|
disk->dst);
|
||||||
goto cleanup;
|
goto endjob;
|
||||||
}
|
}
|
||||||
if (mode == BLOCK_JOB_ABORT &&
|
if (mode == BLOCK_JOB_ABORT &&
|
||||||
(flags & VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT) &&
|
(flags & VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT) &&
|
||||||
@ -13358,15 +13367,6 @@ qemuDomainBlockJobImpl(virDomainPtr dom, const char *path, const char *base,
|
|||||||
virReportError(VIR_ERR_OPERATION_INVALID,
|
virReportError(VIR_ERR_OPERATION_INVALID,
|
||||||
_("pivot of disk '%s' requires an active copy job"),
|
_("pivot of disk '%s' requires an active copy job"),
|
||||||
disk->dst);
|
disk->dst);
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
if (!virDomainObjIsActive(vm)) {
|
|
||||||
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
|
||||||
_("domain is not running"));
|
|
||||||
goto endjob;
|
goto endjob;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user