[Bug time/16346] mktime: potentially unsafe use of localtime_offset

cvs-commit at gcc dot gnu.org sourceware-bugzilla@sourceware.org
Wed Sep 19 07:01:00 GMT 2018


https://sourceware.org/bugzilla/show_bug.cgi?id=16346

--- Comment #6 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  ba659ec72f718877f1eba171a915390700a671ca (commit)

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=ba659ec72f718877f1eba171a915390700a671ca

commit ba659ec72f718877f1eba171a915390700a671ca
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=bc972dd99376fc9e377687879d8e765b5234b8ef

commit bc972dd99376fc9e377687879d8e765b5234b8ef
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=d17fb02292d039fe146aa1a8f6c6688e400d39a7

commit d17fb02292d039fe146aa1a8f6c6688e400d39a7
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=b9ca28cb866d63d9615546c0f4e4e12723f34bdf

commit b9ca28cb866d63d9615546c0f4e4e12723f34bdf
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=e21427e946dc5afd14526be97ce658a03ea3f28b

commit e21427e946dc5afd14526be97ce658a03ea3f28b
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=b912859c9d738e3febbf90c1039baf4bfdc004e0

commit b912859c9d738e3febbf90c1039baf4bfdc004e0
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=f617a2046be6f3e36683b9b017f23f4e6322f79b

commit f617a2046be6f3e36683b9b017f23f4e6322f79b
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=c09ea1f4fb42f7f321a6a5161ea5ffd25e87442c

commit c09ea1f4fb42f7f321a6a5161ea5ffd25e87442c
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=f884609b017a090c2a408ae20e1db02945027bfc

commit f884609b017a090c2a408ae20e1db02945027bfc
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=7f38781d7b31507bf47dcc978d01dc1adaa5074e

commit 7f38781d7b31507bf47dcc978d01dc1adaa5074e
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=0f71a09af06f2b2e6e191e68d51e33f6db8972c5

commit 0f71a09af06f2b2e6e191e68d51e33f6db8972c5
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=fe7dd08d4579dcc5e740ded8408c89896dcf1eb4

commit fe7dd08d4579dcc5e740ded8408c89896dcf1eb4
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=2dcb9d5d04cfa5d28bd161d9b43fd00b25a7c1a0

commit 2dcb9d5d04cfa5d28bd161d9b43fd00b25a7c1a0
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=bded5eba26a6676ec42c157e506e2900eb0eeaf7

commit bded5eba26a6676ec42c157e506e2900eb0eeaf7
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=76e33007403de935b76ed5b6a9b08ef46043d7b9

commit 76e33007403de935b76ed5b6a9b08ef46043d7b9
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=b7890b36253ef0c6451dc5d7b736f896c014ee56

commit b7890b36253ef0c6451dc5d7b736f896c014ee56
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=568b78bc445fabba0ede7bd697e3caf29d0a129a

commit 568b78bc445fabba0ede7bd697e3caf29d0a129a
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=3f0a203787dc8d9b58225fa03ea98a3a9df3cec0

commit 3f0a203787dc8d9b58225fa03ea98a3a9df3cec0
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=2f330470daf7474bbebdb772bb0b94fa75d46190

commit 2f330470daf7474bbebdb772bb0b94fa75d46190
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=a7358a6da06290fa5ecb14f550def8f903d40727

commit a7358a6da06290fa5ecb14f550def8f903d40727
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=1eae7390b7ee34209afea88675d4682365b6474f

commit 1eae7390b7ee34209afea88675d4682365b6474f
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=6ae9ecc5760933b2ef192fe29d24e390a50fd84c

commit 6ae9ecc5760933b2ef192fe29d24e390a50fd84c
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=cace9e9b1bed1d2ba7466a3e1924bd9403f971a8

commit cace9e9b1bed1d2ba7466a3e1924bd9403f971a8
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=4bb248ce10333f9bb60bfca3f4900c9d8f193562

commit 4bb248ce10333f9bb60bfca3f4900c9d8f193562
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=750bf4295a7f5ade7efde1148070a54b2815d525

commit 750bf4295a7f5ade7efde1148070a54b2815d525
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=383021e06243ca651752a61125797a6b3d96fd2e

commit 383021e06243ca651752a61125797a6b3d96fd2e
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=b6cd0dfaaa5205d121a168b1369d471fedc9433f

commit b6cd0dfaaa5205d121a168b1369d471fedc9433f
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=02d588032a77cd743721574cefe06f96b439c63b

commit 02d588032a77cd743721574cefe06f96b439c63b
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=36b4843ce848ae35336f380f92f0f60e1b91060f

commit 36b4843ce848ae35336f380f92f0f60e1b91060f
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=1f5ae9c818012bb1849b0ef94d2a1ac41fc38be7

commit 1f5ae9c818012bb1849b0ef94d2a1ac41fc38be7
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=d1cf97e62870e0ca21577798781e45062f097cfb

commit d1cf97e62870e0ca21577798781e45062f097cfb
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=c6becb881b89804e548c9b5e2830d08c3f3a4375

commit c6becb881b89804e548c9b5e2830d08c3f3a4375
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=1a5f5f30ddd69f401c5e659c31d7f7d47a866fb4

commit 1a5f5f30ddd69f401c5e659c31d7f7d47a866fb4
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=bf4a7462771255da945c36d68f5c40ccc7057785

commit bf4a7462771255da945c36d68f5c40ccc7057785
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=4505f6d1c95e1cb3649afcfd1d015798134bbee1

commit 4505f6d1c95e1cb3649afcfd1d015798134bbee1
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=fa97ffa38a36e6c31e463ce9e6c36b7ebd37c30a

commit fa97ffa38a36e6c31e463ce9e6c36b7ebd37c30a
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=2e80cbb644f66e348c3309b519094a960b464ead

commit 2e80cbb644f66e348c3309b519094a960b464ead
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=cf84bc1703bab79c213401abd06c96ec06c72bcf

commit cf84bc1703bab79c213401abd06c96ec06c72bcf
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=07ce7979d9388ba53f76623944334be0fe37dad3

commit 07ce7979d9388ba53f76623944334be0fe37dad3
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=1d89d5ad98b455af01f2c2b66844c01686c5355d

commit 1d89d5ad98b455af01f2c2b66844c01686c5355d
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=8d20a6120a8d18f47410c1c615ff6638a6bb0888

commit 8d20a6120a8d18f47410c1c615ff6638a6bb0888
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=5dad6e8e80369e9e6f23906bc5f73545c4495f60

commit 5dad6e8e80369e9e6f23906bc5f73545c4495f60
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=6f5b112888e7f059a8abbbd17357704ebc04a11b

commit 6f5b112888e7f059a8abbbd17357704ebc04a11b
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=ef94e7ccd20d1cae2bcd2e32e3042f29ce2fde00

commit ef94e7ccd20d1cae2bcd2e32e3042f29ce2fde00
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=7a91f10516da83d73468f4e3299f28bd681e7e46

commit 7a91f10516da83d73468f4e3299f28bd681e7e46
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=d990c69889cd6b616f50481a7dfd9c6f225599f9

commit d990c69889cd6b616f50481a7dfd9c6f225599f9
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=ca9375396c239f4712f28db0e45531f4680d34d8

commit ca9375396c239f4712f28db0e45531f4680d34d8
Author: Albert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Date:   Fri Sep 8 00:41:35 2017 +0200

    Y2038: add function __clock_settime64

    * include/time.h (__clock_settime64): Add.
    * sysdeps/unix/clock_settime.c (__clock_settime64): Add.
    * sysdeps/unix/sysv/linux/clock_settime.c (DO_CLOCK_SETTIME_32): Add.
    * sysdeps/unix/sysv/linux/clock_settime.c (DO_CLOCK_SETTIME_64): Add.
    * sysdeps/unix/sysv/linux/clock_settime.c (SYSDEP_SETTIME64_CPUTIME): Add.
    * sysdeps/unix/sysv/linux/clock_settime.c (SYSDEP_SETTIME64): Add.

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