提交 00e00510 编写于 作者: M Matthias Bolte

xen: Use virParseMacAddr instead of sscanf

This also fixes a bug in xenXMDomainConfigParse where uninitialized
memory would be used as MAC address if sscanf fails.
上级 2f047d48
......@@ -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 &&
......
......@@ -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") ||
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册