On 02/08/2012 09:32 AM, Philipp Hahn wrote: > XenD-3.1 introduced managed domains. HV-domains have rtc_timeoffset > (hgd24f37b31030 from 2007-04-03), which tracks the offset between the > hypervisors clock and the domains RTC, and is persisted by XenD. > In combination with localtime=1 this had a bug until XenD-3.4 > (hg5d701be7c37b from 2009-04-01) (I'm not 100% sure how that bug > manifests, but at least for me in TZ=Europe/Berlin I see the previous > offset relative to utc being applied to localtime again, which manifests > in an extra hour being added) >
Applying this patch causes 'make check' to fail on xml2sexprtest,
sexpr2xmltest, and xmconfigtest for me. I didn't look into it, other
than seeing lots of:
$ make -C tests check TESTS=xmconfigtest VIR_TEST_DEBUG=1
...
64) Xen XM-2-XML Format no-source-cdrom ...
Offset 414
Expect [/]
Actual [ adjustment='reset'/]
... FAILED
If patch 3/3 fixes things, then I will squash the two together (we want
'git bisect' to succeed as often as possible).
>
> - /* Old XenD only allows localtime here for HVM */
> - if (sexpr_int(root, "domain/image/hvm/localtime"))
> - def->clock.offset = VIR_DOMAIN_CLOCK_OFFSET_LOCALTIME;
> + /* 12aaf4a2486b (3.0.3) added a second low-priority 'localtime' setting
> */
> + vmlocaltime = sexpr_int(root, "domain/localtime");
> + if (hvm) {
> + const char *value = sexpr_node(root, "domain/image/hvm/localtime");
> + if (value)
> + vmlocaltime = strtol(value, NULL, 0);
strtol() is awkward (I'm surprised 'make syntax-check' isn't flagging it).
> @@ -1279,14 +1298,17 @@ xenParseSxpr(const struct sexpr *root,
> def->clock.ntimers = 1;
> def->clock.timers[0] = timer;
> }
> - } else { /* !hvm */
> - if (sexpr_int(root, "domain/image/linux/localtime"))
> + } else {
> + const char *value = sexpr_node(root, "domain/image/linux/localtime");
> + if (value)
> + vmlocaltime = strtol(value, NULL, 0);
another strtol().
I didn't spot any other problems, so conditional ack once I review 3/3
and squash this in:
diff --git i/src/xenxs/xen_sxpr.c w/src/xenxs/xen_sxpr.c
index c9bacb2..b26b2bc 100644
--- i/src/xenxs/xen_sxpr.c
+++ w/src/xenxs/xen_sxpr.c
@@ -1263,8 +1263,13 @@ xenParseSxpr(const struct sexpr *root,
vmlocaltime = sexpr_int(root, "domain/localtime");
if (hvm) {
const char *value = sexpr_node(root, "domain/image/hvm/localtime");
- if (value)
- vmlocaltime = strtol(value, NULL, 0);
+ if (value) {
+ if (virStrToLong_i(value, NULL, 0, &vmlocaltime) < 0) {
+ XENXS_ERROR(VIR_ERR_INTERNAL_ERROR,
+ _("unknown localtime offset %s"), value);
+ goto error;
+ }
+ }
/* only managed HVM domains since 3.1.0 have persistent
rtc_timeoffset */
if (xendConfigVersion < XEND_CONFIG_VERSION_3_1_0) {
if (vmlocaltime)
@@ -1300,8 +1305,13 @@ xenParseSxpr(const struct sexpr *root,
}
} else {
const char *value = sexpr_node(root,
"domain/image/linux/localtime");
- if (value)
- vmlocaltime = strtol(value, NULL, 0);
+ if (value) {
+ if (virStrToLong_i(value, NULL, 0, &vmlocaltime) < 0) {
+ XENXS_ERROR(VIR_ERR_INTERNAL_ERROR,
+ _("unknown localtime offset %s"), value);
+ goto error;
+ }
+ }
/* PV domains do not have an emulated RTC and the offset is
fixed. */
if (vmlocaltime)
def->clock.offset = VIR_DOMAIN_CLOCK_OFFSET_LOCALTIME;
--
Eric Blake [email protected] +1-919-301-3266
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
-- libvir-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/libvir-list
