[Bug time/23603] mktime signed integer overflow on large timestamps
cvs-commit at gcc dot gnu.org
sourceware-bugzilla@sourceware.org
Wed Sep 19 06:16:00 GMT 2018
https://sourceware.org/bugzilla/show_bug.cgi?id=23603
--- Comment #7 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, aaribaud/y2038 has been created
at b10116da48f5b72cef0d72751c7cadff856a86b9 (commit)
- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=b10116da48f5b72cef0d72751c7cadff856a86b9
commit b10116da48f5b72cef0d72751c7cadff856a86b9
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Wed Sep 6 10:00:42 2017 +0200
Y2038: add _TIME_BITS support
This makes all previously defined Y2038-proof API types, functions and
implementations the default when _TIME_BITS==64 and __WORDSIZE==32 (so
that 64-bit architectures are unaffected).
Note: it is assumed that the API is consistent, i.e. for each API type
which is enabled here, all API functions which depend on this type are
enabled and mapped to Y2038-proof implementations.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=ddbad60fe88792cdf82fe01e46efea3f068f8df3
commit ddbad60fe88792cdf82fe01e46efea3f068f8df3
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Thu Apr 12 20:50:21 2018 +0200
Y2038: add function __pmap_rmtcall64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=05cab3152b4bc2b78d29a8e4932b0982d6f00040
commit 05cab3152b4bc2b78d29a8e4932b0982d6f00040
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Thu Apr 12 20:49:49 2018 +0200
Y2038: add function __clntudp_bufcreate64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=b05c28283427fa9ab5f7c02e414bfdef6bbb06fe
commit b05c28283427fa9ab5f7c02e414bfdef6bbb06fe
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Thu Apr 12 20:46:27 2018 +0200
Y2038: add function __clntudp_create64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=6c73691ea6b0fbfe8e566b7628761312b4f7c314
commit 6c73691ea6b0fbfe8e566b7628761312b4f7c314
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 19:49:07 2017 +0200
Y2038: add function select64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=b4f17a3b62b024a325e7a7c8abfbbd4606d1c08a
commit b4f17a3b62b024a325e7a7c8abfbbd4606d1c08a
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:42:16 2017 +0200
Y2038: add function pselect64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=a0a49b6f1b34b09580986858d0f6b360b04c24b8
commit a0a49b6f1b34b09580986858d0f6b360b04c24b8
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:42:15 2017 +0200
Y2038: add struct __timex64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=677f36959d78ad54b40268a14e35cffdc51c9963
commit 677f36959d78ad54b40268a14e35cffdc51c9963
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:42:14 2017 +0200
Y2038: add function __ntp_gettimex64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=07c7e0e3b0db2156adf6e8e026c4e40095209da5
commit 07c7e0e3b0db2156adf6e8e026c4e40095209da5
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:42:13 2017 +0200
Y2038: add function __ntp_gettime64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=8b8afa1e91307106691f4c368e6afb287d4dc371
commit 8b8afa1e91307106691f4c368e6afb287d4dc371
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:42:12 2017 +0200
Y2038: add struct __ntp_timeval64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=46f7c0fab60d66a93904f4f1e1943ff9aeb68231
commit 46f7c0fab60d66a93904f4f1e1943ff9aeb68231
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:42:11 2017 +0200
Y2038: add function __getrusage64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=9b52134def746237d56f12e7a32f776411095645
commit 9b52134def746237d56f12e7a32f776411095645
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:42:10 2017 +0200
Y2038: add functions using futexes
This creates 64-bit time versions of the following APIs:
- pthread_rwlock_timedrdlock
- pthread_rwlock_timedwrlock
- pthread_mutex_timedlock
- pthread_cond_timedwait
- sem_timedwait
- aio_suspend
It also creates 64-bit time versions of the following
functions or macros:
- lll_timedlock_elision
- lll_timedlock
- __lll_timedlock_wait
- futex_reltimed_wait_cancelable
- lll_futex_timed_wait
- __pthread_cond_wait_common
- futex_abstimed_wait_cancelable
- lll_futex_timed_wait_bitset
- do_aio_misc_wait
- AIO_MISC_WAIT
- __new_sem_wait_slow
- do_futex_wait
- __pthread_rwlock_wrlock_full
- __pthread_rwlock_rdlock_full
- futex_abstimed_wait
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=8e5273a6118eb90b884973d6c623e3b704ddd0de
commit 8e5273a6118eb90b884973d6c623e3b704ddd0de
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:42:09 2017 +0200
Y2038: add function __setitimer64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=addbeb0646ec6a08a95a158b07dcdd3e4da9509a
commit addbeb0646ec6a08a95a158b07dcdd3e4da9509a
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:42:08 2017 +0200
Y2038: add function __getitimer64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=d916d5a90ca1bcc7e75199464e52c38354672574
commit d916d5a90ca1bcc7e75199464e52c38354672574
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:42:07 2017 +0200
Y2038: add struct __itimerval64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=3e9a9c1f1cde7f1f84b84c9e7cc39553d44fa110
commit 3e9a9c1f1cde7f1f84b84c9e7cc39553d44fa110
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:42:06 2017 +0200
Y2038: add function __utime64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=34c69265ed6dafdbff9c65dbe50a300912e838e5
commit 34c69265ed6dafdbff9c65dbe50a300912e838e5
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:42:05 2017 +0200
Y2038: add function __adjtime64, __adjtimex64 and __ntp_adjtime64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=ade202bad65bceeca0dab706a2c07b91b4846549
commit ade202bad65bceeca0dab706a2c07b91b4846549
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:42:04 2017 +0200
Y2038: add function __nanosleep64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=88f887d1c7b502e96f860e7fa4350bd240dbccdc
commit 88f887d1c7b502e96f860e7fa4350bd240dbccdc
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:42:03 2017 +0200
Y2038: add function __sched_rr_get_interval64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=39f9a256c69d7c26b7b2f4c2ca9fc37e04a240f0
commit 39f9a256c69d7c26b7b2f4c2ca9fc37e04a240f0
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:42:02 2017 +0200
Y2038: add function __msgctl64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=8f98f45a154afcd9765e7665608d227b15f31155
commit 8f98f45a154afcd9765e7665608d227b15f31155
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:42:01 2017 +0200
Y2038: add function __mq_timedsend_time64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=0ba0ed6bb4ece988f6d9a9e7b3616d6341b17c2d
commit 0ba0ed6bb4ece988f6d9a9e7b3616d6341b17c2d
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:42:00 2017 +0200
Y2038: add function __mq_timedreceiv_time64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=374a9d3195e8384a7b10a03291223bbc57006396
commit 374a9d3195e8384a7b10a03291223bbc57006396
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:41:57 2017 +0200
Y2038: add function __utimes64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=3925bd96d32465c80601a24fb6e69a443e57f56f
commit 3925bd96d32465c80601a24fb6e69a443e57f56f
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:41:56 2017 +0200
Y2038: add function __stime64
This implementation uses __settimeofday64.
Therefore, on a system where current time-of-day is 32 bits, this
implementation will fail for dates beyond Y2038.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=daebe06f5fe9dc84d3956bc36f1bbd027d0f9bf3
commit daebe06f5fe9dc84d3956bc36f1bbd027d0f9bf3
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:41:55 2017 +0200
Y2038: add function __time64
This provides a generic Posix implementation based on calling
__gettimeofday64().
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=1941dcd9d684bbb709b6b3133d62bcc886c20600
commit 1941dcd9d684bbb709b6b3133d62bcc886c20600
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:41:59 2017 +0200
Y2038: add function __settimeofday64
Implementing a 64-bit settimeofday requires adding a new
file to build under time/ and we cannot name that new file
'settimeofday.c' or it will break the 32-bit settimeofday
file symbol, so we call it 'settimeofday64.c'.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=3883c392924167ebb1e0fba3bd8c523ec165dc98
commit 3883c392924167ebb1e0fba3bd8c523ec165dc98
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:41:58 2017 +0200
Y2038: add function __gettimeofday64
Implementing a 64-bit settimeofday requires adding a new
file to build under time/ and we cannot name that new file
'settimeofday.c' or it will break the 32-bit settimeofday
symbol, so we call it 'settimeofday64.c'.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=32f468c93e11b1c1f17861f85177b4490ab4038a
commit 32f468c93e11b1c1f17861f85177b4490ab4038a
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:41:54 2017 +0200
Y2038: add function __fstatat64_time64 (and __fxstatat_time64)
These implementations just use the existing syscalls and convert from
kernel 32-bit-time struct stat64 to GLIBC Y2038-ready struct __stat64_t64.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=5190bbc2eeea123a97cb174a87634e45dd2c490d
commit 5190bbc2eeea123a97cb174a87634e45dd2c490d
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:41:53 2017 +0200
Y2038: add function __lstat64_time64 (and __lxstat64_time64)
These implementations just use the existing syscalls and convert from
kernel 32-bit-time struct stat64 to GLIBC Y2038-ready struct __stat64_t64.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=686066fd9636bf727a2e0a81b3c2b161c2dc4cba
commit 686066fd9636bf727a2e0a81b3c2b161c2dc4cba
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:41:52 2017 +0200
Y2038: add function __stat64_time64 (and __xstat64_time64)
These implementations just use the existing syscalls and convert from
kernel 32-bit-time struct stat64 to GLIBC Y2038-ready struct __stat64_t64.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=2bd3a9f6eedf692f3f67051a4f26023484adae0c
commit 2bd3a9f6eedf692f3f67051a4f26023484adae0c
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:41:51 2017 +0200
Y2038: add function __fstat64_time64 (and __fxstat64_time64)
These implementations just use the existing syscalls and convert from
kernel 32-bit-time struct stat64 to GLIBC Y2038-ready struct __stat64_t64.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=20d2385b5516c40f3e5c2c88cf7f045bf01b95f9
commit 20d2385b5516c40f3e5c2c88cf7f045bf01b95f9
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:41:50 2017 +0200
Y2038: add struct __stat64_t64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=498a28bf8af20e9a36fdfa9063cf9f96c5921060
commit 498a28bf8af20e9a36fdfa9063cf9f96c5921060
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:41:49 2017 +0200
Y2038: add function __timerfd_settime64
For Linux this uses the 32-bit time syscal, so it converts
syscall input from 64-bit time into 32-bit time and syscall
output from 32-bit time to 64-bit time.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=d2e99c63bd8b0ac006c2d83a19cb6229bcdae946
commit d2e99c63bd8b0ac006c2d83a19cb6229bcdae946
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:41:48 2017 +0200
Y2038: add function __timerfd_gettime64
For Linux this uses the 32-bit time syscall so it converts the
syscall output from 32-bit time to 64-bit time.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=edc1f283aed1fec7a4b4947f1c4f7215576b8634
commit edc1f283aed1fec7a4b4947f1c4f7215576b8634
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:41:47 2017 +0200
Y2038: add function __timer_settime64
For Linux this uses a 32-bit syscall, so it converts the syscall
input from 64-bit time into 32-bit time, and the syscall output
from 32-bit time into 64-bit time.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=02cd42999d8b82d327df30e1632e11989b1c032b
commit 02cd42999d8b82d327df30e1632e11989b1c032b
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:41:46 2017 +0200
Y2038: add function __timer_gettime64
For Linux this uses the 32-bit time syscall, so it
converts the syscall output into 64-bit time.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=e4cbf26da755cef754e49d11421aa930afafae9e
commit e4cbf26da755cef754e49d11421aa930afafae9e
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:41:45 2017 +0200
Y2038: add struct __itimerspec64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=be227511937a2181586d5aa2ccbf56088ff293de
commit be227511937a2181586d5aa2ccbf56088ff293de
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:41:44 2017 +0200
Y2038: add function __lutimes64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=24e338ea653c5760deed3e8c9df2feee99ef9545
commit 24e338ea653c5760deed3e8c9df2feee99ef9545
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:41:43 2017 +0200
Y2038: add function __futimes64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=7f24111af2235dac86ef870b2c98a528a6f04f35
commit 7f24111af2235dac86ef870b2c98a528a6f04f35
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:41:42 2017 +0200
Y2038: add struct __timeval64
Also, provide static inline functions and macros for checking
and converting between 32-bit and 64-bit timevals.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=047f56fff9371d02d1d9ee1a5fd2649da49384a7
commit 047f56fff9371d02d1d9ee1a5fd2649da49384a7
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:41:41 2017 +0200
Y2038: add function __sigtimedwait_time64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=7d2f76fed867af54c52a1c7eda191912f540567a
commit 7d2f76fed867af54c52a1c7eda191912f540567a
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:41:39 2017 +0200
Y2038: add function __futimens64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=17ed3482f3e069235c73e96fa9e1be8fee516f82
commit 17ed3482f3e069235c73e96fa9e1be8fee516f82
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:41:40 2017 +0200
Y2038: add function __utimensat_time64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=68978851ddf262cee1dcdeb6366e53ea60160d47
commit 68978851ddf262cee1dcdeb6366e53ea60160d47
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:41:38 2017 +0200
Y2038: add function __timespec_get64
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=3f9a2c6c37b0d5705a16e603dd219a21a999fe8f
commit 3f9a2c6c37b0d5705a16e603dd219a21a999fe8f
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:41:37 2017 +0200
Y2038: add function __clock_nanosleep64
Linux does not provide a 64-bit-time clock_nanosleep syscall,
so __clock_nanosleep64 is a wrapper calling __clock_nanosleep,
with one conversion before the call and possibly one after.
Note:
There is no point in implementing __clock_nanosleep64 directly
around the 32-bit-time syscall and making __clock_nanosleep a
wrapper around __clock_nanosleep64, because __clock_nanosleep64
would still need one or two conversions, and __clock_nanosleep
would now also need those, adding a cost of 2 to 4 conversions
in the worst case.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=41a912301b1a9edd66e77ed5544dbbc29fc38382
commit 41a912301b1a9edd66e77ed5544dbbc29fc38382
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:41:36 2017 +0200
Y2038: add function __clock_getres_time64
The Unix implementation uses 32-bit calls and converts to
64-bit time.
The Linux implementation uses the 64-bit time syscall if
available, otherwise it falls back to 32-bit syscall and
conversion.
This implementation depends on the clock_getres_time64
syscall being provided by the kernel at build as well
as run time.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=3f8a78224d0fb7d89f7c50e025fadb9910627dc9
commit 3f8a78224d0fb7d89f7c50e025fadb9910627dc9
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:41:35 2017 +0200
Y2038: add function __clock_settime64
The Unix implementation converts to 32-bit time and uses
32-bit calls if possible, or returns -1 / EOVERFLOW.
The Linux implementation uses the 64-bit time syscall if
available, otherwise it falls back to 32-bit syscall and
conversion.
This implementation depends on the clock_settime64 syscall
being provided in the kernel at build as well as run time.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=9d08f1f86c85e547cbd5db8dcfe7b571bd66f640
commit 9d08f1f86c85e547cbd5db8dcfe7b571bd66f640
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Sun Apr 8 11:15:24 2018 +0200
Y2038: add function __clock_gettime64
* include/time.h: Declare __clock_gettime64().
* ntpl/pthread_clock_gettime.c: Add __pthread_clock_gettime64().
* ntpl/pthread_clock_gettime.c: Make __pthread_clock_gettime()
a wrapper around __pthread_clock_gettime64().
* sysdeps/unix/clock_gettime.c (hp_timing_gettime): Use struct
__timespec64.
* sysdeps/unix/clock_gettime.c (realtime_gettime): Likewise.
* sysdeps/unix/clock_gettime.c: Add __clock_gettime64().
* sysdeps/unix/clock_gettime.c: Make __clock_gettime() a
wrapper around __clock_gettime64().
* sysdeps/unix/sysv/linux/clock_gettime.c: Add 64-bit-time syscall
support.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=321328d751e0797d49656904813427e00377f30b
commit 321328d751e0797d49656904813427e00377f30b
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Fri Sep 8 00:41:33 2017 +0200
Y2038: add struct __timespec64
To be Y2038-proof, struct __timespec64 needs its tv_sec field to
be a __time64_t rather than a __time_t. However, the question is
which type should the tv_nsec field be.
Keeping tv_nsec a long (32-bit) would be compatible with Posix
requirements but would result in the GLIBC struct timespec being
binary-incompatible with the Linux 64-bit struct timespec, which
contains a 64-bit, not 32-bit, signed tv_nsec field.
In order to maintain Posix compatibility yet simplify conversion
between Posix and Linux struct timespec values, the Y2038-proof
struct time stores its tv_nsec field as a 32-bit signed integer
plus a padding which can serve as a 64-bit sign extension. This
both meets Posix requirements and makes the GLIBC and Linux
struct timespec binary compatible.
Note that in the API (which is not modified here, and will be
later alongside all Y2038-sensitive APIs), this padding is made
'invisible' by defining it as an anonymous bitfield, whereas
the struct __timespec64 introduced here has a named field for
the padding, allowing implementations to read and write it.
Also, provide static inline functions and macros for checking
and converting between 32-bit itimevals and timespecs to 64-bit
timespecs.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=33098a3d802138bc117ecc76d7e8920550d4f7fe
commit 33098a3d802138bc117ecc76d7e8920550d4f7fe
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Sun Jun 10 10:47:12 2018 +0200
Y2038: provide kernel support indication
* New function __y2038_get_kernel_support() returns:
* 0 if the underlying kernel does not support Y2038 at all
* > 0 if the underlying kernel has some support for Y2038
* < 0 if the underlying kernel support for Y2038 is broken
* New function __y2038_set_kernel_support() allows indicating
a kernel's Y2038 support (or support failure)
* Default implementation (covering non-Linux kernels) always
returns 0 (no support).
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=f03fd63f9b4dca5b9c70cc2518e3eeaa20529ec0
commit f03fd63f9b4dca5b9c70cc2518e3eeaa20529ec0
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Wed Mar 29 11:57:53 2017 +0200
Y2038: add function __difftime64
* __difftime: provide a 64-bit-time version (but do not assume
__time64_t is a signed int so that Gnulib can reuse the code)
and make the 32-bit version a wrapper of it.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=680ed897cdb1095aa035f30e08467f77ea1d3594
commit 680ed897cdb1095aa035f30e08467f77ea1d3594
Author: Paul Eggert <eggert@cs.ucla.edu>
Date: Fri Aug 31 23:45:31 2018 -0700
Add support for __time64_t to mktime, timegm
* include/time.h, time/mktime.c, time/timegm.c:
Change externally-visible names to their __xxx64yyy version.
* include/time.h (fits_in_time_t): New static function.
* time/mktime.c (mktime) [_LIBC]: New wrapper function.
* time/timegm.c (timegm) [_LIBC]: New wrapper function.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=32bc55ef9a4cff8c7a8c0825421fd332d570b198
commit 32bc55ef9a4cff8c7a8c0825421fd332d570b198
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Mon Jun 18 21:14:43 2018 +0200
Y2038: make __tz_convert compatible with 64-bit-time
* __tz_compute: Pass timer as a __time64_t rather than time_t.
* __offtime: Pass __timer as a __time64_t value rather than
a const time_t pointer.
* __tz_convert: Likewise.
* localtime: provide a 64-bit time version and make the 32-bit
time version a wrapper of it.
* localtime_r: Likewise.
* ctime: Likewise.
* ctime_r: Likewise.
* gmtime: Likewise.
* gmtime_r: Likewise.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=1575bcfed3b040afb0284b4c4254e0f506da4746
commit 1575bcfed3b040afb0284b4c4254e0f506da4746
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date: Mon Jun 18 21:14:42 2018 +0200
Y2038: Add 64-bit time for all architectures
* Add macro __TIMESIZE equal to the bit size of time_t.
It equals the architecture __WORDSIZE except for x32
where it equals 64.
* Add type __time64_t which is always 64-bit. On 64-bit
architectures and on x32, it is #defined as time_t.
On other architectures, it has its own definition.
* Replace all occurrences of internal_time_t with
__time64_t.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=63aaf075fff33777b3e3013a5bd90d140f073a8b
commit 63aaf075fff33777b3e3013a5bd90d140f073a8b
Author: Paul Eggert <eggert@cs.ucla.edu>
Date: Sun Sep 9 09:06:25 2018 -0700
Fix mktime localtime offset confusion
[BZ #23603]
* include/time.h (__mktime_internal): The localtime offset is now
of type long int instead of time_t. This is the longstanding type
in glibc, and it is more than enough to represent difference
between localtime and gmtime even if it is 32 bits and time_t is
64. Changing it now will let us avoid an unnecessary change when
time_t is widened to 64 bits on 32-bit platforms.
* time/mktime-internal.h (mktime_offset_t): Now long int.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=519466d3616c5af128997c96d02c112b8b47b16b
commit 519466d3616c5af128997c96d02c112b8b47b16b
Author: Paul Eggert <eggert@cs.ucla.edu>
Date: Sun Sep 9 09:06:24 2018 -0700
Merge mktime, timegm from upstream Gnulib
[BZ #23603][BZ #16346]
This fixes some obscure problems with integer overflow.
Although it looks scary, it is almost all a byte-for-byte copy
from Gnulib, and the Gnulib code has been tested reasonably well.
* include/intprops.h: New file, copied from Gnulib.
* include/verify.h, time/mktime-internal.h:
New tiny files, simplified from Gnulib.
* time/mktime.c: Copy from Gnulib. This has the following changes:
Do not include config.h if DEBUG_MKTIME is nonzero.
Include stdbool.h, intprops.h, verify.h.
Include string.h only if needed.
Include stdlib.h on MS-Windows.
Include mktime-internal.h.
(DEBUG_MKTIME): Default to 0, and simplify later uses.
(NEED_MKTIME_INTERNAL, NEED_MKTIME_WINDOWS)
(NEED_MKTIME_WORKING): Give default values to pacify -Wundef,
which glibc uses. Default NEED_MKTIME_WORKING to DEBUG_MKTIME, to
simplify later conditionals; default the others to zero. Use
these conditionals to express only the code needed on the current
platform. In uses of these conditionals, explicitly spell out how
_LIBC affects things, so it’s easier to review from a glibc
viewpoint.
(WRAPV): Remove; no longer needed now that we have
systematic overflow checking.
(my_tzset, __tzset) [!_LIBC]: New function and macro, to better
compartmentalize tzset issues. Move system-dependent tzsettish
code here from mktime.
(verify): Remove; now done by verify.h. All uses changed.
(long_int): Use a more-conservative definition, to avoid
integer overflow.
(SHR): Remove, replacing with ...
(shr): New function, which means we needn’t worry about side
effects in args, and conversion analysis is simpler.
(TYPE_IS_INTEGER, TYPE_TWOS_COMPLEMENT, TYPE_SIGNED, TYPE_MINIMUM)
(TYPE_MAXIMUM, TIME_T_MIN, TIME_T_MAX, TIME_T_MIDPOINT)
(time_t_avg, time_t_add_ok): Remove.
(mktime_min, mktime_max): New constants.
(leapyear, isdst_differ): Use bool for booleans.
(ydhms_diff, guess_time_tm, ranged_convert, __mktime_internal):
Use long_int, not time_t, for mktime differences.
(long_int_avg): New function, replacing time_t_avg.
INT_ADD_WRAPV replaces time_t_add_ok.
(guess_time_tm): 6th arg is now long_int, not time_t const *.
All uses changed.
(convert_time): New function.
(ranged_convert): Use it.
(__mktime_internal): Last arg now points to mktime_offset_t, not
time_t. All uses changed. This is a no-op on glibc, where
mktime_offset_t is always time_t. Use int, not time_t, for UTC
offset guess. Directly check for integer overflow instead of
using a heuristic that works only 99.9...% of the time.
Access *OFFSET only once, to avoid an unlikely race if the
compiler delays a load and if this cascades into a signed integer
overflow.
(mktime): Move tzsettish code to my_tzset, and move
localtime_offset to within mktime so that it doesn’t
need a separate ifdef.
(main) [DEBUG_MKTIME]: Speed up by using localtime_r
instead of localtime.
* time/timegm.c: Copy from Gnulib. This has the following changes:
Include mktime-internal.h.
[!_LIBC]: Include config.h and time.h. Do not include
timegm.h or time_r.h. Make __mktime_internal a macro,
and include mktime-internal.h to get its declaration.
(timegm): Temporary is now mktime_offset_t, not time_t.
This affects only Gnulib.
-----------------------------------------------------------------------
--
You are receiving this mail because:
You are on the CC list for the bug.
More information about the Glibc-bugs
mailing list