Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

selftests/nolibc: add static assertions around time types handling

The nolibc system call wrappers expect the libc types to be compatible
to the kernel types.

Make sure these expectations hold at compile-time.

Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
Acked-by: Willy Tarreau <w@1wt.eu>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Link: https://patch.msgid.link/20251220-nolibc-uapi-types-v3-14-c662992f75d7@weissschuh.net

+22
+4
tools/include/nolibc/sys/timerfd.h
··· 33 33 int sys_timerfd_gettime(int fd, struct itimerspec *curr_value) 34 34 { 35 35 #if defined(__NR_timerfd_gettime64) 36 + __nolibc_assert_time64_type(curr_value->it_value.tv_sec); 36 37 return my_syscall2(__NR_timerfd_gettime64, fd, curr_value); 37 38 #else 39 + __nolibc_assert_native_time64(); 38 40 return my_syscall2(__NR_timerfd_gettime, fd, curr_value); 39 41 #endif 40 42 } ··· 53 51 const struct itimerspec *new_value, struct itimerspec *old_value) 54 52 { 55 53 #if defined(__NR_timerfd_settime64) 54 + __nolibc_assert_time64_type(new_value->it_value.tv_sec); 56 55 return my_syscall4(__NR_timerfd_settime64, fd, flags, new_value, old_value); 57 56 #else 57 + __nolibc_assert_native_time64(); 58 58 return my_syscall4(__NR_timerfd_settime, fd, flags, new_value, old_value); 59 59 #endif 60 60 }
+18
tools/include/nolibc/time.h
··· 18 18 #include <linux/signal.h> 19 19 #include <linux/time.h> 20 20 21 + #define __nolibc_assert_time64_type(t) \ 22 + __nolibc_static_assert(sizeof(t) == 8) 23 + 24 + #define __nolibc_assert_native_time64() \ 25 + __nolibc_assert_time64_type(__kernel_old_time_t) 26 + 21 27 /* 22 28 * int clock_getres(clockid_t clockid, struct timespec *res); 23 29 * int clock_gettime(clockid_t clockid, struct timespec *tp); ··· 36 30 int sys_clock_getres(clockid_t clockid, struct timespec *res) 37 31 { 38 32 #if defined(__NR_clock_getres_time64) 33 + __nolibc_assert_time64_type(res->tv_sec); 39 34 return my_syscall2(__NR_clock_getres_time64, clockid, res); 40 35 #else 36 + __nolibc_assert_native_time64(); 41 37 return my_syscall2(__NR_clock_getres, clockid, res); 42 38 #endif 43 39 } ··· 54 46 int sys_clock_gettime(clockid_t clockid, struct timespec *tp) 55 47 { 56 48 #if defined(__NR_clock_gettime64) 49 + __nolibc_assert_time64_type(tp->tv_sec); 57 50 return my_syscall2(__NR_clock_gettime64, clockid, tp); 58 51 #else 52 + __nolibc_assert_native_time64(); 59 53 return my_syscall2(__NR_clock_gettime, clockid, tp); 60 54 #endif 61 55 } ··· 72 62 int sys_clock_settime(clockid_t clockid, struct timespec *tp) 73 63 { 74 64 #if defined(__NR_clock_settime64) 65 + __nolibc_assert_time64_type(tp->tv_sec); 75 66 return my_syscall2(__NR_clock_settime64, clockid, tp); 76 67 #else 68 + __nolibc_assert_native_time64(); 77 69 return my_syscall2(__NR_clock_settime, clockid, tp); 78 70 #endif 79 71 } ··· 91 79 struct timespec *rmtp) 92 80 { 93 81 #if defined(__NR_clock_nanosleep_time64) 82 + __nolibc_assert_time64_type(rqtp->tv_sec); 94 83 return my_syscall4(__NR_clock_nanosleep_time64, clockid, flags, rqtp, rmtp); 95 84 #else 85 + __nolibc_assert_native_time64(); 96 86 return my_syscall4(__NR_clock_nanosleep, clockid, flags, rqtp, rmtp); 97 87 #endif 98 88 } ··· 168 154 int sys_timer_gettime(timer_t timerid, struct itimerspec *curr_value) 169 155 { 170 156 #if defined(__NR_timer_gettime64) 157 + __nolibc_assert_time64_type(curr_value->it_value.tv_sec); 171 158 return my_syscall2(__NR_timer_gettime64, timerid, curr_value); 172 159 #else 160 + __nolibc_assert_native_time64(); 173 161 return my_syscall2(__NR_timer_gettime, timerid, curr_value); 174 162 #endif 175 163 } ··· 187 171 const struct itimerspec *new_value, struct itimerspec *old_value) 188 172 { 189 173 #if defined(__NR_timer_settime64) 174 + __nolibc_assert_time64_type(new_value->it_value.tv_sec); 190 175 return my_syscall4(__NR_timer_settime64, timerid, flags, new_value, old_value); 191 176 #else 177 + __nolibc_assert_native_time64(); 192 178 return my_syscall4(__NR_timer_settime, timerid, flags, new_value, old_value); 193 179 #endif 194 180 }