commit
896beceba3
@ -0,0 +1 @@
|
|||||||
|
SOURCES/vhostmd-1.1.tar.gz
|
@ -0,0 +1 @@
|
|||||||
|
93e6bbbf15be248e7da222d377d2b98fb4c2be24 SOURCES/vhostmd-1.1.tar.gz
|
@ -0,0 +1,42 @@
|
|||||||
|
From 83cc269f6892852be94467cea771b3ad1da8a369 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Date: Tue, 8 Oct 2019 20:56:18 -0600
|
||||||
|
Subject: [PATCH 01/19] Relax virtio requirement in config file
|
||||||
|
|
||||||
|
When the virtio transport was introduced the schema was changed to
|
||||||
|
require a <virtio> transport in vhostmd.conf. When updating existing
|
||||||
|
deployments without a virtio transport specified in vhostmd.conf,
|
||||||
|
vhostmd fails to start
|
||||||
|
|
||||||
|
/usr/sbin/vhostmd -d
|
||||||
|
/etc/vhostmd/vhostmd.conf:41: element globals: validity error : Element
|
||||||
|
globals content does not follow the DTD, expecting (disk , virtio ,
|
||||||
|
update_period , path , transport+), got (disk update_period path transport )
|
||||||
|
validate_config_file(): Failed to validate :/etc/vhostmd/vhostmd.conf
|
||||||
|
Config file: /etc/vhostmd/vhostmd.conf, fails DTD validation
|
||||||
|
|
||||||
|
Relax the requirement for virtio transport in the schema. With the
|
||||||
|
introduction of multiple transports perhaps the others shoud be optional
|
||||||
|
as well, but requiring virtio is clearly a regression.
|
||||||
|
|
||||||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
---
|
||||||
|
vhostmd.dtd | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/vhostmd.dtd b/vhostmd.dtd
|
||||||
|
index db417fd..888270e 100644
|
||||||
|
--- a/vhostmd.dtd
|
||||||
|
+++ b/vhostmd.dtd
|
||||||
|
@@ -9,7 +9,7 @@ Virtual Host Metrics Daemon (vhostmd). Configuration file DTD
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!ELEMENT vhostmd (globals,metrics)>
|
||||||
|
-<!ELEMENT globals (disk,virtio,update_period,path,transport+)>
|
||||||
|
+<!ELEMENT globals (disk,virtio*,update_period,path,transport+)>
|
||||||
|
|
||||||
|
<!ELEMENT disk (name,path,size)>
|
||||||
|
<!ELEMENT name (#PCDATA)>
|
||||||
|
--
|
||||||
|
2.32.0
|
||||||
|
|
@ -0,0 +1,58 @@
|
|||||||
|
From 06e73264b2338d20aa6e3f17b9820be3768439bf Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Date: Mon, 6 Jan 2020 16:14:18 -0700
|
||||||
|
Subject: [PATCH 02/19] libmetrics: Set pointer NULL after free
|
||||||
|
|
||||||
|
From a coverity scan
|
||||||
|
|
||||||
|
vhostmd-1.1/libmetrics/libmetrics.c:185:10: warning: Attempt to free released memory
|
||||||
|
free(mdisk->buffer);
|
||||||
|
|
||||||
|
Some error conditions will call mdisk_content_free(), which could result
|
||||||
|
in a double-free when the entire mdisk is freed and mdisk_content_free()
|
||||||
|
is called again. Protect agains these potential double-frees by setting
|
||||||
|
the mdisk contents NULL after freeing them.
|
||||||
|
|
||||||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
---
|
||||||
|
libmetrics/libmetrics.c | 24 ++++++++++++++++--------
|
||||||
|
1 file changed, 16 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libmetrics/libmetrics.c b/libmetrics/libmetrics.c
|
||||||
|
index 6c80681..a5582e7 100644
|
||||||
|
--- a/libmetrics/libmetrics.c
|
||||||
|
+++ b/libmetrics/libmetrics.c
|
||||||
|
@@ -177,14 +177,22 @@ static metric_disk * mdisk_alloc()
|
||||||
|
static void mdisk_content_free()
|
||||||
|
{
|
||||||
|
if (mdisk) {
|
||||||
|
- if (mdisk->doc)
|
||||||
|
- xmlFreeDoc(mdisk->doc);
|
||||||
|
- if (mdisk->pctxt)
|
||||||
|
- xmlFreeParserCtxt(mdisk->pctxt);
|
||||||
|
- if (mdisk->buffer)
|
||||||
|
- free(mdisk->buffer);
|
||||||
|
- if (mdisk->disk_name)
|
||||||
|
- free(mdisk->disk_name);
|
||||||
|
+ if (mdisk->doc) {
|
||||||
|
+ xmlFreeDoc(mdisk->doc);
|
||||||
|
+ mdisk->doc = NULL;
|
||||||
|
+ }
|
||||||
|
+ if (mdisk->pctxt) {
|
||||||
|
+ xmlFreeParserCtxt(mdisk->pctxt);
|
||||||
|
+ mdisk->pctxt = NULL;
|
||||||
|
+ }
|
||||||
|
+ if (mdisk->buffer) {
|
||||||
|
+ free(mdisk->buffer);
|
||||||
|
+ mdisk->buffer = NULL;
|
||||||
|
+ }
|
||||||
|
+ if (mdisk->disk_name) {
|
||||||
|
+ free(mdisk->disk_name);
|
||||||
|
+ mdisk->disk_name = NULL;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.32.0
|
||||||
|
|
@ -0,0 +1,125 @@
|
|||||||
|
From 9db959c9e3f83cb2a4fc07534462e769990d9631 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Date: Mon, 6 Jan 2020 16:33:24 -0700
|
||||||
|
Subject: [PATCH 03/19] libmetrics: Initialize local variable 'ret' to failure
|
||||||
|
|
||||||
|
The get_mdef() and dump_xenstore_metrics() functions have local variables
|
||||||
|
named 'ret' that are initialized to zero, meaning success. In failure paths
|
||||||
|
'ret' is set to -1 before jumping to the 'out' label. Invert this logic by
|
||||||
|
initializing 'ret' to -1 and only setting it to success after the function
|
||||||
|
bodies have successfully executed.
|
||||||
|
|
||||||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
---
|
||||||
|
libmetrics/libmetrics.c | 16 ++++------------
|
||||||
|
1 file changed, 4 insertions(+), 12 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libmetrics/libmetrics.c b/libmetrics/libmetrics.c
|
||||||
|
index a5582e7..49b38ea 100644
|
||||||
|
--- a/libmetrics/libmetrics.c
|
||||||
|
+++ b/libmetrics/libmetrics.c
|
||||||
|
@@ -228,7 +228,7 @@ static int get_mdef(metric_disk *mdisk, private_metric *pmdef)
|
||||||
|
xmlNodePtr node;
|
||||||
|
char *str;
|
||||||
|
char *xpath;
|
||||||
|
- int ret = 0;
|
||||||
|
+ int ret = -1;
|
||||||
|
|
||||||
|
ctxt = xmlXPathNewContext(mdisk->doc);
|
||||||
|
if (!ctxt) {
|
||||||
|
@@ -242,19 +242,16 @@ static int get_mdef(metric_disk *mdisk, private_metric *pmdef)
|
||||||
|
if ((obj == NULL) || (obj->type != XPATH_NODESET)) {
|
||||||
|
libmsg("%s(): No metrics found that matches %s in context:%s or malformed definition\n",
|
||||||
|
__func__, pmdef->name, pmdef->context);
|
||||||
|
- ret = -1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
if (xmlXPathNodeSetGetLength(obj->nodesetval) != 1) {
|
||||||
|
libmsg("%s(): No metrics found that matches %s in context:%s or malformed definition\n",
|
||||||
|
__func__, pmdef->name, pmdef->context);
|
||||||
|
- ret = -1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
node = obj->nodesetval->nodeTab[0];
|
||||||
|
if ((str = (char *)xmlGetProp(node, BAD_CAST "type")) == NULL) {
|
||||||
|
libmsg("%s(): Metric type not specified\n", __func__);
|
||||||
|
- ret = -1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
metric_type_from_str((char *)str, &(pmdef->type));
|
||||||
|
@@ -267,7 +264,6 @@ static int get_mdef(metric_disk *mdisk, private_metric *pmdef)
|
||||||
|
free(xpath);
|
||||||
|
if ((obj == NULL) || (obj->type != XPATH_NODESET)) {
|
||||||
|
libmsg("%s(): No metrics value found!\n", __func__);
|
||||||
|
- ret = -1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -276,6 +272,7 @@ static int get_mdef(metric_disk *mdisk, private_metric *pmdef)
|
||||||
|
str = (char *)xmlNodeListGetString(mdisk->doc, node, 1);
|
||||||
|
pmdef->value = strdup(str);
|
||||||
|
free(str);
|
||||||
|
+ ret = 0;
|
||||||
|
|
||||||
|
out:
|
||||||
|
if (obj)
|
||||||
|
@@ -707,7 +704,7 @@ int dump_xenstore_metrics(const char *dest_file)
|
||||||
|
char *buf = NULL, *path = NULL, *metrics = NULL;
|
||||||
|
struct xs_handle *xsh = NULL;
|
||||||
|
unsigned int len;
|
||||||
|
- int ret = 0;
|
||||||
|
+ int ret = -1;
|
||||||
|
xmlParserCtxtPtr pctxt = NULL;
|
||||||
|
xmlDocPtr doc = NULL;
|
||||||
|
int domid;
|
||||||
|
@@ -726,35 +723,30 @@ int dump_xenstore_metrics(const char *dest_file)
|
||||||
|
|
||||||
|
if ((domid = get_dom_id()) == -1) {
|
||||||
|
libmsg("Unable to derive domID.\n" );
|
||||||
|
- ret = -1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
xsh = xs_domain_open();
|
||||||
|
if (xsh == NULL) {
|
||||||
|
libmsg("xs_domain_open() error. errno: %d.\n", errno);
|
||||||
|
- ret = -1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
path = xs_get_domain_path(xsh, domid);
|
||||||
|
if (path == NULL) {
|
||||||
|
libmsg("xs_get_domain_path() error. domid %d.\n", 0);
|
||||||
|
- ret = -1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
asprintf(&buf, "%s/metrics", path);
|
||||||
|
metrics = xs_read(xsh, XBT_NULL, buf, &len);
|
||||||
|
if (metrics == NULL) {
|
||||||
|
libmsg("xs_read(): uuid get error. %s.\n", buf);
|
||||||
|
- ret = -1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
pctxt = xmlNewParserCtxt();
|
||||||
|
if (!pctxt || !pctxt->sax) {
|
||||||
|
libmsg("%s(): failed to create parser \n", __func__);
|
||||||
|
- ret = -1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -764,10 +756,10 @@ int dump_xenstore_metrics(const char *dest_file)
|
||||||
|
XML_PARSE_NOWARNING);
|
||||||
|
if (!doc) {
|
||||||
|
libmsg("%s(): libxml failed to xenstore metrics attribute\n", __func__);
|
||||||
|
- ret = -1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
xmlDocFormatDump(fp, doc, 1);
|
||||||
|
+ ret = 0;
|
||||||
|
|
||||||
|
out:
|
||||||
|
if (fp && fp != stdout)
|
||||||
|
--
|
||||||
|
2.32.0
|
||||||
|
|
@ -0,0 +1,67 @@
|
|||||||
|
From f659ec774221532cc5452a07418e2ab1385f162c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Date: Mon, 6 Jan 2020 16:43:21 -0700
|
||||||
|
Subject: [PATCH 04/19] libmetrics: Check return value of asprintf
|
||||||
|
|
||||||
|
Exmaple from coverity scan
|
||||||
|
|
||||||
|
vhostmd-1.1/libmetrics/libmetrics.c: scope_hint: In function 'get_mdef'
|
||||||
|
vhostmd-1.1/libmetrics/libmetrics.c:231:4: warning: ignoring return value of 'asprintf', declared with attribute warn_unused_result [-Wunused-result]
|
||||||
|
asprintf(&xpath, "//metrics/metric[name='%s'][@context='%s']", pmdef->name, pmdef->context);
|
||||||
|
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
---
|
||||||
|
libmetrics/libmetrics.c | 15 +++++++++++----
|
||||||
|
1 file changed, 11 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libmetrics/libmetrics.c b/libmetrics/libmetrics.c
|
||||||
|
index 49b38ea..4b2369a 100644
|
||||||
|
--- a/libmetrics/libmetrics.c
|
||||||
|
+++ b/libmetrics/libmetrics.c
|
||||||
|
@@ -236,7 +236,9 @@ static int get_mdef(metric_disk *mdisk, private_metric *pmdef)
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get the matching metric node type */
|
||||||
|
- asprintf(&xpath, "//metrics/metric[name='%s'][@context='%s']", pmdef->name, pmdef->context);
|
||||||
|
+ if (asprintf(&xpath, "//metrics/metric[name='%s'][@context='%s']", pmdef->name, pmdef->context) < 0)
|
||||||
|
+ goto out;
|
||||||
|
+
|
||||||
|
obj = xmlXPathEval(BAD_CAST xpath, ctxt);
|
||||||
|
free(xpath);
|
||||||
|
if ((obj == NULL) || (obj->type != XPATH_NODESET)) {
|
||||||
|
@@ -259,7 +261,9 @@ static int get_mdef(metric_disk *mdisk, private_metric *pmdef)
|
||||||
|
xmlXPathFreeObject(obj);
|
||||||
|
|
||||||
|
/* Get the matching metric node value */
|
||||||
|
- asprintf(&xpath, "//metrics/metric[name='%s'][@context='%s']/value/text()", pmdef->name, pmdef->context);
|
||||||
|
+ if (asprintf(&xpath, "//metrics/metric[name='%s'][@context='%s']/value/text()", pmdef->name, pmdef->context) < 0)
|
||||||
|
+ goto out;
|
||||||
|
+
|
||||||
|
obj = xmlXPathEval( BAD_CAST xpath, ctxt); /* worked but no nodes */
|
||||||
|
free(xpath);
|
||||||
|
if ((obj == NULL) || (obj->type != XPATH_NODESET)) {
|
||||||
|
@@ -349,7 +353,8 @@ retry:
|
||||||
|
strcmp(entry->d_name, "..") == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
- asprintf(&path, "/dev/%s", entry->d_name);
|
||||||
|
+ if (asprintf(&path, "/dev/%s", entry->d_name) < 0)
|
||||||
|
+ goto error;
|
||||||
|
#else
|
||||||
|
path = strdup("/dev/shm/vhostmd0");
|
||||||
|
#endif
|
||||||
|
@@ -737,7 +742,9 @@ int dump_xenstore_metrics(const char *dest_file)
|
||||||
|
libmsg("xs_get_domain_path() error. domid %d.\n", 0);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
- asprintf(&buf, "%s/metrics", path);
|
||||||
|
+ if (asprintf(&buf, "%s/metrics", path) , 0)
|
||||||
|
+ goto out;
|
||||||
|
+
|
||||||
|
metrics = xs_read(xsh, XBT_NULL, buf, &len);
|
||||||
|
if (metrics == NULL) {
|
||||||
|
libmsg("xs_read(): uuid get error. %s.\n", buf);
|
||||||
|
--
|
||||||
|
2.32.0
|
||||||
|
|
@ -0,0 +1,41 @@
|
|||||||
|
From 3d4f3acdfc9f937bea946bb1c7dfad1f3516a6ce Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Date: Mon, 6 Jan 2020 17:42:39 -0700
|
||||||
|
Subject: [PATCH 05/19] libmetrics: Remove unsafe XML_PARSE_NOENT option
|
||||||
|
|
||||||
|
From coverity scan
|
||||||
|
|
||||||
|
Error: UNSAFE_XML_PARSE_CONFIG:
|
||||||
|
vhostmd-1.1/libmetrics/libmetrics.c:412: unsafe_xml_parse_config: XML parse option should not have flag "XML_PARSE_NOENT" set, which is vulnerable to XML external entity attack.
|
||||||
|
410| mdisk->doc = xmlCtxtReadMemory(mdisk->pctxt, mdisk->buffer,
|
||||||
|
411| mdisk->length, "mdisk.xml", NULL,
|
||||||
|
412|-> XML_PARSE_NOENT | XML_PARSE_NONET |
|
||||||
|
413| XML_PARSE_NOWARNING);
|
||||||
|
414| if (!mdisk->doc) {
|
||||||
|
|
||||||
|
It should be safe to remove the option.
|
||||||
|
|
||||||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
---
|
||||||
|
libmetrics/libmetrics.c | 5 ++---
|
||||||
|
1 file changed, 2 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libmetrics/libmetrics.c b/libmetrics/libmetrics.c
|
||||||
|
index 4b2369a..2819f80 100644
|
||||||
|
--- a/libmetrics/libmetrics.c
|
||||||
|
+++ b/libmetrics/libmetrics.c
|
||||||
|
@@ -418,9 +418,8 @@ retry:
|
||||||
|
}
|
||||||
|
|
||||||
|
mdisk->doc = xmlCtxtReadMemory(mdisk->pctxt, mdisk->buffer,
|
||||||
|
- mdisk->length, "mdisk.xml", NULL,
|
||||||
|
- XML_PARSE_NOENT | XML_PARSE_NONET |
|
||||||
|
- XML_PARSE_NOWARNING);
|
||||||
|
+ mdisk->length, "mdisk.xml", NULL,
|
||||||
|
+ XML_PARSE_NONET | XML_PARSE_NOWARNING);
|
||||||
|
if (!mdisk->doc) {
|
||||||
|
libmsg("%s(): libxml failed to parse mdisk.xml buffer\n", __func__);
|
||||||
|
goto error;
|
||||||
|
--
|
||||||
|
2.32.0
|
||||||
|
|
@ -0,0 +1,53 @@
|
|||||||
|
From 855326a8c9ec1a599354f743fb5391a2766a2a9c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Date: Mon, 6 Jan 2020 17:47:10 -0700
|
||||||
|
Subject: [PATCH 06/19] libmetrics: Ensure libmetrics mutex is unlocked in
|
||||||
|
error paths
|
||||||
|
|
||||||
|
From coverity scan
|
||||||
|
|
||||||
|
vhostmd-1.1/libmetrics/libmetrics.c:595: missing_unlock: Returning without unlocking "libmetrics_mutex".
|
||||||
|
593| if (mdisk_alloc() == NULL) {
|
||||||
|
594| errno = ENOMEM;
|
||||||
|
595|-> return -1;
|
||||||
|
596| }
|
||||||
|
597| read_mdisk(mdisk);
|
||||||
|
|
||||||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
---
|
||||||
|
libmetrics/libmetrics.c | 5 +++--
|
||||||
|
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libmetrics/libmetrics.c b/libmetrics/libmetrics.c
|
||||||
|
index 2819f80..756645c 100644
|
||||||
|
--- a/libmetrics/libmetrics.c
|
||||||
|
+++ b/libmetrics/libmetrics.c
|
||||||
|
@@ -601,7 +601,7 @@ int get_metric(const char *metric_name, metric **mdef, metric_context context)
|
||||||
|
mdisk_free();
|
||||||
|
if (mdisk_alloc() == NULL) {
|
||||||
|
errno = ENOMEM;
|
||||||
|
- return -1;
|
||||||
|
+ goto out;
|
||||||
|
}
|
||||||
|
read_mdisk(mdisk);
|
||||||
|
}
|
||||||
|
@@ -620,7 +620,7 @@ int get_metric(const char *metric_name, metric **mdef, metric_context context)
|
||||||
|
|
||||||
|
if ((lmdef = metric_alloc_padded(extra_len)) == NULL) {
|
||||||
|
errno = ENOMEM;
|
||||||
|
- return -1;
|
||||||
|
+ goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
lmdef->type = pmdef.type;
|
||||||
|
@@ -635,6 +635,7 @@ int get_metric(const char *metric_name, metric **mdef, metric_context context)
|
||||||
|
if (pmdef.context)
|
||||||
|
free(pmdef.context);
|
||||||
|
|
||||||
|
+out:
|
||||||
|
/* unlock library data */
|
||||||
|
pthread_mutex_unlock(&libmetrics_mutex);
|
||||||
|
return ret;
|
||||||
|
--
|
||||||
|
2.32.0
|
||||||
|
|
@ -0,0 +1,49 @@
|
|||||||
|
From 2cbce5fcb652226bf159f9cd9649f5869d76f6b7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Date: Mon, 6 Jan 2020 18:40:33 -0700
|
||||||
|
Subject: [PATCH 07/19] libmetrics: Fix potential memory leak
|
||||||
|
|
||||||
|
From coverity scan
|
||||||
|
|
||||||
|
vhostmd-1.1/libmetrics/libmetrics.c:613:18: warning: Potential leak of memory pointed to by 'pmdef.context'
|
||||||
|
errno = ENOMEM;
|
||||||
|
|
||||||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
---
|
||||||
|
libmetrics/libmetrics.c | 6 ++++--
|
||||||
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libmetrics/libmetrics.c b/libmetrics/libmetrics.c
|
||||||
|
index 756645c..6817df9 100644
|
||||||
|
--- a/libmetrics/libmetrics.c
|
||||||
|
+++ b/libmetrics/libmetrics.c
|
||||||
|
@@ -586,7 +586,8 @@ int get_metric(const char *metric_name, metric **mdef, metric_context context)
|
||||||
|
int ret = -1;
|
||||||
|
|
||||||
|
*mdef = NULL;
|
||||||
|
-
|
||||||
|
+ memset(&pmdef, 0, sizeof(private_metric));
|
||||||
|
+
|
||||||
|
if (mdisk == NULL) {
|
||||||
|
errno = ENODEV;
|
||||||
|
return -1;
|
||||||
|
@@ -628,6 +629,8 @@ int get_metric(const char *metric_name, metric **mdef, metric_context context)
|
||||||
|
*mdef = lmdef;
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+out:
|
||||||
|
if (pmdef.name)
|
||||||
|
free(pmdef.name);
|
||||||
|
if (pmdef.value)
|
||||||
|
@@ -635,7 +638,6 @@ int get_metric(const char *metric_name, metric **mdef, metric_context context)
|
||||||
|
if (pmdef.context)
|
||||||
|
free(pmdef.context);
|
||||||
|
|
||||||
|
-out:
|
||||||
|
/* unlock library data */
|
||||||
|
pthread_mutex_unlock(&libmetrics_mutex);
|
||||||
|
return ret;
|
||||||
|
--
|
||||||
|
2.32.0
|
||||||
|
|
@ -0,0 +1,40 @@
|
|||||||
|
From bc5da0b99699bbeb653b86398a7112bc0885c31e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Date: Mon, 6 Jan 2020 18:51:40 -0700
|
||||||
|
Subject: [PATCH 08/19] libmetrics: Use proper conversion specifier when
|
||||||
|
calling log function
|
||||||
|
|
||||||
|
From coverity scan
|
||||||
|
|
||||||
|
vhostmd-1.1/libmetrics/libmetrics.c:817: invalid_type: Argument "5L" to format specifier "%u" was expected to have type "unsigned int" but has type "long".
|
||||||
|
|
||||||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
---
|
||||||
|
libmetrics/libmetrics.c | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libmetrics/libmetrics.c b/libmetrics/libmetrics.c
|
||||||
|
index 6817df9..0f4cf70 100644
|
||||||
|
--- a/libmetrics/libmetrics.c
|
||||||
|
+++ b/libmetrics/libmetrics.c
|
||||||
|
@@ -823,7 +823,7 @@ static char *get_virtio_metrics(void)
|
||||||
|
usleep(10000);
|
||||||
|
if (time(NULL) > end_time) {
|
||||||
|
libmsg("%s(): Unable to send metrics request"
|
||||||
|
- " - timeout after %us\n", __func__, timeout);
|
||||||
|
+ " - timeout after %lis\n", __func__, timeout);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -856,7 +856,7 @@ static char *get_virtio_metrics(void)
|
||||||
|
usleep(10000);
|
||||||
|
if (time(NULL) > end_time) {
|
||||||
|
libmsg("%s(): Unable to read metrics"
|
||||||
|
- " - timeout after %us\n", __func__, timeout);
|
||||||
|
+ " - timeout after %lis\n", __func__, timeout);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
--
|
||||||
|
2.32.0
|
||||||
|
|
@ -0,0 +1,75 @@
|
|||||||
|
From cba4dddebc56886034038f907085da3c6b50baab Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Date: Mon, 6 Jan 2020 18:59:18 -0700
|
||||||
|
Subject: [PATCH 09/19] libmetrics: Fix potential leak of FILE pointer
|
||||||
|
|
||||||
|
From coverity scan
|
||||||
|
|
||||||
|
vhostmd-1.1/libmetrics/libmetrics.c:892: alloc_fn: Storage is returned from allocation function "fopen".
|
||||||
|
vhostmd-1.1/libmetrics/libmetrics.c:892: var_assign: Assigning: "fp" = storage returned from "fopen(dest_file, "w")".
|
||||||
|
vhostmd-1.1/libmetrics/libmetrics.c:900: noescape: Resource "fp" is not freed or pointed-to in "fwrite".
|
||||||
|
vhostmd-1.1/libmetrics/libmetrics.c:909: leaked_storage: Variable "fp" going out of scope leaks the storage it points to.
|
||||||
|
907| free(response);
|
||||||
|
908|
|
||||||
|
909|-> return 0;
|
||||||
|
910|
|
||||||
|
911| error:
|
||||||
|
|
||||||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
---
|
||||||
|
libmetrics/libmetrics.c | 16 +++++++---------
|
||||||
|
1 file changed, 7 insertions(+), 9 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libmetrics/libmetrics.c b/libmetrics/libmetrics.c
|
||||||
|
index 0f4cf70..8819074 100644
|
||||||
|
--- a/libmetrics/libmetrics.c
|
||||||
|
+++ b/libmetrics/libmetrics.c
|
||||||
|
@@ -890,10 +890,11 @@ int dump_virtio_metrics(const char *dest_file)
|
||||||
|
FILE *fp = stdout;
|
||||||
|
char *response = NULL;
|
||||||
|
size_t len;
|
||||||
|
+ int ret = -1;
|
||||||
|
|
||||||
|
response = get_virtio_metrics();
|
||||||
|
if (response == NULL)
|
||||||
|
- goto error;
|
||||||
|
+ return -1;
|
||||||
|
|
||||||
|
len = strlen(response);
|
||||||
|
|
||||||
|
@@ -902,27 +903,24 @@ int dump_virtio_metrics(const char *dest_file)
|
||||||
|
if (fp == NULL) {
|
||||||
|
libmsg("%s(), unable to dump metrics: fopen(%s) %s\n",
|
||||||
|
__func__, dest_file, strerror(errno));
|
||||||
|
- goto error;
|
||||||
|
+ goto out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fwrite(response, 1UL, len, fp) != len) {
|
||||||
|
libmsg("%s(), unable to export metrics to file:%s %s\n",
|
||||||
|
__func__, dest_file ? dest_file : "stdout", strerror(errno));
|
||||||
|
- goto error;
|
||||||
|
+ goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (response)
|
||||||
|
- free(response);
|
||||||
|
+ ret = 0;
|
||||||
|
|
||||||
|
- return 0;
|
||||||
|
-
|
||||||
|
- error:
|
||||||
|
+out:
|
||||||
|
if (dest_file && fp)
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
|
if (response)
|
||||||
|
free(response);
|
||||||
|
|
||||||
|
- return -1;
|
||||||
|
+ return ret;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.32.0
|
||||||
|
|
@ -0,0 +1,55 @@
|
|||||||
|
From 69fcc2075d7cb1f16eb7d27ae3559fa3c77f5514 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Date: Tue, 7 Jan 2020 11:36:56 -0700
|
||||||
|
Subject: [PATCH 10/19] util: Add missing call to va_end
|
||||||
|
|
||||||
|
From coverity scan
|
||||||
|
|
||||||
|
Error: VARARGS (CWE-237):
|
||||||
|
vhostmd-1.1/vhostmd/util.c:209: va_init: Initializing va_list "argptr".
|
||||||
|
vhostmd-1.1/vhostmd/util.c:218: missing_va_end: va_end was not called for "argptr".
|
||||||
|
216| grow_size = (count > 1000) ? count : 1000;
|
||||||
|
217| if (buffer_grow(buf, grow_size) < 0)
|
||||||
|
218|-> return;
|
||||||
|
219|
|
||||||
|
220| size = buf->size - buf->use - 1;
|
||||||
|
|
||||||
|
Error: VARARGS (CWE-237):
|
||||||
|
vhostmd-1.1/vhostmd/util.c:209: va_init: Initializing va_list "argptr".
|
||||||
|
vhostmd-1.1/vhostmd/util.c:226: missing_va_end: va_end was not called for "argptr".
|
||||||
|
224| buf->use += count;
|
||||||
|
225| buf->content[buf->use] = '\0';
|
||||||
|
226|-> }
|
||||||
|
227|
|
||||||
|
228| /*
|
||||||
|
|
||||||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
---
|
||||||
|
vhostmd/util.c | 5 ++++-
|
||||||
|
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/vhostmd/util.c b/vhostmd/util.c
|
||||||
|
index 5747f16..1f9545b 100644
|
||||||
|
--- a/vhostmd/util.c
|
||||||
|
+++ b/vhostmd/util.c
|
||||||
|
@@ -214,13 +214,16 @@ void vu_buffer_vsprintf(vu_buffer *buf, const char *format, ...)
|
||||||
|
va_end(locarg);
|
||||||
|
|
||||||
|
grow_size = (count > 1000) ? count : 1000;
|
||||||
|
- if (buffer_grow(buf, grow_size) < 0)
|
||||||
|
+ if (buffer_grow(buf, grow_size) < 0) {
|
||||||
|
+ va_end(argptr);
|
||||||
|
return;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
size = buf->size - buf->use - 1;
|
||||||
|
va_copy(locarg, argptr);
|
||||||
|
}
|
||||||
|
va_end(locarg);
|
||||||
|
+ va_end(argptr);
|
||||||
|
buf->use += count;
|
||||||
|
buf->content[buf->use] = '\0';
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.32.0
|
||||||
|
|
@ -0,0 +1,40 @@
|
|||||||
|
From b39f7cc778903e9cda8aa46d170b9efe80efda89 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Date: Tue, 7 Jan 2020 11:41:11 -0700
|
||||||
|
Subject: [PATCH 11/19] util: Fix potential memory leak
|
||||||
|
|
||||||
|
From coverity scan
|
||||||
|
|
||||||
|
vhostmd-1.1/vhostmd/util.c:415:14: warning: Potential leak of memory pointed to by 'cp'
|
||||||
|
return(NULL);
|
||||||
|
|
||||||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
---
|
||||||
|
vhostmd/util.c | 4 +++-
|
||||||
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/vhostmd/util.c b/vhostmd/util.c
|
||||||
|
index 1f9545b..599c5c7 100644
|
||||||
|
--- a/vhostmd/util.c
|
||||||
|
+++ b/vhostmd/util.c
|
||||||
|
@@ -415,7 +415,7 @@ char *vu_str_replace(const char *haystack, const char *origstr, const char *news
|
||||||
|
|
||||||
|
dest = malloc(strlen(haystack) - (origlen * cnt) + (newlen * cnt) + 1);
|
||||||
|
if (dest == NULL) {
|
||||||
|
- return(NULL);
|
||||||
|
+ goto out;
|
||||||
|
}
|
||||||
|
*dest = '\0';
|
||||||
|
|
||||||
|
@@ -428,6 +428,8 @@ char *vu_str_replace(const char *haystack, const char *origstr, const char *news
|
||||||
|
cp = p + origlen;
|
||||||
|
}
|
||||||
|
strcat(dest, cp);
|
||||||
|
+
|
||||||
|
+out:
|
||||||
|
free(tempstr);
|
||||||
|
|
||||||
|
return dest;
|
||||||
|
--
|
||||||
|
2.32.0
|
||||||
|
|
@ -0,0 +1,38 @@
|
|||||||
|
From 4350fcf7a5c4cb7d803db1a0df2b757230b90e25 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Date: Tue, 7 Jan 2020 11:47:33 -0700
|
||||||
|
Subject: [PATCH 12/19] util: Check return value of strstr
|
||||||
|
|
||||||
|
From coverity scan
|
||||||
|
|
||||||
|
vhostmd-1.1/vhostmd/util.c:421: returned_null: "strstr" returns "NULL" (checked 6 out of 7 times).
|
||||||
|
|
||||||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
---
|
||||||
|
vhostmd/util.c | 10 ++++++----
|
||||||
|
1 file changed, 6 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/vhostmd/util.c b/vhostmd/util.c
|
||||||
|
index 599c5c7..317dbc6 100644
|
||||||
|
--- a/vhostmd/util.c
|
||||||
|
+++ b/vhostmd/util.c
|
||||||
|
@@ -422,10 +422,12 @@ char *vu_str_replace(const char *haystack, const char *origstr, const char *news
|
||||||
|
cp = tempstr;
|
||||||
|
for (i=0; i <cnt; i++) {
|
||||||
|
p = strstr(cp, origstr);
|
||||||
|
- *p = '\0';
|
||||||
|
- strcat(dest, cp);
|
||||||
|
- strcat(dest, newstr);
|
||||||
|
- cp = p + origlen;
|
||||||
|
+ if (p) {
|
||||||
|
+ *p = '\0';
|
||||||
|
+ strcat(dest, cp);
|
||||||
|
+ strcat(dest, newstr);
|
||||||
|
+ cp = p + origlen;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
strcat(dest, cp);
|
||||||
|
|
||||||
|
--
|
||||||
|
2.32.0
|
||||||
|
|
@ -0,0 +1,48 @@
|
|||||||
|
From 1771ddb83fe8a8cb38e7bee212bdfa3d1927cfc5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Date: Tue, 7 Jan 2020 11:52:23 -0700
|
||||||
|
Subject: [PATCH 13/19] Check return value of asprintf
|
||||||
|
|
||||||
|
Example from coverity scan
|
||||||
|
|
||||||
|
vhostmd-1.1/vhostmd/util.c: scope_hint: In function 'vu_append_string'
|
||||||
|
vhostmd-1.1/vhostmd/util.c:484:7: warning: ignoring return value of 'asprintf', declared with attribute warn_unused_result [-Wunused-result]
|
||||||
|
asprintf(&cp, "%s,%s", *dest, str);
|
||||||
|
|
||||||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
---
|
||||||
|
vhostmd/util.c | 3 ++-
|
||||||
|
vhostmd/vhostmd.c | 3 ++-
|
||||||
|
2 files changed, 4 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/vhostmd/util.c b/vhostmd/util.c
|
||||||
|
index 317dbc6..d7ce3fc 100644
|
||||||
|
--- a/vhostmd/util.c
|
||||||
|
+++ b/vhostmd/util.c
|
||||||
|
@@ -488,7 +488,8 @@ int vu_append_string(char **dest, xmlChar * str)
|
||||||
|
char *cp;
|
||||||
|
|
||||||
|
if (*dest) {
|
||||||
|
- asprintf(&cp, "%s,%s", *dest, str);
|
||||||
|
+ if (asprintf(&cp, "%s,%s", *dest, str) < 0)
|
||||||
|
+ return -1;
|
||||||
|
free(*dest);
|
||||||
|
*dest = cp;
|
||||||
|
}
|
||||||
|
diff --git a/vhostmd/vhostmd.c b/vhostmd/vhostmd.c
|
||||||
|
index 7e29e6f..7374ec9 100644
|
||||||
|
--- a/vhostmd/vhostmd.c
|
||||||
|
+++ b/vhostmd/vhostmd.c
|
||||||
|
@@ -259,7 +259,8 @@ static int parse_group_metric(xmlDocPtr xml ATTRIBUTE_UNUSED,
|
||||||
|
vu_log(VHOSTMD_WARN, "parse_group_metric: node path not found");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
- asprintf(&cp, "%s/variable", path);
|
||||||
|
+ if (asprintf(&cp, "%s/variable", path) < 0)
|
||||||
|
+ goto error;
|
||||||
|
|
||||||
|
obj = xmlXPathEval( BAD_CAST cp, ctxt);
|
||||||
|
if ((obj == NULL) || (obj->type != XPATH_NODESET)) {
|
||||||
|
--
|
||||||
|
2.32.0
|
||||||
|
|
@ -0,0 +1,36 @@
|
|||||||
|
From 71a94a18c470ebbd870253b8aedbb7b3b24a274b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Date: Tue, 14 Jan 2020 15:08:54 -0700
|
||||||
|
Subject: [PATCH 14/19] vhostmd: Fix memory leak in parse_transports
|
||||||
|
|
||||||
|
From coverity scan
|
||||||
|
|
||||||
|
vhostmd-1.1/vhostmd/vhostmd.c:455: alloc_fn: Storage is returned from allocation function "xmlXPathEval".
|
||||||
|
vhostmd-1.1/vhostmd/vhostmd.c:455: var_assign: Assigning: "obj" = storage returned from "xmlXPathEval((xmlChar *)"//vhostmd/globals/transport", ctxt)".
|
||||||
|
vhostmd-1.1/vhostmd/vhostmd.c:474: leaked_storage: Variable "obj" going out of scope leaks the storage it points to.
|
||||||
|
472| #else
|
||||||
|
473| vu_log (VHOSTMD_ERR, "No support for xenstore transport in this vhostmd");
|
||||||
|
474|-> return -1;
|
||||||
|
475| #endif
|
||||||
|
476| }
|
||||||
|
|
||||||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
---
|
||||||
|
vhostmd/vhostmd.c | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/vhostmd/vhostmd.c b/vhostmd/vhostmd.c
|
||||||
|
index 7374ec9..3d1d53e 100644
|
||||||
|
--- a/vhostmd/vhostmd.c
|
||||||
|
+++ b/vhostmd/vhostmd.c
|
||||||
|
@@ -472,6 +472,7 @@ static int parse_transports(xmlDocPtr xml,
|
||||||
|
transports |= XENSTORE;
|
||||||
|
#else
|
||||||
|
vu_log (VHOSTMD_ERR, "No support for xenstore transport in this vhostmd");
|
||||||
|
+ xmlXPathFreeObject(obj);
|
||||||
|
return -1;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.32.0
|
||||||
|
|
@ -0,0 +1,36 @@
|
|||||||
|
From d9eeede678521776d327784d0307de6c98920bb8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Date: Tue, 14 Jan 2020 15:12:28 -0700
|
||||||
|
Subject: [PATCH 15/19] vhostmd: Remove unsafe XML_PARSE_NOENT option
|
||||||
|
|
||||||
|
From coverity scan
|
||||||
|
|
||||||
|
vhostmd-1.1/vhostmd/vhostmd.c:553: unsafe_xml_parse_config: XML parse option should not have flag "XML_PARSE_NOENT" set, which is vulnerable to XML external entty attack.
|
||||||
|
551|
|
||||||
|
552| xml = xmlCtxtReadFile(pctxt, filename, NULL,
|
||||||
|
553|-> XML_PARSE_NOENT | XML_PARSE_NONET |
|
||||||
|
554| XML_PARSE_NOWARNING);
|
||||||
|
555| if (!xml) {
|
||||||
|
|
||||||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
---
|
||||||
|
vhostmd/vhostmd.c | 3 +--
|
||||||
|
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/vhostmd/vhostmd.c b/vhostmd/vhostmd.c
|
||||||
|
index 3d1d53e..4d04989 100644
|
||||||
|
--- a/vhostmd/vhostmd.c
|
||||||
|
+++ b/vhostmd/vhostmd.c
|
||||||
|
@@ -552,8 +552,7 @@ static int parse_config_file(const char *filename)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
xml = xmlCtxtReadFile(pctxt, filename, NULL,
|
||||||
|
- XML_PARSE_NOENT | XML_PARSE_NONET |
|
||||||
|
- XML_PARSE_NOWARNING);
|
||||||
|
+ XML_PARSE_NONET | XML_PARSE_NOWARNING);
|
||||||
|
if (!xml) {
|
||||||
|
vu_log(VHOSTMD_ERR, "libxml failed to parse config file %s",
|
||||||
|
filename);
|
||||||
|
--
|
||||||
|
2.32.0
|
||||||
|
|
@ -0,0 +1,94 @@
|
|||||||
|
From 4f7b23e19c88c92d834d5f975c846b47eaa03c79 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Date: Tue, 14 Jan 2020 15:33:39 -0700
|
||||||
|
Subject: [PATCH 16/19] vhostmd: Check return value of file functions
|
||||||
|
|
||||||
|
Check return value of ftruncate, lseek, and write functions as
|
||||||
|
reported by coverity. Example from coverity scan
|
||||||
|
|
||||||
|
vhostmd-1.1/vhostmd/vhostmd.c: scope_hint: In function 'metrics_disk_create'
|
||||||
|
vhostmd-1.1/vhostmd/vhostmd.c:821:4: warning: ignoring return value of 'ftruncate', declared with attribute warn_unused_result [-Wunused-result]
|
||||||
|
ftruncate(fd, mdisk_size);
|
||||||
|
^~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
819|
|
||||||
|
820| /* truncate to a possible new size */
|
||||||
|
821|-> ftruncate(fd, mdisk_size);
|
||||||
|
822|
|
||||||
|
823| /* zero fill metrics data */
|
||||||
|
|
||||||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
---
|
||||||
|
vhostmd/vhostmd.c | 33 +++++++++++++++++++++++++--------
|
||||||
|
1 file changed, 25 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/vhostmd/vhostmd.c b/vhostmd/vhostmd.c
|
||||||
|
index 4d04989..1600a87 100644
|
||||||
|
--- a/vhostmd/vhostmd.c
|
||||||
|
+++ b/vhostmd/vhostmd.c
|
||||||
|
@@ -675,8 +675,12 @@ static int metrics_disk_busy(int fd, int busy)
|
||||||
|
{
|
||||||
|
md_header.busy = (uint32_t)(htonl(busy));
|
||||||
|
|
||||||
|
- lseek(fd, offsetof(mdisk_header, busy), SEEK_SET);
|
||||||
|
- write(fd, &(md_header.busy), sizeof(uint32_t));
|
||||||
|
+ if (lseek(fd, offsetof(mdisk_header, busy), SEEK_SET) == -1)
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
+ if (write(fd, &(md_header.busy), sizeof(uint32_t)) == -1)
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -724,6 +728,8 @@ error:
|
||||||
|
|
||||||
|
static int metrics_disk_update(int fd, vu_buffer *buf)
|
||||||
|
{
|
||||||
|
+ int ret = -1;
|
||||||
|
+
|
||||||
|
if (buf->use > MDISK_SIZE) {
|
||||||
|
vu_log(VHOSTMD_ERR, "Metrics data is larger than metrics disk");
|
||||||
|
return -1;
|
||||||
|
@@ -731,11 +737,17 @@ static int metrics_disk_update(int fd, vu_buffer *buf)
|
||||||
|
|
||||||
|
metrics_disk_busy(fd, 1);
|
||||||
|
metrics_disk_header_update(fd, buf);
|
||||||
|
- lseek(fd, MDISK_HEADER_SIZE, SEEK_SET);
|
||||||
|
- write(fd, buf->content, buf->use);
|
||||||
|
+ if (lseek(fd, MDISK_HEADER_SIZE, SEEK_SET) == -1)
|
||||||
|
+ goto out;
|
||||||
|
+
|
||||||
|
+ if (write(fd, buf->content, buf->use) == -1)
|
||||||
|
+ goto out;
|
||||||
|
+
|
||||||
|
+ ret = 0;
|
||||||
|
+
|
||||||
|
+out:
|
||||||
|
metrics_disk_busy(fd, 0);
|
||||||
|
-
|
||||||
|
- return 0;
|
||||||
|
+ return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int metrics_free()
|
||||||
|
@@ -819,10 +831,15 @@ static int metrics_disk_create(void)
|
||||||
|
}
|
||||||
|
|
||||||
|
/* truncate to a possible new size */
|
||||||
|
- ftruncate(fd, mdisk_size);
|
||||||
|
+ if (ftruncate(fd, mdisk_size) == -1){
|
||||||
|
+ vu_log(VHOSTMD_ERR, "Failed to truncate metrics disk: %s",
|
||||||
|
+ strerror(errno));
|
||||||
|
+ goto error;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
/* zero fill metrics data */
|
||||||
|
- lseek(fd, MDISK_HEADER_SIZE, SEEK_SET);
|
||||||
|
+ if (lseek(fd, MDISK_HEADER_SIZE, SEEK_SET) == -1)
|
||||||
|
+ goto error;
|
||||||
|
for (i = 0; i < size / MDISK_SIZE_MIN; i++)
|
||||||
|
if (write(fd, buf, MDISK_SIZE_MIN) != MDISK_SIZE_MIN) {
|
||||||
|
vu_log(VHOSTMD_ERR, "Error creating disk of requested "
|
||||||
|
--
|
||||||
|
2.32.0
|
||||||
|
|
@ -0,0 +1,38 @@
|
|||||||
|
From d86c51d98ce8b891f3948f8aa54fc9634e6a8c67 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Date: Tue, 14 Jan 2020 16:04:09 -0700
|
||||||
|
Subject: [PATCH 17/19] vhostmd: Check for valide file handle before calling
|
||||||
|
close
|
||||||
|
|
||||||
|
From coverity scan
|
||||||
|
|
||||||
|
vhostmd-1.1/vhostmd/vhostmd.c:778: var_tested_neg: Assigning: "fd" = a negative value.
|
||||||
|
vhostmd-1.1/vhostmd/vhostmd.c:845: negative_returns: "fd" is passed to a parameter that cannot be negative.
|
||||||
|
843| free(dir);
|
||||||
|
844| free(buf);
|
||||||
|
845|-> close(fd);
|
||||||
|
846| return -1;
|
||||||
|
847| }
|
||||||
|
|
||||||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
---
|
||||||
|
vhostmd/vhostmd.c | 3 ++-
|
||||||
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/vhostmd/vhostmd.c b/vhostmd/vhostmd.c
|
||||||
|
index 1600a87..1395bc5 100644
|
||||||
|
--- a/vhostmd/vhostmd.c
|
||||||
|
+++ b/vhostmd/vhostmd.c
|
||||||
|
@@ -860,7 +860,8 @@ static int metrics_disk_create(void)
|
||||||
|
error:
|
||||||
|
free(dir);
|
||||||
|
free(buf);
|
||||||
|
- close(fd);
|
||||||
|
+ if (fd != -1)
|
||||||
|
+ close(fd);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.32.0
|
||||||
|
|
@ -0,0 +1,46 @@
|
|||||||
|
From ff6959fd9203c667f6b4c95fa812621cc91dc42e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Date: Tue, 14 Jan 2020 16:08:42 -0700
|
||||||
|
Subject: [PATCH 18/19] vhostmd: Fix memory leak in vhostmd_run
|
||||||
|
|
||||||
|
Example from coverity scan
|
||||||
|
|
||||||
|
vhostmd-1.1/vhostmd/vhostmd.c:940: alloc_arg: "vu_buffer_create" allocates memory that is stored into "buf".
|
||||||
|
vhostmd-1.1/vhostmd/vhostmd.c:959: leaked_storage: Variable "buf" going out of scope leaks the storage it points to.
|
||||||
|
957| vu_log(VHOSTMD_ERR, "Failed to start virtio thread '%s'\n",
|
||||||
|
958| strerror(rc));
|
||||||
|
959|-> return -1;
|
||||||
|
960| }
|
||||||
|
961| }
|
||||||
|
|
||||||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
---
|
||||||
|
vhostmd/vhostmd.c | 5 ++++-
|
||||||
|
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/vhostmd/vhostmd.c b/vhostmd/vhostmd.c
|
||||||
|
index 1395bc5..6f3709b 100644
|
||||||
|
--- a/vhostmd/vhostmd.c
|
||||||
|
+++ b/vhostmd/vhostmd.c
|
||||||
|
@@ -967,14 +967,17 @@ static int vhostmd_run(int diskfd)
|
||||||
|
if (virtio_expiration_time < (update_period * 3))
|
||||||
|
virtio_expiration_time = update_period * 3;
|
||||||
|
|
||||||
|
- if (virtio_init(virtio_max_channels, virtio_expiration_time))
|
||||||
|
+ if (virtio_init(virtio_max_channels, virtio_expiration_time)) {
|
||||||
|
+ vu_buffer_delete(buf);
|
||||||
|
return -1;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
rc = pthread_create(&virtio_tid, NULL, virtio_run, NULL);
|
||||||
|
|
||||||
|
if (rc != 0) {
|
||||||
|
vu_log(VHOSTMD_ERR, "Failed to start virtio thread '%s'\n",
|
||||||
|
strerror(rc));
|
||||||
|
+ vu_buffer_delete(buf);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.32.0
|
||||||
|
|
@ -0,0 +1,36 @@
|
|||||||
|
From 99995e4ba138f43b277620bd43a096c72f354548 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Date: Tue, 14 Jan 2020 16:22:48 -0700
|
||||||
|
Subject: [PATCH 19/19] virtio: Fix strncpy length parameter
|
||||||
|
|
||||||
|
Leave an extra byte for null-terminator in call to strncpy. From
|
||||||
|
coverity scan
|
||||||
|
|
||||||
|
vhostmd-1.1/vhostmd/virtio.c:194: buffer_size_warning: Calling "strncpy" with a maximum size argument of 108 bytes on destination array "address.sun_path" of size 108 bytes might leave the destination string unterminated.
|
||||||
|
192| address.sun_family = AF_LOCAL;
|
||||||
|
193|
|
||||||
|
194|-> strncpy(address.sun_path, c->uds_name, SUN_PATH_LEN);
|
||||||
|
195|
|
||||||
|
196| if ((c->fd = socket(AF_LOCAL, SOCK_STREAM, 0)) == -1)
|
||||||
|
|
||||||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
---
|
||||||
|
vhostmd/virtio.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/vhostmd/virtio.c b/vhostmd/virtio.c
|
||||||
|
index f227b45..a6c2515 100644
|
||||||
|
--- a/vhostmd/virtio.c
|
||||||
|
+++ b/vhostmd/virtio.c
|
||||||
|
@@ -191,7 +191,7 @@ static int vio_channel_open(channel_t * c)
|
||||||
|
bzero(&address, sizeof(address));
|
||||||
|
address.sun_family = AF_LOCAL;
|
||||||
|
|
||||||
|
- strncpy(address.sun_path, c->uds_name, SUN_PATH_LEN);
|
||||||
|
+ strncpy(address.sun_path, c->uds_name, SUN_PATH_LEN - 1);
|
||||||
|
|
||||||
|
if ((c->fd = socket(AF_LOCAL, SOCK_STREAM, 0)) == -1)
|
||||||
|
goto error;
|
||||||
|
--
|
||||||
|
2.32.0
|
||||||
|
|
@ -0,0 +1,431 @@
|
|||||||
|
<?xml version="1.0" ?>
|
||||||
|
<!DOCTYPE vhostmd SYSTEM "vhostmd.dtd">
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
Configuration file for virtual host metrics daemon (vhostmd).
|
||||||
|
|
||||||
|
A better, less noisy, more minimal configuration file
|
||||||
|
which doesn't depend on Xen.
|
||||||
|
|
||||||
|
Supported metric types are: int32, uint32, int64, uint64, real32,
|
||||||
|
real64, and string.
|
||||||
|
|
||||||
|
A metric's value is set to the output produced by executing its action.
|
||||||
|
|
||||||
|
'action' can include the special token NAME, in which case the name of
|
||||||
|
the vm currently under inspection is substituted for NAME. Only useful
|
||||||
|
within the vm element.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
<!-- 1 2 3 4 5 6 -->
|
||||||
|
<!-- 678901234567890123456789012345678901234567890123456789012345678 -->
|
||||||
|
|
||||||
|
|
||||||
|
<!--
|
||||||
|
We sometimes use the following awk form to filter the output of the
|
||||||
|
virsh command (mostly `virsh -r CONNECT dominfo NAME' - use
|
||||||
|
`virsh -r dominfo <dom id>' to test on the commandline) into a standard
|
||||||
|
format like
|
||||||
|
|
||||||
|
ID:6
|
||||||
|
NAME:ls3055v0
|
||||||
|
UUID:955c3b65-d013-547f-321b-9fea65439c40
|
||||||
|
OS_TYPE:hvm
|
||||||
|
STATE:running
|
||||||
|
CPU(S):4
|
||||||
|
CPU_TIME:433016.4:S
|
||||||
|
MAX_MEMORY:20000000:KB
|
||||||
|
USED_MEMORY:16384000:KB
|
||||||
|
AUTOSTART:disable
|
||||||
|
|
||||||
|
We do this to extract numbers out of physical quantities in a reliable
|
||||||
|
way.
|
||||||
|
-->
|
||||||
|
<!--
|
||||||
|
|awk -F ':' '
|
||||||
|
function mkvarnam(s) { # UPPER_CASE_UNDERSCORE
|
||||||
|
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
|
||||||
|
gsub("[[:space:]]+", "_", s); s = toupper(s);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
function filt_phys(s, sep, num, unit) { # 42.0 KM
|
||||||
|
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
|
||||||
|
if ( s ~ /^[0-9]*\.?[0-9]+[[:space:]]*[[:alpha:]]+$/ )
|
||||||
|
{
|
||||||
|
num = s; unit = s;
|
||||||
|
sub("[[:space:]]*[[:alpha:]]+$", "", num);
|
||||||
|
sub("^[0-9]*[.]?[0-9]+[[:space:]]*", "", unit);
|
||||||
|
return num sep toupper(unit);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/:/ {
|
||||||
|
d1 = substr($0, 1, index($0, ":") - 1);
|
||||||
|
rest = substr($0, index($0, ":") + 1);
|
||||||
|
printf("%s:%s\n", mkvarnam(d1), filt_phys(rest, ":"));
|
||||||
|
}' \
|
||||||
|
-->
|
||||||
|
|
||||||
|
<vhostmd>
|
||||||
|
<globals>
|
||||||
|
<disk>
|
||||||
|
<name>host-metrics-disk</name>
|
||||||
|
<path>/dev/shm/vhostmd0</path>
|
||||||
|
<!-- must be between [128 KB, 256 MB] in size -->
|
||||||
|
<size unit="k">256</size>
|
||||||
|
</disk>
|
||||||
|
<virtio>
|
||||||
|
<max_channels>1024</max_channels>
|
||||||
|
<expiration_time>15</expiration_time>
|
||||||
|
</virtio>
|
||||||
|
<update_period>60</update_period>
|
||||||
|
<path>/bin:/sbin:/usr/bin:/usr/sbin:/usr/share/vhostmd/scripts</path>
|
||||||
|
<transport>vbd</transport>
|
||||||
|
<!-- <transport>xenstore</transport> -->
|
||||||
|
<transport>virtio</transport>
|
||||||
|
</globals>
|
||||||
|
<metrics>
|
||||||
|
<metric type="string" context="host">
|
||||||
|
<name>HostName</name>
|
||||||
|
<action>hostname</action>
|
||||||
|
</metric>
|
||||||
|
<metric type="uint64" context="host">
|
||||||
|
<name>Time</name>
|
||||||
|
<action>date +%s</action>
|
||||||
|
</metric>
|
||||||
|
<metric type="string" context="host">
|
||||||
|
<name>VirtualizationVendor</name>
|
||||||
|
<action>
|
||||||
|
rpm -q --queryformat "%{VENDOR}\n" libvirt | sort -u
|
||||||
|
</action>
|
||||||
|
</metric>
|
||||||
|
<!-- SAP "CIM" -->
|
||||||
|
<metric type="string" context="host">
|
||||||
|
<name>VirtProductInfo</name>
|
||||||
|
<action>
|
||||||
|
virsh -r CONNECT version \
|
||||||
|
|awk -F ':' '
|
||||||
|
function mkvarnam(s) { # UPPER_CASE_UNDERSCORE
|
||||||
|
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
|
||||||
|
gsub("[[:space:]]+", "_", s); s = toupper(s);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
function filt_phys(s, sep, num, unit) { # 42.0 KM
|
||||||
|
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
|
||||||
|
if ( s ~ /^[0-9]*\.?[0-9]+[[:space:]]*[[:alpha:]]+$/ )
|
||||||
|
{
|
||||||
|
num = s; unit = s;
|
||||||
|
sub("[[:space:]]*[[:alpha:]]+$", "", num);
|
||||||
|
sub("^[0-9]*[.]?[0-9]+[[:space:]]*", "", unit);
|
||||||
|
return num sep toupper(unit);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/:/ {
|
||||||
|
d1 = substr($0, 1, index($0, ":") - 1);
|
||||||
|
rest = substr($0, index($0, ":") + 1);
|
||||||
|
printf("%s:%s\n", mkvarnam(d1), filt_phys(rest, ":"));
|
||||||
|
}' \
|
||||||
|
| awk -F: '$1 == "USING_API" { print $2; }'
|
||||||
|
</action>
|
||||||
|
</metric>
|
||||||
|
<!-- SAP "CIM" -->
|
||||||
|
<metric type="string" context="host">
|
||||||
|
<name>HostSystemInfo</name>
|
||||||
|
<action>hostname -s</action>
|
||||||
|
</metric>
|
||||||
|
<!-- SAP "XCIM" -->
|
||||||
|
<metric type="uint32" context="host">
|
||||||
|
<name>NumberOfPhysicalCPUs</name>
|
||||||
|
<!-- physical CPUs usable by the virtual machines -->
|
||||||
|
<!-- SAP "CIM" uses "NumberOfPhysicalCPUsUtilized" -->
|
||||||
|
<!-- which means something different, i.e. -->
|
||||||
|
<!-- "physical CPUs used by the virtual machines" -->
|
||||||
|
<!-- but may be calculated (on client side) by -->
|
||||||
|
<!-- Delta TotalCPUTime / Delta ElapsedTime -->
|
||||||
|
<action>
|
||||||
|
virsh -r CONNECT nodeinfo \
|
||||||
|
|awk -F ':' '
|
||||||
|
function mkvarnam(s) { # UPPER_CASE_UNDERSCORE
|
||||||
|
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
|
||||||
|
gsub("[[:space:]]+", "_", s); s = toupper(s);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
function filt_phys(s, sep, num, unit) { # 42.0 KM
|
||||||
|
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
|
||||||
|
if ( s ~ /^[0-9]*\.?[0-9]+[[:space:]]*[[:alpha:]]+$/ )
|
||||||
|
{
|
||||||
|
num = s; unit = s;
|
||||||
|
sub("[[:space:]]*[[:alpha:]]+$", "", num);
|
||||||
|
sub("^[0-9]*[.]?[0-9]+[[:space:]]*", "", unit);
|
||||||
|
return num sep toupper(unit);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/:/ {
|
||||||
|
d1 = substr($0, 1, index($0, ":") - 1);
|
||||||
|
rest = substr($0, index($0, ":") + 1);
|
||||||
|
printf("%s:%s\n", mkvarnam(d1), filt_phys(rest, ":"));
|
||||||
|
}' \
|
||||||
|
| awk -F: '$1 == "CPU(S)" { print $2; }'
|
||||||
|
</action>
|
||||||
|
</metric>
|
||||||
|
<!-- SAP "CIM" -->
|
||||||
|
<metric type="uint64" context="host">
|
||||||
|
<name>MemoryAllocatedToVirtualServers</name>
|
||||||
|
<!-- physical memory used by the virtual machines, -->
|
||||||
|
<!-- (_not_ physical memory usable by the virtual -->
|
||||||
|
<!-- machines) -->
|
||||||
|
<action>
|
||||||
|
free|egrep -i '^[[:space:]]*(Mem:)' \
|
||||||
|
| awk 'BEGIN { sum = 0; }
|
||||||
|
{ sum += $3; }
|
||||||
|
END { printf "%d\n", sum/1024; }'
|
||||||
|
</action>
|
||||||
|
</metric>
|
||||||
|
<!-- SAP "CIM" -->
|
||||||
|
<metric type="uint64" context="host">
|
||||||
|
<name>FreePhysicalMemory</name>
|
||||||
|
<action>
|
||||||
|
free|egrep -i '^[[:space:]]*(Mem:)' \
|
||||||
|
| awk 'BEGIN { sum = 0; }
|
||||||
|
{ sum += $4; }
|
||||||
|
END { printf "%d\n", sum/1024; }'
|
||||||
|
</action>
|
||||||
|
</metric>
|
||||||
|
<!-- SAP "CIM" -->
|
||||||
|
<metric type="uint64" context="host">
|
||||||
|
<name>FreeVirtualMemory</name>
|
||||||
|
<action>
|
||||||
|
free|egrep -i '^[[:space:]]*(Mem:|Swap:)' \
|
||||||
|
| awk 'BEGIN { sum = 0; }
|
||||||
|
{ sum += $4; }
|
||||||
|
END { printf "%d\n", sum/1024; }'
|
||||||
|
</action>
|
||||||
|
</metric>
|
||||||
|
<!-- SAP "CIM" -->
|
||||||
|
<metric type="uint64" context="host">
|
||||||
|
<name>UsedVirtualMemory</name>
|
||||||
|
<action>
|
||||||
|
free|egrep -i '^[[:space:]]*(Mem:|Swap:)' \
|
||||||
|
| awk 'BEGIN { sum = 0; }
|
||||||
|
{ sum += $3; }
|
||||||
|
END { printf "%d\n", sum/1024; }'
|
||||||
|
</action>
|
||||||
|
</metric>
|
||||||
|
<!-- SAP "XCIM" -->
|
||||||
|
<metric type="uint64" context="host">
|
||||||
|
<name>PagedInMemory</name>
|
||||||
|
<action>
|
||||||
|
vmstat -s | awk 'BEGIN {
|
||||||
|
cmd = "getconf PAGESIZE";
|
||||||
|
cmd | getline pagesize;
|
||||||
|
close(cmd);
|
||||||
|
}
|
||||||
|
/pages swapped in/ {
|
||||||
|
printf "%d\n", $1 / 1024 * pagesize / 1024;
|
||||||
|
}'
|
||||||
|
</action>
|
||||||
|
</metric>
|
||||||
|
<!-- SAP "CIM" -->
|
||||||
|
<metric type="uint64" context="host">
|
||||||
|
<name>PagedOutMemory</name>
|
||||||
|
<action>
|
||||||
|
vmstat -s | awk 'BEGIN {
|
||||||
|
cmd = "getconf PAGESIZE";
|
||||||
|
cmd | getline pagesize;
|
||||||
|
close(cmd);
|
||||||
|
}
|
||||||
|
/pages swapped out/ {
|
||||||
|
printf "%d\n", $1 / 1024 * pagesize / 1024;
|
||||||
|
}'
|
||||||
|
</action>
|
||||||
|
</metric>
|
||||||
|
<!-- SAP "CIM" -->
|
||||||
|
<metric type="real64" context="host">
|
||||||
|
<name>TotalCPUTime</name>
|
||||||
|
<action>
|
||||||
|
awk '
|
||||||
|
function user_hz( hz)
|
||||||
|
{
|
||||||
|
cmd = "getconf CLK_TCK";
|
||||||
|
cmd | getline;
|
||||||
|
hz = $1;
|
||||||
|
close(cmd);
|
||||||
|
|
||||||
|
return hz;
|
||||||
|
}
|
||||||
|
|
||||||
|
BEGIN {
|
||||||
|
USER_HZ = user_hz();
|
||||||
|
TotalCPUTime = 0;
|
||||||
|
|
||||||
|
while ( 0 < ( getline < "/proc/stat" ) )
|
||||||
|
{
|
||||||
|
if ( "cpu" == $1 )
|
||||||
|
{
|
||||||
|
TotalCPUTime = $2 + $3 + $4;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close("/proc/stat");
|
||||||
|
|
||||||
|
#printf "USER_HZ = %d\n", USER_HZ | "cat 1>&2";
|
||||||
|
TotalCPUTime /= USER_HZ;
|
||||||
|
printf "%f\n", TotalCPUTime;
|
||||||
|
|
||||||
|
#close("cat 1>&2");
|
||||||
|
}'
|
||||||
|
</action>
|
||||||
|
</metric>
|
||||||
|
<!-- SAP "CIM" -->
|
||||||
|
<metric type="real64" context="vm">
|
||||||
|
<name>TotalCPUTime</name>
|
||||||
|
<action>
|
||||||
|
virsh -r CONNECT dominfo NAME \
|
||||||
|
|awk -F ':' '
|
||||||
|
function mkvarnam(s) { # UPPER_CASE_UNDERSCORE
|
||||||
|
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
|
||||||
|
gsub("[[:space:]]+", "_", s); s = toupper(s);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
function filt_phys(s, sep, num, unit) { # 42.0 KM
|
||||||
|
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
|
||||||
|
if ( s ~ /^[0-9]*\.?[0-9]+[[:space:]]*[[:alpha:]]+$/ )
|
||||||
|
{
|
||||||
|
num = s; unit = s;
|
||||||
|
sub("[[:space:]]*[[:alpha:]]+$", "", num);
|
||||||
|
sub("^[0-9]*[.]?[0-9]+[[:space:]]*", "", unit);
|
||||||
|
return num sep toupper(unit);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/:/ {
|
||||||
|
d1 = substr($0, 1, index($0, ":") - 1);
|
||||||
|
rest = substr($0, index($0, ":") + 1);
|
||||||
|
printf("%s:%s\n", mkvarnam(d1), filt_phys(rest, ":"));
|
||||||
|
}' \
|
||||||
|
| awk -F: '$1 == "CPU_TIME" { print $2; }'
|
||||||
|
</action>
|
||||||
|
</metric>
|
||||||
|
<!-- SAP "CIM" -->
|
||||||
|
<metric type="uint32" context="vm">
|
||||||
|
<name>ResourceProcessorLimit</name>
|
||||||
|
<action>
|
||||||
|
virsh -r CONNECT dominfo NAME \
|
||||||
|
|awk -F ':' '
|
||||||
|
function mkvarnam(s) { # UPPER_CASE_UNDERSCORE
|
||||||
|
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
|
||||||
|
gsub("[[:space:]]+", "_", s); s = toupper(s);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
function filt_phys(s, sep, num, unit) { # 42.0 KM
|
||||||
|
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
|
||||||
|
if ( s ~ /^[0-9]*\.?[0-9]+[[:space:]]*[[:alpha:]]+$/ )
|
||||||
|
{
|
||||||
|
num = s; unit = s;
|
||||||
|
sub("[[:space:]]*[[:alpha:]]+$", "", num);
|
||||||
|
sub("^[0-9]*[.]?[0-9]+[[:space:]]*", "", unit);
|
||||||
|
return num sep toupper(unit);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/:/ {
|
||||||
|
d1 = substr($0, 1, index($0, ":") - 1);
|
||||||
|
rest = substr($0, index($0, ":") + 1);
|
||||||
|
printf("%s:%s\n", mkvarnam(d1), filt_phys(rest, ":"));
|
||||||
|
}' \
|
||||||
|
| awk -F: '$1 == "CPU(S)" { print $2; }'
|
||||||
|
</action>
|
||||||
|
</metric>
|
||||||
|
<!-- SAP "CIM" -->
|
||||||
|
<metric type="uint64" context="vm">
|
||||||
|
<name>ResourceMemoryLimit</name>
|
||||||
|
<action>
|
||||||
|
virsh -r CONNECT dominfo NAME \
|
||||||
|
|awk -F ':' '
|
||||||
|
function mkvarnam(s) { # UPPER_CASE_UNDERSCORE
|
||||||
|
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
|
||||||
|
gsub("[[:space:]]+", "_", s); s = toupper(s);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
function filt_phys(s, sep, num, unit) { # 42.0 KM
|
||||||
|
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
|
||||||
|
if ( s ~ /^[0-9]*\.?[0-9]+[[:space:]]*[[:alpha:]]+$/ )
|
||||||
|
{
|
||||||
|
num = s; unit = s;
|
||||||
|
sub("[[:space:]]*[[:alpha:]]+$", "", num);
|
||||||
|
sub("^[0-9]*[.]?[0-9]+[[:space:]]*", "", unit);
|
||||||
|
return num sep toupper(unit);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/:/ {
|
||||||
|
d1 = substr($0, 1, index($0, ":") - 1);
|
||||||
|
rest = substr($0, index($0, ":") + 1);
|
||||||
|
printf("%s:%s\n", mkvarnam(d1), filt_phys(rest, ":"));
|
||||||
|
}' \
|
||||||
|
| awk -F: '$1 == "MAX_MEMORY" { print int($2/1024); }'
|
||||||
|
</action>
|
||||||
|
</metric>
|
||||||
|
<!-- SAP "CIM" -->
|
||||||
|
<metric type="uint64" context="vm">
|
||||||
|
<name>PhysicalMemoryAllocatedToVirtualSystem</name>
|
||||||
|
<action>
|
||||||
|
virsh -r CONNECT dominfo NAME \
|
||||||
|
|awk -F ':' '
|
||||||
|
function mkvarnam(s) { # UPPER_CASE_UNDERSCORE
|
||||||
|
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
|
||||||
|
gsub("[[:space:]]+", "_", s); s = toupper(s);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
function filt_phys(s, sep, num, unit) { # 42.0 KM
|
||||||
|
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
|
||||||
|
if ( s ~ /^[0-9]*\.?[0-9]+[[:space:]]*[[:alpha:]]+$/ )
|
||||||
|
{
|
||||||
|
num = s; unit = s;
|
||||||
|
sub("[[:space:]]*[[:alpha:]]+$", "", num);
|
||||||
|
sub("^[0-9]*[.]?[0-9]+[[:space:]]*", "", unit);
|
||||||
|
return num sep toupper(unit);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/:/ {
|
||||||
|
d1 = substr($0, 1, index($0, ":") - 1);
|
||||||
|
rest = substr($0, index($0, ":") + 1);
|
||||||
|
printf("%s:%s\n", mkvarnam(d1), filt_phys(rest, ":"));
|
||||||
|
}' \
|
||||||
|
| awk -F: '$1 == "USED_MEMORY" { print int($2/1024); }'
|
||||||
|
</action>
|
||||||
|
</metric>
|
||||||
|
</metrics>
|
||||||
|
</vhostmd>
|
||||||
|
<!--
|
||||||
|
vi:ts=2:sw=2:expandtab:ignorecase:nu:ruler
|
||||||
|
-->
|
||||||
|
<!-- EOF -->
|
@ -0,0 +1,373 @@
|
|||||||
|
%global have_xen 0
|
||||||
|
|
||||||
|
Summary: Virtualization host metrics daemon
|
||||||
|
Name: vhostmd
|
||||||
|
Version: 1.1
|
||||||
|
Release: 11%{?dist}
|
||||||
|
License: GPLv2+
|
||||||
|
|
||||||
|
URL: https://github.com/vhostmd/vhostmd
|
||||||
|
|
||||||
|
Source0: https://github.com/vhostmd/vhostmd/archive/v%{version}/%{name}-%{version}.tar.gz
|
||||||
|
Source1: vhostmd.conf
|
||||||
|
|
||||||
|
# Prevents updates from previous versions with the old config file
|
||||||
|
# from breaking (RHBZ#1782897).
|
||||||
|
# https://github.com/vhostmd/vhostmd/commit/83cc269f6892852be94467cea771b3ad1da8a369
|
||||||
|
Patch0001: 0001-Relax-virtio-requirement-in-config-file.patch
|
||||||
|
Patch0002: 0002-libmetrics-Set-pointer-NULL-after-free.patch
|
||||||
|
Patch0003: 0003-libmetrics-Initialize-local-variable-ret-to-failure.patch
|
||||||
|
Patch0004: 0004-libmetrics-Check-return-value-of-asprintf.patch
|
||||||
|
Patch0005: 0005-libmetrics-Remove-unsafe-XML_PARSE_NOENT-option.patch
|
||||||
|
Patch0006: 0006-libmetrics-Ensure-libmetrics-mutex-is-unlocked-in-er.patch
|
||||||
|
Patch0007: 0007-libmetrics-Fix-potential-memory-leak.patch
|
||||||
|
Patch0008: 0008-libmetrics-Use-proper-conversion-specifier-when-call.patch
|
||||||
|
Patch0009: 0009-libmetrics-Fix-potential-leak-of-FILE-pointer.patch
|
||||||
|
Patch0010: 0010-util-Add-missing-call-to-va_end.patch
|
||||||
|
Patch0011: 0011-util-Fix-potential-memory-leak.patch
|
||||||
|
Patch0012: 0012-util-Check-return-value-of-strstr.patch
|
||||||
|
Patch0013: 0013-Check-return-value-of-asprintf.patch
|
||||||
|
Patch0014: 0014-vhostmd-Fix-memory-leak-in-parse_transports.patch
|
||||||
|
Patch0015: 0015-vhostmd-Remove-unsafe-XML_PARSE_NOENT-option.patch
|
||||||
|
Patch0016: 0016-vhostmd-Check-return-value-of-file-functions.patch
|
||||||
|
Patch0017: 0017-vhostmd-Check-for-valide-file-handle-before-calling-.patch
|
||||||
|
Patch0018: 0018-vhostmd-Fix-memory-leak-in-vhostmd_run.patch
|
||||||
|
Patch0019: 0019-virtio-Fix-strncpy-length-parameter.patch
|
||||||
|
|
||||||
|
BuildRequires: make
|
||||||
|
BuildRequires: gcc
|
||||||
|
BuildRequires: chrpath
|
||||||
|
BuildRequires: perl-generators
|
||||||
|
BuildRequires: pkgconfig
|
||||||
|
BuildRequires: libxml2-devel
|
||||||
|
BuildRequires: libvirt-devel
|
||||||
|
BuildRequires: autoconf, automake, libtool
|
||||||
|
BuildRequires: git
|
||||||
|
%{?systemd_requires}
|
||||||
|
BuildRequires: systemd
|
||||||
|
|
||||||
|
%if %{have_xen}
|
||||||
|
BuildRequires: xen-devel
|
||||||
|
%endif
|
||||||
|
|
||||||
|
# This is hopefully temporary, but required to run vhostmd.xml as
|
||||||
|
# currently written. For more information see:
|
||||||
|
# https://bugzilla.redhat.com/show_bug.cgi?id=1897130
|
||||||
|
Requires: libvirt
|
||||||
|
|
||||||
|
|
||||||
|
%description
|
||||||
|
vhostmd provides a "metrics communication channel" between a host and
|
||||||
|
its hosted virtual machines, allowing limited introspection of host
|
||||||
|
resource usage from within virtual machines.
|
||||||
|
|
||||||
|
|
||||||
|
%package -n vm-dump-metrics
|
||||||
|
Summary: Virtualization host metrics dump
|
||||||
|
|
||||||
|
|
||||||
|
%description -n vm-dump-metrics
|
||||||
|
Executable to dump all available virtualization host metrics to stdout
|
||||||
|
or a file.
|
||||||
|
|
||||||
|
|
||||||
|
%package -n vm-dump-metrics-devel
|
||||||
|
Summary: Virtualization host metrics dump development
|
||||||
|
Requires: vm-dump-metrics = %{version}-%{release}
|
||||||
|
Requires: pkgconfig
|
||||||
|
|
||||||
|
|
||||||
|
%description -n vm-dump-metrics-devel
|
||||||
|
Header and libraries necessary for metrics gathering development
|
||||||
|
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%autosetup -S git
|
||||||
|
|
||||||
|
|
||||||
|
%build
|
||||||
|
autoreconf -i
|
||||||
|
%configure \
|
||||||
|
%if %{have_xen} == 0
|
||||||
|
--without-xenstore \
|
||||||
|
%endif
|
||||||
|
--with-init-script=systemd \
|
||||||
|
--enable-shared --disable-static
|
||||||
|
make %{_smp_mflags}
|
||||||
|
|
||||||
|
|
||||||
|
%install
|
||||||
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
|
||||||
|
make DESTDIR=$RPM_BUILD_ROOT install
|
||||||
|
|
||||||
|
rm $RPM_BUILD_ROOT%{_libdir}/libmetrics.la
|
||||||
|
|
||||||
|
chrpath --delete $RPM_BUILD_ROOT%{_sbindir}/vm-dump-metrics
|
||||||
|
|
||||||
|
# Remove docdir - we'll make a proper one ourselves.
|
||||||
|
rm -r $RPM_BUILD_ROOT%{_docdir}/vhostmd
|
||||||
|
|
||||||
|
# Remove metric.dtd from /etc.
|
||||||
|
rm $RPM_BUILD_ROOT%{_sysconfdir}/vhostmd/metric.dtd
|
||||||
|
|
||||||
|
# The default configuration file is great for Xen, not so great
|
||||||
|
# for anyone else. Replace it with one which is better for libvirt
|
||||||
|
# users.
|
||||||
|
rm $RPM_BUILD_ROOT%{_sysconfdir}/vhostmd/vhostmd.conf
|
||||||
|
cp %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/vhostmd/vhostmd.conf
|
||||||
|
|
||||||
|
%if 0%{?rhel}
|
||||||
|
# Remove Perl script (https://bugzilla.redhat.com/show_bug.cgi?id=749875)
|
||||||
|
rm $RPM_BUILD_ROOT%{_datadir}/vhostmd/scripts/pagerate.pl
|
||||||
|
%endif
|
||||||
|
|
||||||
|
|
||||||
|
%pre
|
||||||
|
# UID:GID 112:112 reserved, see RHBZ#534109.
|
||||||
|
getent group vhostmd >/dev/null || groupadd -g 112 -r vhostmd
|
||||||
|
getent passwd vhostmd >/dev/null || \
|
||||||
|
useradd -u 112 -r -g vhostmd -d %{_datadir}/vhostmd -s /sbin/nologin \
|
||||||
|
-c "Virtual Host Metrics Daemon" vhostmd
|
||||||
|
exit 0
|
||||||
|
|
||||||
|
|
||||||
|
%post
|
||||||
|
%systemd_post vhostmd.service
|
||||||
|
|
||||||
|
|
||||||
|
%preun
|
||||||
|
%systemd_preun vhostmd.service
|
||||||
|
|
||||||
|
|
||||||
|
%postun
|
||||||
|
%systemd_postun_with_restart vhostmd.service
|
||||||
|
|
||||||
|
|
||||||
|
%files
|
||||||
|
%doc AUTHORS ChangeLog COPYING README
|
||||||
|
%doc mdisk.xml metric.dtd vhostmd.dtd vhostmd.xml
|
||||||
|
|
||||||
|
%{_sbindir}/vhostmd
|
||||||
|
|
||||||
|
%dir %{_sysconfdir}/vhostmd
|
||||||
|
%config(noreplace) %{_sysconfdir}/vhostmd/vhostmd.conf
|
||||||
|
%config %{_sysconfdir}/vhostmd/vhostmd.dtd
|
||||||
|
|
||||||
|
%{_unitdir}/vhostmd.service
|
||||||
|
|
||||||
|
%dir %{_datadir}/vhostmd
|
||||||
|
%dir %{_datadir}/vhostmd/scripts
|
||||||
|
%if !0%{?rhel}
|
||||||
|
%{_datadir}/vhostmd/scripts/pagerate.pl
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%{_mandir}/man8/vhostmd.8.gz
|
||||||
|
|
||||||
|
|
||||||
|
%files -n vm-dump-metrics
|
||||||
|
%doc COPYING
|
||||||
|
%{_sbindir}/vm-dump-metrics
|
||||||
|
%{_libdir}/libmetrics.so.0
|
||||||
|
%{_libdir}/libmetrics.so.0.0.0
|
||||||
|
%{_mandir}/man1/vm-dump-metrics.1.gz
|
||||||
|
|
||||||
|
|
||||||
|
%files -n vm-dump-metrics-devel
|
||||||
|
%doc README
|
||||||
|
%{_libdir}/libmetrics.so
|
||||||
|
%dir %{_includedir}/vhostmd
|
||||||
|
%{_includedir}/vhostmd/libmetrics.h
|
||||||
|
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Tue Aug 10 2021 Mohan Boddu <mboddu@redhat.com> - 1.1-11
|
||||||
|
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
|
||||||
|
Related: rhbz#1991688
|
||||||
|
|
||||||
|
* Thu Jul 29 2021 Richard W.M. Jones <rjones@redhat.com> - 1.1-10
|
||||||
|
- Miscellaneous upstream fixes.
|
||||||
|
|
||||||
|
* Fri Jul 23 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-9
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
|
||||||
|
|
||||||
|
* Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 1.1-8
|
||||||
|
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
|
||||||
|
|
||||||
|
* Tue Feb 09 2021 Richard W.M. Jones <rjones@redhat.com> - 1.1-7
|
||||||
|
- Unify vhostmd.conf with RHEL 8.4 (RHBZ#1924966).
|
||||||
|
|
||||||
|
* Thu Feb 04 2021 Richard W.M. Jones <rjones@redhat.com> - 1.1-6
|
||||||
|
- Increase release so > RHEL 8 (RHBZ#1924966).
|
||||||
|
- Unify spec files between RHEL and Fedora.
|
||||||
|
|
||||||
|
* Wed Jan 27 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-4
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
|
||||||
|
|
||||||
|
* Wed Jul 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-3
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
|
||||||
|
|
||||||
|
* Fri Jan 31 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-2
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
|
||||||
|
|
||||||
|
* Thu Aug 29 2019 Richard W.M. Jones <rjones@redhat.com> - 1.1-1
|
||||||
|
- Upstream version 1.1.
|
||||||
|
- Remove patches, since all included 1.1.
|
||||||
|
|
||||||
|
* Sat Jul 27 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.0-4
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
|
||||||
|
|
||||||
|
* Sun Feb 03 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.0-3
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
|
||||||
|
|
||||||
|
* Fri Jan 18 2019 Richard W.M. Jones <rjones@redhat.com> - 1.0-2
|
||||||
|
- Upstream version 1.0.
|
||||||
|
- Remove patches, since all included 1.0.
|
||||||
|
- Add patches since 1.0.
|
||||||
|
- Fix Source0 URL, hosted on github.
|
||||||
|
- Remove old Source1 and Source2, not used.
|
||||||
|
|
||||||
|
* Tue Oct 16 2018 Richard W.M. Jones <rjones@redhat.com> - 0.5-19
|
||||||
|
- Include all upstream patches since 0.5.
|
||||||
|
- Enable systemd init scripts (RHBZ#1592400).
|
||||||
|
|
||||||
|
* Sat Jul 14 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.5-18
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
|
||||||
|
|
||||||
|
* Thu Jul 05 2018 Richard W.M. Jones <rjones@redhat.com> - 0.5-17
|
||||||
|
- Remove ldconfig
|
||||||
|
https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/SU3LJVDZ7LUSJGZR5MS72BMRAFP3PQQL/
|
||||||
|
|
||||||
|
* Fri Feb 09 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 0.5-16
|
||||||
|
- Escape macros in %%changelog
|
||||||
|
|
||||||
|
* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.5-15
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
|
||||||
|
|
||||||
|
* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.5-14
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
|
||||||
|
|
||||||
|
* Sat Feb 11 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.5-13
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
|
||||||
|
|
||||||
|
* Fri Feb 05 2016 Fedora Release Engineering <releng@fedoraproject.org> - 0.5-12
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
|
||||||
|
|
||||||
|
* Tue Jan 26 2016 Richard Jones <rjones@redhat.com> - 0.5-11
|
||||||
|
- Remove useless defattr in files section.
|
||||||
|
|
||||||
|
* Fri Jun 19 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5-10
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
|
||||||
|
|
||||||
|
* Mon Aug 18 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5-9
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
|
||||||
|
|
||||||
|
* Sun Jun 08 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5-8
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
|
||||||
|
|
||||||
|
* Sat Aug 03 2013 Petr Pisar <ppisar@redhat.com> - 0.5-7
|
||||||
|
- Perl 5.18 rebuild
|
||||||
|
|
||||||
|
* Mon Jul 29 2013 Richard W.M. Jones <rjones@redhat.com> - 0.5-6
|
||||||
|
- Completely disable Xen. APIs seem to have changed incompatibly.
|
||||||
|
- Add commits from upstream since 0.5.
|
||||||
|
- Remove pagerate.pl when building on RHEL.
|
||||||
|
- Modernize the spec file.
|
||||||
|
|
||||||
|
* Wed Jul 17 2013 Petr Pisar <ppisar@redhat.com> - 0.5-5
|
||||||
|
- Perl 5.18 rebuild
|
||||||
|
|
||||||
|
* Thu May 23 2013 Richard W.M. Jones <rjones@redhat.com> - 0.5-4
|
||||||
|
- Disable Xen support on RHEL >= 6 (RHBZ#927853).
|
||||||
|
|
||||||
|
* Fri Feb 15 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5-3
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
|
||||||
|
|
||||||
|
* Sun Jul 22 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5-2
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
|
||||||
|
|
||||||
|
* Mon Jan 16 2012 Richard W.M. Jones <rjones@redhat.com> - 0.5-1
|
||||||
|
- New upstream version 0.5.
|
||||||
|
- Remove -ldl patch which is now upstream.
|
||||||
|
|
||||||
|
* Sat Jan 14 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.4-13
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
|
||||||
|
|
||||||
|
* Mon Feb 07 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.4-12
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
|
||||||
|
|
||||||
|
* Fri Jul 23 2010 Richard W.M. Jones <rjones@redhat.com> - 0.4-11
|
||||||
|
- /etc/sysconfig/vhostmd: Default to KVM.
|
||||||
|
|
||||||
|
* Tue Jul 13 2010 Richard W.M. Jones <rjones@redhat.com> - 0.4-10
|
||||||
|
- Patch Makefile.in directly so we don't need to run autotools.
|
||||||
|
|
||||||
|
* Tue Jul 6 2010 Richard W.M. Jones <rjones@redhat.com> - 0.4-9
|
||||||
|
- Updated vhostmd.conf from Dr. Joachim Schneider at SAP.
|
||||||
|
- Run aclocal.
|
||||||
|
|
||||||
|
* Tue Apr 27 2010 Richard W.M. Jones <rjones@redhat.com> - 0.4-6
|
||||||
|
- Updated vhostmd.conf file which enables TotalCPUTime metric.
|
||||||
|
|
||||||
|
* Tue Feb 16 2010 Richard W.M. Jones <rjones@redhat.com> - 0.4-5
|
||||||
|
- Add a patch to link tests explicitly with -ldl (RHBZ#565096).
|
||||||
|
|
||||||
|
* Thu Dec 10 2009 Richard W.M. Jones <rjones@redhat.com> - 0.4-2
|
||||||
|
- Fix the PagedOutMemory and PagedInMemory stats to report MB instead
|
||||||
|
of pages (fixes supplied by Joachim Schneider).
|
||||||
|
|
||||||
|
* Wed Dec 9 2009 Richard W.M. Jones <rjones@redhat.com> - 0.4-1
|
||||||
|
- vhostmd didn't chdir ("/") when daemonizing. Fixed in this 0.4 release.
|
||||||
|
|
||||||
|
* Tue Nov 17 2009 Richard W.M. Jones <rjones@redhat.com> - 0.4-0.9.gite9db007b
|
||||||
|
- Add a timestamp to the metrics.
|
||||||
|
- Fix a typo in MemoryAllocatedToVirtualServers metric
|
||||||
|
(https://bugzilla.redhat.com/show_bug.cgi?id=532070#c7)
|
||||||
|
- %%{_sysconfdir}/sysconfig/vhostmd: Use libvirt default URI
|
||||||
|
(https://bugzilla.redhat.com/show_bug.cgi?id=537828)
|
||||||
|
- %%{_sysconfdir}/init.d/vhostmd: If using libvirt's default URI, then pass
|
||||||
|
the root URI to vhostmd (the default URI changes in some circumstances
|
||||||
|
when vhostmd switches to the non-root user).
|
||||||
|
|
||||||
|
* Wed Nov 11 2009 Richard W.M. Jones <rjones@redhat.com> - 0.4-0.8.gite9db007b
|
||||||
|
- Use fixed UID:GID 112:112 (RHBZ#534109).
|
||||||
|
|
||||||
|
* Tue Nov 10 2009 Richard W.M. Jones <rjones@redhat.com> - 0.4-0.7.gite9db007b
|
||||||
|
- vm-dump-metrics-devel package should require version and release of
|
||||||
|
base package.
|
||||||
|
|
||||||
|
* Mon Nov 2 2009 Richard W.M. Jones <rjones@redhat.com> - 0.4-0.6.gite9db007b
|
||||||
|
- Some changes to the default configuration file suggested by SAP to
|
||||||
|
make it more CIM standards compliant.
|
||||||
|
|
||||||
|
* Fri Oct 16 2009 Richard W.M. Jones <rjones@redhat.com> - 0.4-0.5.gite9db007b
|
||||||
|
- New upstream based on git e9db007b.
|
||||||
|
- Fix segfault in vm-dump-metrics (RHBZ#529348).
|
||||||
|
- On error, vm-dump-metrics now exits with status code 1.
|
||||||
|
|
||||||
|
* Thu Oct 15 2009 Richard W.M. Jones <rjones@redhat.com> - 0.4-0.2.gitea2f772d
|
||||||
|
- New upstream based on git ea2f772d.
|
||||||
|
- Update the configuration file based on upstream changes to how virsh
|
||||||
|
has to be run.
|
||||||
|
- vhostmd should run non-root as user 'vhostmd'.
|
||||||
|
- Allow libvirt URI to be configured.
|
||||||
|
|
||||||
|
* Tue Oct 13 2009 Richard W.M. Jones <rjones@redhat.com> - 0.4-0.1.git326f0012172
|
||||||
|
- Move to pre-release of 0.4, self-built tarball.
|
||||||
|
- Disable xenstore on non-x86 platforms.
|
||||||
|
- Add patch to fix --without-xenstore option.
|
||||||
|
- Use have_xen RPM macro.
|
||||||
|
|
||||||
|
* Mon Oct 12 2009 Richard W.M. Jones <rjones@redhat.com> - 0.3-3
|
||||||
|
- Remove metric.dtd file from /etc (fixes rpmlint warning), but
|
||||||
|
vhostmd.dtd has to remain because it is needed to validate the
|
||||||
|
XML configuration file.
|
||||||
|
- Remove ExclusiveArch, instead conditionally depend on xen-devel.
|
||||||
|
- Use a better, less noisy, more minimal configuration file which
|
||||||
|
doesn't depend on Xen.
|
||||||
|
|
||||||
|
* Thu Oct 8 2009 Richard W.M. Jones <rjones@redhat.com> - 0.3-1
|
||||||
|
- New upstream version 0.3.
|
||||||
|
|
||||||
|
* Fri Aug 14 2009 Richard W.M. Jones <rjones@redhat.com> - 0.2-1
|
||||||
|
- Initial packaging for Fedora, based on SuSE package.
|
Loading…
Reference in new issue