[4/4] clock_settime/clock_gettime: Use __nonnull to avoid null pointer

Message ID 20220428122529.108208-5-nixiaoming@huawei.com
State Superseded
Delegated to: Siddhesh Poyarekar
Headers
Series time: Use __nonnull to avoid null pointer |

Checks

Context Check Description
dj/TryBot-apply_patch success Patch applied to master at the time it was sent
dj/TryBot-32bit fail Patch series failed to build

Commit Message

Xiaoming Ni April 28, 2022, 12:25 p.m. UTC
  clock_settime()
clock_settime64()
clock_gettime()
clock_gettime64()
Add __nonnull((2)) to avoid null pointer access.

Link: https://sourceware.org/bugzilla/show_bug.cgi?id=27662
Link: https://sourceware.org/bugzilla/show_bug.cgi?id=29084
Signed-off-by: Xiaoming Ni <nixiaoming@huawei.com>
---
 include/time.h | 4 ++--
 time/time.h    | 9 ++++++---
 2 files changed, 8 insertions(+), 5 deletions(-)
  

Comments

Siddhesh Poyarekar May 4, 2022, 11:02 a.m. UTC | #1
On 28/04/2022 17:55, Xiaoming Ni via Libc-alpha wrote:
> clock_settime()
> clock_settime64()
> clock_gettime()
> clock_gettime64()
> Add __nonnull((2)) to avoid null pointer access.
> 
> Link: https://sourceware.org/bugzilla/show_bug.cgi?id=27662
> Link: https://sourceware.org/bugzilla/show_bug.cgi?id=29084
> Signed-off-by: Xiaoming Ni <nixiaoming@huawei.com>
> ---
>   include/time.h | 4 ++--
>   time/time.h    | 9 ++++++---
>   2 files changed, 8 insertions(+), 5 deletions(-)
> 
> diff --git a/include/time.h b/include/time.h
> index 127347eb90..a64eff54f5 100644
> --- a/include/time.h
> +++ b/include/time.h
> @@ -166,7 +166,7 @@ libc_hidden_proto (__timegm64)
>   # define __clock_settime64 __clock_settime
>   #else
>   extern int __clock_settime64 (clockid_t clock_id,
> -                              const struct __timespec64 *tp);
> +                              const struct __timespec64 *tp) __nonnull((2));
>   libc_hidden_proto (__clock_settime64)
>   #endif
>   
> @@ -324,7 +324,7 @@ extern int __clock_nanosleep_time64 (clockid_t clock_id,
>                                        int flags, const struct __timespec64 *req,
>                                        struct __timespec64 *rem);
>   libc_hidden_proto (__clock_nanosleep_time64)
> -extern int __clock_gettime64 (clockid_t clock_id, struct __timespec64 *tp);
> +extern int __clock_gettime64 (clockid_t clock_id, struct __timespec64 *tp) __nonnull((2));
>   libc_hidden_proto (__clock_gettime64)
>   extern int __timespec_get64 (struct __timespec64 *ts, int base);
>   libc_hidden_proto (__timespec_get64)
> diff --git a/time/time.h b/time/time.h
> index 847ac3f8c0..26f276f147 100644
> --- a/time/time.h
> +++ b/time/time.h
> @@ -276,11 +276,12 @@ extern int nanosleep (const struct timespec *__requested_time,
>   extern int clock_getres (clockid_t __clock_id, struct timespec *__res) __THROW;
>   
>   /* Get current value of clock CLOCK_ID and store it in TP.  */
> -extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) __THROW;
> +extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp)
> +     __THROW __nonnull((2));
>   
>   /* Set clock CLOCK_ID to value TP.  */
>   extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp)
> -     __THROW;
> +     __THROW __nonnull((2));
>   # else
>   #  ifdef __REDIRECT
>   extern int __REDIRECT (nanosleep, (const struct timespec *__requested_time,
> @@ -291,8 +292,10 @@ extern int __REDIRECT_NTH (clock_getres, (clockid_t __clock_id,
>                              __clock_getres64);
>   extern int __REDIRECT_NTH (clock_gettime, (clockid_t __clock_id, struct
>                                              timespec *__tp), __clock_gettime64);

The semicolon at the end needs to go away.  This was also caught by 
patchwork trybot:

https://patchwork.sourceware.org/project/glibc/patch/20220428122529.108208-5-nixiaoming@huawei.com/
https://www.delorie.com/trybots/32bit/8846/make.tail.txt

> +                           __nonnull((2));
>   extern int __REDIRECT_NTH (clock_settime, (clockid_t __clock_id, const struct
> -                                           timespec *__tp), __clock_settime64);
> +                                           timespec *__tp), __clock_settime64)
> +                           __nonnull((2));
>   #  else
>   #   define nanosleep __nanosleep64
>   #   define clock_getres __clock_getres64
  
Xiaoming Ni May 5, 2022, 1:39 a.m. UTC | #2
On 2022/5/4 19:02, Siddhesh Poyarekar wrote:
> On 28/04/2022 17:55, Xiaoming Ni via Libc-alpha wrote:
>> clock_settime()
>> clock_settime64()
>> clock_gettime()
>> clock_gettime64()
>> Add __nonnull((2)) to avoid null pointer access.
>>
>> Link: https://sourceware.org/bugzilla/show_bug.cgi?id=27662
>> Link: https://sourceware.org/bugzilla/show_bug.cgi?id=29084
>> Signed-off-by: Xiaoming Ni <nixiaoming@huawei.com>
>> ---
>>   include/time.h | 4 ++--
>>   time/time.h    | 9 ++++++---
>>   2 files changed, 8 insertions(+), 5 deletions(-)
>>
>> diff --git a/include/time.h b/include/time.h
>> index 127347eb90..a64eff54f5 100644
>> --- a/include/time.h
>> +++ b/include/time.h
>> @@ -166,7 +166,7 @@ libc_hidden_proto (__timegm64)
>>   # define __clock_settime64 __clock_settime
>>   #else
>>   extern int __clock_settime64 (clockid_t clock_id,
>> -                              const struct __timespec64 *tp);
>> +                              const struct __timespec64 *tp) 
>> __nonnull((2));
>>   libc_hidden_proto (__clock_settime64)
>>   #endif
>> @@ -324,7 +324,7 @@ extern int __clock_nanosleep_time64 (clockid_t 
>> clock_id,
>>                                        int flags, const struct 
>> __timespec64 *req,
>>                                        struct __timespec64 *rem);
>>   libc_hidden_proto (__clock_nanosleep_time64)
>> -extern int __clock_gettime64 (clockid_t clock_id, struct __timespec64 
>> *tp);
>> +extern int __clock_gettime64 (clockid_t clock_id, struct __timespec64 
>> *tp) __nonnull((2));
>>   libc_hidden_proto (__clock_gettime64)
>>   extern int __timespec_get64 (struct __timespec64 *ts, int base);
>>   libc_hidden_proto (__timespec_get64)
>> diff --git a/time/time.h b/time/time.h
>> index 847ac3f8c0..26f276f147 100644
>> --- a/time/time.h
>> +++ b/time/time.h
>> @@ -276,11 +276,12 @@ extern int nanosleep (const struct timespec 
>> *__requested_time,
>>   extern int clock_getres (clockid_t __clock_id, struct timespec 
>> *__res) __THROW;
>>   /* Get current value of clock CLOCK_ID and store it in TP.  */
>> -extern int clock_gettime (clockid_t __clock_id, struct timespec 
>> *__tp) __THROW;
>> +extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp)
>> +     __THROW __nonnull((2));
>>   /* Set clock CLOCK_ID to value TP.  */
>>   extern int clock_settime (clockid_t __clock_id, const struct 
>> timespec *__tp)
>> -     __THROW;
>> +     __THROW __nonnull((2));
>>   # else
>>   #  ifdef __REDIRECT
>>   extern int __REDIRECT (nanosleep, (const struct timespec 
>> *__requested_time,
>> @@ -291,8 +292,10 @@ extern int __REDIRECT_NTH (clock_getres, 
>> (clockid_t __clock_id,
>>                              __clock_getres64);
>>   extern int __REDIRECT_NTH (clock_gettime, (clockid_t __clock_id, struct
>>                                              timespec *__tp), 
>> __clock_gettime64);
> 
> The semicolon at the end needs to go away.  This was also caught by 
> patchwork trybot:
> 
> https://patchwork.sourceware.org/project/glibc/patch/20220428122529.108208-5-nixiaoming@huawei.com/ 
> 
> https://www.delorie.com/trybots/32bit/8846/make.tail.txt
>
Thanks, I'll fix it later on v2.


>> +                           __nonnull((2));
>>   extern int __REDIRECT_NTH (clock_settime, (clockid_t __clock_id, 
>> const struct
>> -                                           timespec *__tp), 
>> __clock_settime64);
>> +                                           timespec *__tp), 
>> __clock_settime64)
>> +                           __nonnull((2));
>>   #  else
>>   #   define nanosleep __nanosleep64
>>   #   define clock_getres __clock_getres64
> 
> .
  

Patch

diff --git a/include/time.h b/include/time.h
index 127347eb90..a64eff54f5 100644
--- a/include/time.h
+++ b/include/time.h
@@ -166,7 +166,7 @@  libc_hidden_proto (__timegm64)
 # define __clock_settime64 __clock_settime
 #else
 extern int __clock_settime64 (clockid_t clock_id,
-                              const struct __timespec64 *tp);
+                              const struct __timespec64 *tp) __nonnull((2));
 libc_hidden_proto (__clock_settime64)
 #endif
 
@@ -324,7 +324,7 @@  extern int __clock_nanosleep_time64 (clockid_t clock_id,
                                      int flags, const struct __timespec64 *req,
                                      struct __timespec64 *rem);
 libc_hidden_proto (__clock_nanosleep_time64)
-extern int __clock_gettime64 (clockid_t clock_id, struct __timespec64 *tp);
+extern int __clock_gettime64 (clockid_t clock_id, struct __timespec64 *tp) __nonnull((2));
 libc_hidden_proto (__clock_gettime64)
 extern int __timespec_get64 (struct __timespec64 *ts, int base);
 libc_hidden_proto (__timespec_get64)
diff --git a/time/time.h b/time/time.h
index 847ac3f8c0..26f276f147 100644
--- a/time/time.h
+++ b/time/time.h
@@ -276,11 +276,12 @@  extern int nanosleep (const struct timespec *__requested_time,
 extern int clock_getres (clockid_t __clock_id, struct timespec *__res) __THROW;
 
 /* Get current value of clock CLOCK_ID and store it in TP.  */
-extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) __THROW;
+extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp)
+     __THROW __nonnull((2));
 
 /* Set clock CLOCK_ID to value TP.  */
 extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp)
-     __THROW;
+     __THROW __nonnull((2));
 # else
 #  ifdef __REDIRECT
 extern int __REDIRECT (nanosleep, (const struct timespec *__requested_time,
@@ -291,8 +292,10 @@  extern int __REDIRECT_NTH (clock_getres, (clockid_t __clock_id,
                            __clock_getres64);
 extern int __REDIRECT_NTH (clock_gettime, (clockid_t __clock_id, struct
                                            timespec *__tp), __clock_gettime64);
+                           __nonnull((2));
 extern int __REDIRECT_NTH (clock_settime, (clockid_t __clock_id, const struct
-                                           timespec *__tp), __clock_settime64);
+                                           timespec *__tp), __clock_settime64)
+                           __nonnull((2));
 #  else
 #   define nanosleep __nanosleep64
 #   define clock_getres __clock_getres64