misc: Use gmtime for conversion to UTC to avoid getenv/setenv
authorAndreas Hansson <andreas.hansson@arm.com>
Mon, 20 Oct 2014 22:03:55 +0000 (18:03 -0400)
committerAndreas Hansson <andreas.hansson@arm.com>
Mon, 20 Oct 2014 22:03:55 +0000 (18:03 -0400)
This patch changes how we turn time into UTC. Previously we
manipulated the TZ environment variable, but this has issues as the
strings that are manipulated could be tainted (see e.g. CERT
ENV34-C). Now we simply rely on the built-in gmtime function and avoid
touching getenv/setenv all together.

src/base/time.cc
src/dev/sparc/dtod.cc

index dd9e72a09b0b088159255f369c1087616c28a2df..c265c1c47ff3a07039d7fce31e8a0f76948a6881 100644 (file)
@@ -150,18 +150,7 @@ sleep(const Time &time)
 time_t
 mkutctime(struct tm *time)
 {
-    time_t ret;
-    char *tz;
-
-    tz = getenv("TZ");
-    setenv("TZ", "", 1);
-    tzset();
-    ret = mktime(time);
-    if (tz)
-        setenv("TZ", tz, 1);
-    else
-        unsetenv("TZ");
-    tzset();
-    return ret;
+    time_t local = mktime(time);
+    return mktime(gmtime(&local));
 }
 
index abbab2dee15a13c1ec82fd537abeaedb86ce925c..0d57b1f83ce8f53e1e08a678d0608033b5e18d9f 100644 (file)
@@ -53,17 +53,8 @@ DumbTOD::DumbTOD(const Params *p)
     : BasicPioDevice(p, 0x08)
 {
     struct tm tm = p->time;
-    char *tz;
-
-    tz = getenv("TZ");
-    setenv("TZ", "", 1);
-    tzset();
-    todTime = mktime(&tm);
-    if (tz)
-        setenv("TZ", tz, 1);
-    else
-        unsetenv("TZ");
-    tzset();
+    time_t local = mktime(&tm);
+    todTime = mktime(gmtime(&local));
 
     DPRINTFN("Real-time clock set to %s\n", asctime(&tm));
     DPRINTFN("Real-time clock set to %d\n", todTime);