diff options
author | Rich Felker <dalias@aerifal.cx> | 2014-04-22 20:09:56 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2014-04-22 20:09:56 -0400 |
commit | c3d9d172b1fcd56c4d356798f4e3b4653076bcc3 (patch) | |
tree | fb8439c21f7274af462e81abe799d46736525222 | |
parent | 0f2315b4af1c58cbfb7c7f9da69b495cd146cc18 (diff) | |
download | musl-c3d9d172b1fcd56c4d356798f4e3b4653076bcc3.tar.gz musl-c3d9d172b1fcd56c4d356798f4e3b4653076bcc3.tar.bz2 musl-c3d9d172b1fcd56c4d356798f4e3b4653076bcc3.tar.xz musl-c3d9d172b1fcd56c4d356798f4e3b4653076bcc3.zip |
perform minimal sanity checks on zoneinfo files loaded via TZ variable
previously, setting TZ to the pathname of a file which was not a valid
zoneinfo file would usually cause programs using local time zone based
operations to crash. the new code checks the file size and magic at
the beginning of the file, which seems sufficient to prevent
accidental misconfiguration from causing crashes. attempting to make
fully-robust validation would be futile unless we wanted to drop use
of mmap (shared zoneinfo) and instead read it into a local buffer,
since such validation would be subject to race conditions with
modification of the file.
-rw-r--r-- | src/time/__tz.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/time/__tz.c b/src/time/__tz.c index 93d59e8d..6d7173cf 100644 --- a/src/time/__tz.c +++ b/src/time/__tz.c @@ -168,6 +168,11 @@ static void do_tzset() } if (!map) s = __gmt; } + if (map && (map_size < 44 || memcmp(map, "TZif", 4))) { + __munmap((void *)map, map_size); + map = 0; + s = __gmt; + } zi = map; if (map) { |