]> xenbits.xensource.com Git - libvirt.git/commitdiff
xen: Use virParseMacAddr instead of sscanf
authorMatthias Bolte <matthias.bolte@googlemail.com>
Tue, 30 Mar 2010 14:29:53 +0000 (16:29 +0200)
committerMatthias Bolte <matthias.bolte@googlemail.com>
Thu, 1 Apr 2010 10:53:41 +0000 (12:53 +0200)
This also fixes a bug in xenXMDomainConfigParse where uninitialized
memory would be used as MAC address if sscanf fails.

src/xen/xend_internal.c
src/xen/xm_internal.c

index 46e19cd5730021fcac457b3ad65cb93db2e57ce9..0649d23a375766978d974e8900220e65ef1d157f 100644 (file)
@@ -1819,25 +1819,11 @@ xenDaemonParseSxprNets(virConnectPtr conn,
 
             tmp = sexpr_node(node, "device/vif/mac");
             if (tmp) {
-                unsigned int mac[6];
-                if (sscanf(tmp, "%02x:%02x:%02x:%02x:%02x:%02x",
-                           (unsigned int*)&mac[0],
-                           (unsigned int*)&mac[1],
-                           (unsigned int*)&mac[2],
-                           (unsigned int*)&mac[3],
-                           (unsigned int*)&mac[4],
-                           (unsigned int*)&mac[5]) != 6) {
+                if (virParseMacAddr(tmp, net->mac) < 0) {
                     virXendError(conn, VIR_ERR_INTERNAL_ERROR,
-                                 _("malformed mac address '%s'"),
-                                 tmp);
+                                 _("malformed mac address '%s'"), tmp);
                     goto cleanup;
                 }
-                net->mac[0] = mac[0];
-                net->mac[1] = mac[1];
-                net->mac[2] = mac[2];
-                net->mac[3] = mac[3];
-                net->mac[4] = mac[4];
-                net->mac[5] = mac[5];
             }
 
             if (model &&
index ddbd2fe241248a96854cd896e6ee791823ecc36f..0d42b01249dc7220df449c9e0743460ea1c87296 100644 (file)
@@ -1115,20 +1115,11 @@ xenXMDomainConfigParse(virConnectPtr conn, virConfPtr conf) {
                 goto no_memory;
 
             if (mac[0]) {
-                unsigned int rawmac[6];
-                sscanf(mac, "%02x:%02x:%02x:%02x:%02x:%02x",
-                       (unsigned int*)&rawmac[0],
-                       (unsigned int*)&rawmac[1],
-                       (unsigned int*)&rawmac[2],
-                       (unsigned int*)&rawmac[3],
-                       (unsigned int*)&rawmac[4],
-                       (unsigned int*)&rawmac[5]);
-                net->mac[0] = rawmac[0];
-                net->mac[1] = rawmac[1];
-                net->mac[2] = rawmac[2];
-                net->mac[3] = rawmac[3];
-                net->mac[4] = rawmac[4];
-                net->mac[5] = rawmac[5];
+                if (virParseMacAddr(mac, net->mac) < 0) {
+                    xenXMError(conn, VIR_ERR_INTERNAL_ERROR,
+                               _("malformed mac address '%s'"), mac);
+                    goto cleanup;
+                }
             }
 
             if (bridge[0] || STREQ(script, "vif-bridge") ||