We need this so we can later suppress generation and know whether user supplied one or not in XML. --- src/conf/domain_conf.c | 4 +++- src/conf/domain_conf.h | 2 +- src/openvz/openvz_conf.c | 3 ++- src/qemu/qemu_command.c | 3 ++- src/qemu/qemu_hotplug.c | 2 +- src/vbox/vbox_tmpl.c | 4 +++- src/vmx/vmx.c | 3 ++- src/xen/xm_internal.c | 5 ++--- src/xenxs/xen_sxpr.c | 3 ++- src/xenxs/xen_xm.c | 3 ++- 10 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 16e1291..c2c7057 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -594,6 +594,7 @@ void virDomainNetDefFree(virDomainNetDefPtr def) if (!def) return; + VIR_FREE(def->mac); VIR_FREE(def->model); switch (def->type) { @@ -2490,7 +2491,8 @@ virDomainNetDefParseXML(virCapsPtr caps, xmlNodePtr oldnode = ctxt->node; int ret; - if (VIR_ALLOC(def) < 0) { + if ((VIR_ALLOC(def) < 0) || + (VIR_ALLOC_N(def->mac,VIR_MAC_BUFLEN) < 0)) { virReportOOMError(); return NULL; } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 30aeccc..476e122 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -345,7 +345,7 @@ typedef struct _virDomainNetDef virDomainNetDef; typedef virDomainNetDef *virDomainNetDefPtr; struct _virDomainNetDef { enum virDomainNetType type; - unsigned char mac[VIR_MAC_BUFLEN]; + unsigned char *mac; char *model; union { struct { diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c index 0eb5ab3..458f107 100644 --- a/src/openvz/openvz_conf.c +++ b/src/openvz/openvz_conf.c @@ -236,7 +236,8 @@ openvzReadNetworkConf(virDomainDefPtr def, token = strtok_r(temp, ";", &saveptr); while (token != NULL) { /*add new device to list*/ - if (VIR_ALLOC(net) < 0) + if ((VIR_ALLOC(net) < 0) || + (VIR_ALLOC_N(net->mac, VIR_MAC_BUFLEN) < 0)) goto no_memory; net->type = VIR_DOMAIN_NET_TYPE_BRIDGE; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index c9b9850..35d695d 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -5017,7 +5017,8 @@ qemuParseCommandLineNet(virCapsPtr caps, nkeywords = 0; } - if (VIR_ALLOC(def) < 0) { + if ((VIR_ALLOC(def) < 0) || + (VIR_ALLOC_N(def->mac, VIR_MAC_BUFLEN) < 0)) { virReportOOMError(); goto cleanup; } diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index e4ba526..d8a8e5d 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -1479,7 +1479,7 @@ int qemuDomainDetachNetDevice(struct qemud_driver *driver, for (i = 0 ; i < vm->def->nnets ; i++) { virDomainNetDefPtr net = vm->def->nets[i]; - if (!memcmp(net->mac, dev->data.net->mac, sizeof(net->mac))) { + if (!memcmp(net->mac, dev->data.net->mac, VIR_MAC_BUFLEN)) { detach = net; break; } diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c index e8ac48f..f964e4b 100644 --- a/src/vbox/vbox_tmpl.c +++ b/src/vbox/vbox_tmpl.c @@ -2709,7 +2709,9 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) { /* Allocate memory for the networkcards which are enabled */ if ((def->nnets > 0) && (VIR_ALLOC_N(def->nets, def->nnets) >= 0)) { for (i = 0; i < def->nnets; i++) { - if (VIR_ALLOC(def->nets[i]) >= 0) { + if ((VIR_ALLOC(def->nets[i]) >= 0) || + (VIR_ALLOC_N(def->nets[i]->mac, + VIR_MAC_BUFLEN) >= 0)) { } else virReportOOMError(); } diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index 9f4d5fb..77f18c2 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -2271,7 +2271,8 @@ virVMXParseEthernet(virConfPtr conf, int controller, virDomainNetDefPtr *def) return -1; } - if (VIR_ALLOC(*def) < 0) { + if ((VIR_ALLOC(*def) < 0) || + (VIR_ALLOC_N((*def)->mac, VIR_MAC_BUFLEN) < 0)) { virReportOOMError(); return -1; } diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c index 7f73588..9a9fa0c 100644 --- a/src/xen/xm_internal.c +++ b/src/xen/xm_internal.c @@ -1501,9 +1501,8 @@ xenXMDomainDetachDeviceFlags(virDomainPtr domain, const char *xml, case VIR_DOMAIN_DEVICE_NET: { for (i = 0 ; i < def->nnets ; i++) { - if (!memcmp(def->nets[i]->mac, - dev->data.net->mac, - sizeof(def->nets[i]->mac))) { + if (!memcmp(def->nets[i]->mac, dev->data.net->mac, + VIR_MAC_BUFLEN)) { virDomainNetDefFree(def->nets[i]); if (i < (def->nnets - 1)) memmove(def->nets + i, diff --git a/src/xenxs/xen_sxpr.c b/src/xenxs/xen_sxpr.c index 3a412a6..e918801 100644 --- a/src/xenxs/xen_sxpr.c +++ b/src/xenxs/xen_sxpr.c @@ -518,7 +518,8 @@ xenParseSxprNets(virDomainDefPtr def, model = sexpr_node(node, "device/vif/model"); type = sexpr_node(node, "device/vif/type"); - if (VIR_ALLOC(net) < 0) + if ((VIR_ALLOC(net) < 0) || + (VIR_ALLOC_N(net->mac, VIR_MAC_BUFLEN) < 0)) goto no_memory; if (tmp != NULL || diff --git a/src/xenxs/xen_xm.c b/src/xenxs/xen_xm.c index 0acd120..6a94b09 100644 --- a/src/xenxs/xen_xm.c +++ b/src/xenxs/xen_xm.c @@ -647,7 +647,8 @@ xenParseXM(virConfPtr conf, int xendConfigVersion, key = nextkey; } - if (VIR_ALLOC(net) < 0) + if ((VIR_ALLOC(net) < 0) || + (VIR_ALLOC_N(net->mac, VIR_MAC_BUFLEN) < 0)) goto no_memory; if (mac[0]) { -- 1.7.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list