import vhostmd-1.1-16.el10

i10cs changed/i10cs/vhostmd-1.1-16.el10
MSVSphere Packaging Team 3 months ago
commit 8687265ade
Signed by: sys_gitsync
GPG Key ID: B2B0B9F29E528FE8

1
.gitignore vendored

@ -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,74 @@
From cf555d3bf079ff60b363dba4dc48a349dce5d3b4 Mon Sep 17 00:00:00 2001
From: Yaakov Selkowitz <yselkowi@redhat.com>
Date: Sun, 24 Dec 2023 14:54:09 -0500
Subject: [PATCH] Fix implicit declarations
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Errors raised in Fedora rawhide and ELN which have added the
-Werror=implicit-function-declaration flag for C:
virt-util.c:96:9: error: implicit declaration of function calloc
virt-util.c:129:10: error: implicit declaration of function free
virtio.c:160:9: error: implicit declaration of function free
virtio.c:254:31: error: implicit declaration of function bsearch
virtio.c:259:13: error: implicit declaration of function qsort
virtio.c:586:33: error: implicit declaration of function calloc
libmetrics.c:136:28: error: implicit declaration of function 'atoi'
libmetrics.c:142:29: error: implicit declaration of function 'atoll'
libmetrics.c:148:28: error: implicit declaration of function 'atof'
libmetrics.c:170:12: error: implicit declaration of function 'calloc'
libmetrics.c:189:12: error: implicit declaration of function 'free'
libmetrics.c:311:7: error: implicit declaration of function 'posix_memalign'
libmetrics.c:385:26: error: implicit declaration of function 'malloc'
libmetrics.c:848:28: error: implicit declaration of function 'realloc'
Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com>
---
libmetrics/libmetrics.c | 1 +
vhostmd/virt-util.c | 1 +
vhostmd/virtio.c | 1 +
3 files changed, 3 insertions(+)
diff --git a/libmetrics/libmetrics.c b/libmetrics/libmetrics.c
index 8819074..c83fd03 100644
--- a/libmetrics/libmetrics.c
+++ b/libmetrics/libmetrics.c
@@ -21,6 +21,7 @@
#include <config.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
diff --git a/vhostmd/virt-util.c b/vhostmd/virt-util.c
index a94cccd..40765c3 100644
--- a/vhostmd/virt-util.c
+++ b/vhostmd/virt-util.c
@@ -21,6 +21,7 @@
#include <config.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <libvirt/libvirt.h>
diff --git a/vhostmd/virtio.c b/vhostmd/virtio.c
index a6c2515..98340ce 100644
--- a/vhostmd/virtio.c
+++ b/vhostmd/virtio.c
@@ -30,6 +30,7 @@
#include <search.h>
#include <dirent.h>
#include <pthread.h>
+#include <stdlib.h>
#include <libvirt/libvirt.h>
#include "util.h"
--
2.43.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 &lt; ( getline &lt; "/proc/stat" ) )
{
if ( "cpu" == $1 )
{
TotalCPUTime = $2 + $3 + $4;
break;
}
}
close("/proc/stat");
#printf "USER_HZ = %d\n", USER_HZ | "cat 1&gt;&amp;2";
TotalCPUTime /= USER_HZ;
printf "%f\n", TotalCPUTime;
#close("cat 1&gt;&amp;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,389 @@
%global have_xen 0
Summary: Virtualization host metrics daemon
Name: vhostmd
Version: 1.1
Release: 16%{?dist}
License: LGPL-2.1-or-later
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
# https://github.com/vhostmd/vhostmd/pull/13
Patch0020: 0020-implicit-function-declarations.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.
%sysusers_create_inline u vhostmd 112 "Virtual Host Metrics Daemon" %{_datadir}/vhostmd /sbin/nologin
%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
* Fri Oct 25 2024 MSVSphere Packaging Team <packager@msvsphere-os.ru> - 1.1-16
- Rebuilt for MSVSphere 10
* Mon Jun 24 2024 Troy Dawson <tdawson@redhat.com> - 1.1-16
- Bump release for June 2024 mass rebuild
* Sat Jan 27 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-15
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Sat Jul 22 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-14
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Sat Jan 21 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-13
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Sat Jul 23 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-12
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Sat Jan 22 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-11
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* 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
* Tue Mar 02 2021 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 1.1-8
- Rebuilt for updated systemd-rpm-macros
See https://pagure.io/fesco/issue/2583.
* 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…
Cancel
Save