diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c index cc5f275714..9336514abf 100644 --- a/src/vbox/vbox_tmpl.c +++ b/src/vbox/vbox_tmpl.c @@ -2269,6 +2269,12 @@ static void vboxHostDeviceGetXMLDesc(vboxGlobalData *data, virDomainDefPtr def, if (VIR_ALLOC_N(def->hostdevs, def->nhostdevs) < 0) goto release_filters; + for (i = 0; i < def->nhostdevs; i++) { + def->hostdevs[i] = virDomainHostdevDefAlloc(); + if (!def->hostdevs[i]) + goto release_hostdevs; + } + for (i = 0; i < deviceFilters.count; i++) { PRBool active = PR_FALSE; IUSBDeviceFilter *deviceFilter = deviceFilters.items[i]; @@ -2284,10 +2290,6 @@ static void vboxHostDeviceGetXMLDesc(vboxGlobalData *data, virDomainDefPtr def, if (!active) continue; - def->hostdevs[USBFilterCount] = virDomainHostdevDefAlloc(); - if (!def->hostdevs[USBFilterCount]) - continue; - def->hostdevs[USBFilterCount]->mode = VIR_DOMAIN_HOSTDEV_MODE_SUBSYS; def->hostdevs[USBFilterCount]->source.subsys.type = @@ -2322,6 +2324,15 @@ release_controller: #else VBOX_RELEASE(USBDeviceFilters); #endif + + return; + +release_hostdevs: + for (i = 0; i < def->nhostdevs; i++) + virDomainHostdevDefFree(def->hostdevs[i]); + VIR_FREE(def->hostdevs); + + goto release_filters; } static char *vboxDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) {