diff options
author | Florian Weimer <fweimer@redhat.com> | 2020-06-30 21:19:43 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2020-06-30 21:20:20 +0200 |
commit | 5f40e4b1ba69a22923f6ec692d2d0f65733ccb0b (patch) | |
tree | 21fc421ffc9ac49465b9f2f9517880c8013f1792 /sysdeps/unix/sysv/linux/settimeofday.c | |
parent | 354b98cdfd78fc8ca0f6ed7b0e3aa8c311f1deba (diff) | |
download | glibc-5f40e4b1ba69a22923f6ec692d2d0f65733ccb0b.tar.gz glibc-5f40e4b1ba69a22923f6ec692d2d0f65733ccb0b.tar.xz glibc-5f40e4b1ba69a22923f6ec692d2d0f65733ccb0b.zip |
Linux: Fix UTC offset setting in settimeofday for __TIMESIZE != 64
The time argument is NULL in this case, and attempt to convert it leads to a null pointer dereference. This fixes commit d2e3b697da2433c08702f95c76458c51545c3df1 ("y2038: linux: Provide __settimeofday64 implementation"). Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Diffstat (limited to 'sysdeps/unix/sysv/linux/settimeofday.c')
-rw-r--r-- | sysdeps/unix/sysv/linux/settimeofday.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/sysdeps/unix/sysv/linux/settimeofday.c b/sysdeps/unix/sysv/linux/settimeofday.c index ea45f1d7cb..2bb589f8e2 100644 --- a/sysdeps/unix/sysv/linux/settimeofday.c +++ b/sysdeps/unix/sysv/linux/settimeofday.c @@ -25,6 +25,7 @@ int __settimeofday64 (const struct __timeval64 *tv, const struct timezone *tz) { + /* Backwards compatibility for setting the UTC offset. */ if (__glibc_unlikely (tz != 0)) { if (tv != 0) @@ -45,9 +46,13 @@ libc_hidden_def (__settimeofday64) int __settimeofday (const struct timeval *tv, const struct timezone *tz) { - struct __timeval64 tv64 = valid_timeval_to_timeval64 (*tv); - - return __settimeofday64 (&tv64, tz); + if (__glibc_unlikely (tv == NULL)) + return __settimeofday64 (NULL, tz); + else + { + struct __timeval64 tv64 = valid_timeval_to_timeval64 (*tv); + return __settimeofday64 (&tv64, tz); + } } #endif weak_alias (__settimeofday, settimeofday); |