[PATCH] Linux: Fix UTC offset setting in settimeofday for __TIMESIZE != 64

Florian Weimer fweimer@redhat.com
Tue Jun 30 17:39:18 GMT 2020


* Lukasz Majewski:

> Hi Florian,
>
> Thank you for the patch.
>
>> 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").
>> 
>> ---
>> Tested on i686-linux-gnu, but only with the glibc test suite.
>> 
>>  sysdeps/unix/sysv/linux/settimeofday.c | 22 ++++++++++++++++------
>>  1 file changed, 16 insertions(+), 6 deletions(-)
>> 
>> diff --git a/sysdeps/unix/sysv/linux/settimeofday.c
>> b/sysdeps/unix/sysv/linux/settimeofday.c index ea45f1d7cb..40529cdeec
>> 100644 --- a/sysdeps/unix/sysv/linux/settimeofday.c
>> +++ b/sysdeps/unix/sysv/linux/settimeofday.c
>> @@ -25,14 +25,14 @@
>>  int
>>  __settimeofday64 (const struct __timeval64 *tv, const struct
>> timezone *tz) {
>> +  /* The 64-bit interface does support setting the UTC offset.  */
>>    if (__glibc_unlikely (tz != 0))
>>      {
>>        if (tv != 0)
>> -	{
>> -	  __set_errno (EINVAL);
>> -	  return -1;
>> -	}
>> -      return __settimezone (tz);
>
> This code was took directly from the old settimeofday implementation.
> Please refer to SHA1: d2e3b697da2433c08702f95c76458c51545c3df1 [1]
>
> The reason that this check is in the __settimeofday64() is that for
> 32 bit systems, after enabling _TIME_BITS==64, we would use
> __settimeofday64() as a redirection to settimeofday().
>
> The __settimeofday64 is also used by 64 bit archs (as an alias to
> settimeofday).
>
> With your changes applied (below), the relevant check would be only
> done for 32 bit systems, and may break legacy setups (as indicated in
> [1]).

Right, I'm going to send an updated patch.

Thanks,
Florian



More information about the Libc-alpha mailing list