]> xenbits.xensource.com Git - qemu-upstream-4.6-testing.git/commitdiff
hw/arm/omap1: Avoid unintended sign extension writing omap_rtc YEARS_REG
authorPeter Maydell <peter.maydell@linaro.org>
Tue, 13 May 2014 15:09:39 +0000 (16:09 +0100)
committerPeter Maydell <peter.maydell@linaro.org>
Tue, 13 May 2014 15:09:39 +0000 (16:09 +0100)
When writing to the YEARS_REG register, if the year value is
99 then the multiplication by 31536000 will overflow into
the sign bit of a 32 bit value and then be erroneously
sign-extended if time_t is 64 bits. Add a cast to avoid this.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
hw/arm/omap1.c

index b433748c607d732ced14fb2e52373fbd13d34fb7..b28e0521b46bc955d7e4064e5544117a6b8a04c6 100644 (file)
@@ -2709,8 +2709,8 @@ static void omap_rtc_write(void *opaque, hwaddr addr,
             s->ti += ti[1];
         } else {
             /* A less accurate version */
-            s->ti -= (s->current_tm.tm_year % 100) * 31536000;
-            s->ti += from_bcd(value) * 31536000;
+            s->ti -= (time_t)(s->current_tm.tm_year % 100) * 31536000;
+            s->ti += (time_t)from_bcd(value) * 31536000;
         }
         return;