mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-21 20:15:17 +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 f93d2caa070f6197ab50d372d286018b0ba6bbd8)
This commit is contained in:
parent
0e98442e3b
commit
7354aaf460
@ -14036,16 +14036,25 @@ qemuDomainBlockJobImpl(virDomainObjPtr vm,
|
||||
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);
|
||||
if (!device)
|
||||
goto cleanup;
|
||||
goto endjob;
|
||||
disk = vm->def->disks[idx];
|
||||
|
||||
if (mode == BLOCK_JOB_PULL && disk->mirror) {
|
||||
virReportError(VIR_ERR_BLOCK_COPY_ACTIVE,
|
||||
_("disk '%s' already in active block copy job"),
|
||||
disk->dst);
|
||||
goto cleanup;
|
||||
goto endjob;
|
||||
}
|
||||
if (mode == BLOCK_JOB_ABORT &&
|
||||
(flags & VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT) &&
|
||||
@ -14053,15 +14062,6 @@ qemuDomainBlockJobImpl(virDomainObjPtr vm,
|
||||
virReportError(VIR_ERR_OPERATION_INVALID,
|
||||
_("pivot of disk '%s' requires an active copy job"),
|
||||
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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user