From: "Daniel P. Berrange" <berrange@xxxxxxxxxx> The parsing of '-usb' did not check for failure of the virDomainControllerInsert method. As a result on OOM, the parser mistakenly attached USB disks to the IDE controller. Signed-off-by: Daniel P. Berrange <berrange@xxxxxxxxxx> --- src/conf/domain_conf.h | 9 ++++++--- src/qemu/qemu_command.c | 3 ++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 9414ebf..5c33e08 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2361,7 +2361,8 @@ int virDomainDiskIndexByName(virDomainDefPtr def, const char *name, bool allow_ambiguous); const char *virDomainDiskPathByName(virDomainDefPtr, const char *name); int virDomainDiskInsert(virDomainDefPtr def, - virDomainDiskDefPtr disk); + virDomainDiskDefPtr disk) + ATTRIBUTE_RETURN_CHECK; void virDomainDiskInsertPreAlloced(virDomainDefPtr def, virDomainDiskDefPtr disk); int virDomainDiskDefAssignAddress(virDomainXMLOptionPtr xmlopt, @@ -2415,7 +2416,8 @@ virDomainNetGetActualBandwidth(virDomainNetDefPtr iface); virNetDevVlanPtr virDomainNetGetActualVlan(virDomainNetDefPtr iface); int virDomainControllerInsert(virDomainDefPtr def, - virDomainControllerDefPtr controller); + virDomainControllerDefPtr controller) + ATTRIBUTE_RETURN_CHECK; void virDomainControllerInsertPreAlloced(virDomainDefPtr def, virDomainControllerDefPtr controller); int virDomainControllerFind(virDomainDefPtr def, int type, int idx); @@ -2425,7 +2427,8 @@ int virDomainLeaseIndex(virDomainDefPtr def, virDomainLeaseDefPtr lease); int virDomainLeaseInsert(virDomainDefPtr def, virDomainLeaseDefPtr lease); -int virDomainLeaseInsertPreAlloc(virDomainDefPtr def); +int virDomainLeaseInsertPreAlloc(virDomainDefPtr def) + ATTRIBUTE_RETURN_CHECK; void virDomainLeaseInsertPreAlloced(virDomainDefPtr def, virDomainLeaseDefPtr lease); virDomainLeaseDefPtr diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index fe3d353..0376611 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -11624,7 +11624,8 @@ qemuParseCommandLine(virCapsPtr qemuCaps, ctldef->type = VIR_DOMAIN_CONTROLLER_TYPE_USB; ctldef->idx = 0; ctldef->model = -1; - virDomainControllerInsert(def, ctldef); + if (virDomainControllerInsert(def, ctldef) < 0) + goto error; } else if (STREQ(arg, "-pidfile")) { WANT_VALUE(); if (pidfile) -- 1.8.3.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list