From: J William Piggott Date: Sat, 9 Dec 2017 19:01:33 +0000 (-0500) Subject: lib/timeutils.c: bug fix Segmentation fault X-Git-Tag: v2.32-rc1~138 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=97772cc329bfa555b38416dc4dcacd4d318560c3;p=thirdparty%2Futil-linux.git lib/timeutils.c: bug fix Segmentation fault Use reentrant time functions to avoid sending a NULL pointer to format_iso_time() (and to be reentrant ;). Followup commits test for errors and tm_year wrapping (illustrated below). hwclock --utc --noadjfile --predict --date '67768034678849400 seconds' Segmentation fault Patched hwclock --utc --noadjfile --predict --date '67768034678849400 seconds' -2147481748-01-00 00:10:46.000000-05:00 Signed-off-by: J William Piggott --- diff --git a/lib/timeutils.c b/lib/timeutils.c index fdaa2d4a95..994073700e 100644 --- a/lib/timeutils.c +++ b/lib/timeutils.c @@ -462,9 +462,9 @@ int strtimeval_iso(struct timeval *tv, int flags, char *buf, size_t bufsz) struct tm tm; if (flags & ISO_GMTIME) - tm = *gmtime(&tv->tv_sec); + gmtime_r(&tv->tv_sec, &tm); else - tm = *localtime(&tv->tv_sec); + localtime_r(&tv->tv_sec, &tm); return format_iso_time(&tm, tv->tv_usec, flags, buf, bufsz); } @@ -480,9 +480,9 @@ int strtime_iso(const time_t *t, int flags, char *buf, size_t bufsz) struct tm tm; if (flags & ISO_GMTIME) - tm = *gmtime(t); + gmtime_r(t, &tm); else - tm = *localtime(t); + localtime_r(t, &tm); return format_iso_time(&tm, 0, flags, buf, bufsz); }