mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
blockjob: avoid segv on early error
Gcc with optimization warns: ../../src/qemu/qemu_driver.c: In function 'qemuDomainBlockCommit': ../../src/qemu/qemu_driver.c:12813:46: error: 'disk' may be used uninitialized in this function [-Werror=maybe-uninitialized] ../../src/qemu/qemu_driver.c:12698:25: note: 'disk' was declared here cc1: all warnings being treated as errors so obviously I had only been testing with optimization off. * src/qemu/qemu_driver.c (qemuDomainBlockCommit): Guard cleanup.
This commit is contained in:
parent
2e43cb8e90
commit
a172dfbe2e
@ -12695,12 +12695,13 @@ qemuDomainBlockCommit(virDomainPtr dom, const char *path, const char *base,
|
|||||||
char *device = NULL;
|
char *device = NULL;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
int idx;
|
int idx;
|
||||||
virDomainDiskDefPtr disk;
|
virDomainDiskDefPtr disk = NULL;
|
||||||
const char *top_canon = NULL;
|
const char *top_canon = NULL;
|
||||||
virStorageFileMetadataPtr top_meta = NULL;
|
virStorageFileMetadataPtr top_meta = NULL;
|
||||||
const char *top_parent = NULL;
|
const char *top_parent = NULL;
|
||||||
const char *base_canon = NULL;
|
const char *base_canon = NULL;
|
||||||
virCgroupPtr cgroup = NULL;
|
virCgroupPtr cgroup = NULL;
|
||||||
|
bool clean_access = false;
|
||||||
|
|
||||||
virCheckFlags(VIR_DOMAIN_BLOCK_COMMIT_SHALLOW, -1);
|
virCheckFlags(VIR_DOMAIN_BLOCK_COMMIT_SHALLOW, -1);
|
||||||
|
|
||||||
@ -12790,6 +12791,7 @@ qemuDomainBlockCommit(virDomainPtr dom, const char *path, const char *base,
|
|||||||
vm->def->name);
|
vm->def->name);
|
||||||
goto endjob;
|
goto endjob;
|
||||||
}
|
}
|
||||||
|
clean_access = true;
|
||||||
if (qemuDomainPrepareDiskChainElement(driver, vm, cgroup, disk, base_canon,
|
if (qemuDomainPrepareDiskChainElement(driver, vm, cgroup, disk, base_canon,
|
||||||
VIR_DISK_CHAIN_READ_WRITE) < 0 ||
|
VIR_DISK_CHAIN_READ_WRITE) < 0 ||
|
||||||
(top_parent && top_parent != disk->src &&
|
(top_parent && top_parent != disk->src &&
|
||||||
@ -12805,7 +12807,7 @@ qemuDomainBlockCommit(virDomainPtr dom, const char *path, const char *base,
|
|||||||
qemuDomainObjExitMonitor(driver, vm);
|
qemuDomainObjExitMonitor(driver, vm);
|
||||||
|
|
||||||
endjob:
|
endjob:
|
||||||
if (ret < 0) {
|
if (ret < 0 && clean_access) {
|
||||||
/* Revert access to read-only, if possible. */
|
/* Revert access to read-only, if possible. */
|
||||||
qemuDomainPrepareDiskChainElement(driver, vm, cgroup, disk, base_canon,
|
qemuDomainPrepareDiskChainElement(driver, vm, cgroup, disk, base_canon,
|
||||||
VIR_DISK_CHAIN_READ_ONLY);
|
VIR_DISK_CHAIN_READ_ONLY);
|
||||||
|
Loading…
Reference in New Issue
Block a user