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

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


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

--- Comment #4 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  2b1cb372bfb9a9c32c2962c5ec252fc46d19255d (commit)

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

commit 2b1cb372bfb9a9c32c2962c5ec252fc46d19255d
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=385a56494cf43b1a11a43f6e8a1d4a65a4914b5f

commit 385a56494cf43b1a11a43f6e8a1d4a65a4914b5f
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=ba2b93cfb6e48a4dd023dde9aaf4f4995bdafc4f

commit ba2b93cfb6e48a4dd023dde9aaf4f4995bdafc4f
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=b4cf30651a76ec870dd03671629acd6604d18da8

commit b4cf30651a76ec870dd03671629acd6604d18da8
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=a6f68e5b57c5758ac1073da84edadc0c4f6cb15c

commit a6f68e5b57c5758ac1073da84edadc0c4f6cb15c
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=2baa0d960a822329e1d521aa4a9894a3a98ef801

commit 2baa0d960a822329e1d521aa4a9894a3a98ef801
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=0bae05528373150b0b7cdad19c6597c497e5b3f9

commit 0bae05528373150b0b7cdad19c6597c497e5b3f9
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=bda57eeb09b981fbab3ba851b9ec2ed81fb98931

commit bda57eeb09b981fbab3ba851b9ec2ed81fb98931
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=d470f58676709e974b86747de86609e134c8466b

commit d470f58676709e974b86747de86609e134c8466b
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=d088729f4c84596cd5ae69cae47233e387c55447

commit d088729f4c84596cd5ae69cae47233e387c55447
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=2ec20a063d1792c38a2a654b409865f9dbffc681

commit 2ec20a063d1792c38a2a654b409865f9dbffc681
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=6a5cfd5c4a109ce3fca8a73d3d96cd16b5f25e3a

commit 6a5cfd5c4a109ce3fca8a73d3d96cd16b5f25e3a
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=537fda1a54692bd4fb4ce12776455741b16cf9dd

commit 537fda1a54692bd4fb4ce12776455741b16cf9dd
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=3f58fb7b9f63d07968a3045f66f84cdf1cdab22a

commit 3f58fb7b9f63d07968a3045f66f84cdf1cdab22a
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=a250583ca75be30b873cf6890a96389b28b16963

commit a250583ca75be30b873cf6890a96389b28b16963
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=d5a50ed6f7aed78bb94a153dbdad206c7d01ecae

commit d5a50ed6f7aed78bb94a153dbdad206c7d01ecae
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=27a88a7f2a194f5447bb254122c068c1b1f1f797

commit 27a88a7f2a194f5447bb254122c068c1b1f1f797
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=57697fe24d403d5f412d892daaaa34799685a3d1

commit 57697fe24d403d5f412d892daaaa34799685a3d1
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=780819ed8fe74fca943b4085ec38ba28eba42e0f

commit 780819ed8fe74fca943b4085ec38ba28eba42e0f
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=1b3fe19eb693b5d6300db5a0013c5412df0652aa

commit 1b3fe19eb693b5d6300db5a0013c5412df0652aa
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=09399b659f3c20481fa7889d47b6937a75812f60

commit 09399b659f3c20481fa7889d47b6937a75812f60
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=10ac524b59cc2b0d1a0413cb485162d507a6fc68

commit 10ac524b59cc2b0d1a0413cb485162d507a6fc68
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=7d40c3b237570dbb657001b8ed2bbccede18d919

commit 7d40c3b237570dbb657001b8ed2bbccede18d919
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=23e64011e665f2586b3d1e007a63fffe5edba7dc

commit 23e64011e665f2586b3d1e007a63fffe5edba7dc
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=f87cca5ae9a4d4443077be7c924d5760017ec9c1

commit f87cca5ae9a4d4443077be7c924d5760017ec9c1
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=4e250264a3f050108abbf1e05d8fbe24d9e8244b

commit 4e250264a3f050108abbf1e05d8fbe24d9e8244b
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=16bf4a0d330f1ec45f11ecd5ea61404a03078875

commit 16bf4a0d330f1ec45f11ecd5ea61404a03078875
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=1f5cc6b559a2ef5c866d6e1b1bcfbab9e7be98cb

commit 1f5cc6b559a2ef5c866d6e1b1bcfbab9e7be98cb
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=67bd5d26bee6192de5d7158146666d2418e8c453

commit 67bd5d26bee6192de5d7158146666d2418e8c453
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=db9b0683cdd8fe289005011488932ae636553daf

commit db9b0683cdd8fe289005011488932ae636553daf
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=47545bd2f99f6dd0983df620c36fbc7010654619

commit 47545bd2f99f6dd0983df620c36fbc7010654619
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=8296e4cfbb3b32a8257a341a8a6ccebe76282e34

commit 8296e4cfbb3b32a8257a341a8a6ccebe76282e34
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=a1429e496abac872ce444422db144b1d1daa60eb

commit a1429e496abac872ce444422db144b1d1daa60eb
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=0ccb3efb715c404a6441df0080293f74c6b09636

commit 0ccb3efb715c404a6441df0080293f74c6b09636
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=469fb25cb04ccdf74a03ff52072f2e83ccf58863

commit 469fb25cb04ccdf74a03ff52072f2e83ccf58863
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=346c043e2f58c597911429cc518ac3e168c73659

commit 346c043e2f58c597911429cc518ac3e168c73659
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=d0a5a4ad85343aaa79d28469c09afca7287c6a3a

commit d0a5a4ad85343aaa79d28469c09afca7287c6a3a
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=77de6941a8b36cde5cc418e947e3828517107b7a

commit 77de6941a8b36cde5cc418e947e3828517107b7a
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=767ef1a437a43e92d7f1af643a222fcf38255e81

commit 767ef1a437a43e92d7f1af643a222fcf38255e81
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=45f745bd6755d19c989ac8976fb389b9f60f79ee

commit 45f745bd6755d19c989ac8976fb389b9f60f79ee
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=f55dcbe6fd62775da448e70dde4077500af6f77b

commit f55dcbe6fd62775da448e70dde4077500af6f77b
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=b3beddb670bb7f8b680266c6961b3fc5da154bf4

commit b3beddb670bb7f8b680266c6961b3fc5da154bf4
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=392594cf890f4d5b0831e3cbdada8177a0402b8c

commit 392594cf890f4d5b0831e3cbdada8177a0402b8c
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=8279d3e19ee9e1f4c0b62b7d6e858d768193b4a9

commit 8279d3e19ee9e1f4c0b62b7d6e858d768193b4a9
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=536d8cfd3dc47abba66f7a64d2c39f6ba3540ae8

commit 536d8cfd3dc47abba66f7a64d2c39f6ba3540ae8
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=536d8b60e45892ea43f1a6282977012bde490926

commit 536d8b60e45892ea43f1a6282977012bde490926
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=3fdc49fa2c5585888c683b5d724f4e3901cfd0f2

commit 3fdc49fa2c5585888c683b5d724f4e3901cfd0f2
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=968c26acc7ec98b4d54577a4e3e3bdb29eb8e7d7

commit 968c26acc7ec98b4d54577a4e3e3bdb29eb8e7d7
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=ace09db3d797930bcad2fe33c162fddfb8062e22

commit ace09db3d797930bcad2fe33c162fddfb8062e22
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=1ff442400ae87378b773593d39e5c8c99c09fed3

commit 1ff442400ae87378b773593d39e5c8c99c09fed3
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=6f1cd69475a4ff50bdbe77a3265a892a81c4b68c

commit 6f1cd69475a4ff50bdbe77a3265a892a81c4b68c
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=19b99883da7cb8e9397c4bec4387350f1218716d

commit 19b99883da7cb8e9397c4bec4387350f1218716d
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=1cf24b9a71be9dd184cc1e18283bebd016610e63

commit 1cf24b9a71be9dd184cc1e18283bebd016610e63
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=c38b85e42f29f0166ceb82e0b84f70b3005bb062

commit c38b85e42f29f0166ceb82e0b84f70b3005bb062
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=ca32c3f13c38f9fadaf426604ea32c00dc255e9b

commit ca32c3f13c38f9fadaf426604ea32c00dc255e9b
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=326841eb597beba02ce20aa4c9a1c7981ebb389b

commit 326841eb597beba02ce20aa4c9a1c7981ebb389b
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