Re: [PATCH] conf: fix use the wrong type for period

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 03/13/2015 10:38 PM, Martin Kletzander wrote:
On Fri, Mar 13, 2015 at 05:15:32PM +0800, Luyao Huang wrote:
https://bugzilla.redhat.com/show_bug.cgi?id=1140958

When we set period as unsigned int max value 4294967295 and
start the vm, qemu will report error. This becuase we define period
as a unsigned int and parse it as a unsigned int, but we use it as
a int when set it via QMP in qemuMonitorJSONSetMemoryStatsPeriod,
so 4294967295 turn to -1 when we send the QMP command.

After check the qemu's code this value type should be int, and found
a qemu commit 1f9296b for this values range.

Seems no other hypervisor vm use this so i add a check when we parse it.


Where to start.  NACK to this patch as is.  Domains that have
INT_MAX < period < UINT_MAX will disappear after libvirt is restarted
and that's not backwards compatible.


Okay, thanks for pointing out this.

I couldn't make sense of the commit message, but at least the aim is

Hmm...my English need Improvement :)

visible from the code.  Anyway, I believe Erik already worked on this
issue as I gave him few hints regarding this on one of his patches.
Did you talk together about it?  It would be a pity if the work was
blindly doubled.


Oh, Sorry, i didn't noticed this, i should talk with Erik first before wrote this patch.

Looking at this commit message I made a diff to squash in, so I'll
post a v2 with it.

I saw your patches, good idea to avoid vm which have big period settings loss track after update libvirtd, thanks a lot for your review.

Luyao


Signed-off-by: Luyao Huang <lhuang@xxxxxxxxxx>
---
src/conf/domain_conf.c | 3 ++-
src/conf/domain_conf.h | 2 +-
2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 127fc91..54bd5aa 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -10452,7 +10452,8 @@ virDomainMemballoonDefParseXML(xmlNodePtr node,
    }

    ctxt->node = node;
- if (virXPathUInt("string(./stats/@period)", ctxt, &def->period) < -1) { + if (virXPathInt("string(./stats/@period)", ctxt, &def->period) < -1 ||
+        def->period < 0) {
        virReportError(VIR_ERR_XML_ERROR, "%s",
                       _("invalid statistics collection period"));
        goto error;
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index ea463cb..ee0f5fd 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1556,7 +1556,7 @@ enum {
struct _virDomainMemballoonDef {
    int model;
    virDomainDeviceInfo info;
-    unsigned int period; /* seconds between collections */
+    int period; /* seconds between collections */
};

struct _virDomainNVRAMDef {
--
1.8.3.1

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]