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