From: Daniel P. Berrange Date: Mon, 23 Sep 2013 16:44:49 +0000 (+0100) Subject: Check return value of virDomainControllerInsert when parsing QEMU args X-Git-Tag: v1.1.3-rc1~55 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cba4868ad88d6a236ae24ffef743812b78c30f8b;p=thirdparty%2Flibvirt.git Check return value of virDomainControllerInsert when parsing QEMU args 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 --- diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 9414ebff76..5c33e080c6 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 fe3d353ce3..0376611798 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)