提交 cc82a936 编写于 作者: R Richard W.M. Jones

Wed Sep 12 16:35:00 BST 2007 Richard W.M. Jones <rjones@redhat.com>

        * src/xend_internal.c, src/xml.c, src/xml.h: Properly check buffer
        size in virDomainXMLDevID (Hugh Brock).
上级 5fac0c95
Wed Sep 12 16:35:00 BST 2007 Richard W.M. Jones <rjones@redhat.com>
* src/xend_internal.c, src/xml.c, src/xml.h: Properly check buffer
size in virDomainXMLDevID (Hugh Brock).
Wed Sep 12 11:30:00 BST 2007 Richard W.M. Jones <rjones@redhat.com>
* src/xend_internal.c, src/xen_unified.c: Removed an annoying
......
......@@ -3116,7 +3116,7 @@ xenDaemonAttachDevice(virDomainPtr domain, char *xml)
*(conf + strlen(conf) -1) = 0; /* suppress final ) */
}
else conf = sexpr;
if (virDomainXMLDevID(domain, xml, class, ref)) {
if (virDomainXMLDevID(domain, xml, class, ref, sizeof(ref))) {
/* device doesn't exist, define it */
ret = xend_op(domain->conn, domain->name, "op", "device_create",
"config", conf, NULL);
......@@ -3149,7 +3149,7 @@ xenDaemonDetachDevice(virDomainPtr domain, char *xml)
__FUNCTION__);
return (-1);
}
if (virDomainXMLDevID(domain, xml, class, ref))
if (virDomainXMLDevID(domain, xml, class, ref, sizeof(ref)))
return (-1);
return(xend_op(domain->conn, domain->name, "op", "device_destroy",
"type", class, "dev", ref, NULL));
......
......@@ -1385,7 +1385,7 @@ virParseXMLDevice(virConnectPtr conn, char *xmldesc, int hvm, int xendConfigVers
* Returns 0 in case of success, -1 in case of failure.
*/
int
virDomainXMLDevID(virDomainPtr domain, char *xmldesc, char *class, char *ref)
virDomainXMLDevID(virDomainPtr domain, char *xmldesc, char *class, char *ref, int ref_len)
{
xmlDocPtr xml = NULL;
xmlNodePtr node, cur;
......@@ -1413,7 +1413,8 @@ virDomainXMLDevID(virDomainPtr domain, char *xmldesc, char *class, char *ref)
attr = xmlGetProp(cur, BAD_CAST "dev");
if (attr == NULL)
goto error;
strcpy(ref, (char *)attr);
strncpy(ref, (char *)attr, ref_len);
ref[ref_len -1] = '\0';
goto cleanup;
}
}
......@@ -1430,8 +1431,9 @@ virDomainXMLDevID(virDomainPtr domain, char *xmldesc, char *class, char *ref)
xref = xenStoreDomainGetNetworkID(domain->conn, domain->id,
(char *) attr);
if (xref != NULL) {
strcpy(ref, xref);
strncpy(ref, xref, ref_len);
free(xref);
ref[ref_len - 1] = '\0';
goto cleanup;
}
#else /* without xen */
......
......@@ -33,7 +33,7 @@ int virXPathNodeSet (const char *xpath,
char *virDomainParseXMLDesc(virConnectPtr conn, const char *xmldesc, char **name, int xendConfigVersion);
char *virParseXMLDevice(virConnectPtr conn, char *xmldesc, int hvm, int xendConfigVersion);
int virDomainXMLDevID(virDomainPtr domain, char *xmldesc, char *class, char *ref);
int virDomainXMLDevID(virDomainPtr domain, char *xmldesc, char *class, char *ref, int ref_len);
#ifdef __cplusplus
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册