mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-18 03:23:53 -04:00
tools/nolibc: prefer explicit 64-bit time-related system calls
Make sure to always use the 64-bit safe system calls in preparation for 64-bit time_t on 32-bit architectures. Also prevent issues on kernels which disable CONFIG_COMPAT_32BIT_TIME and therefore don't provide the 32-bit system calls anymore. 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-5-c662992f75d7@weissschuh.net
This commit is contained in:
@@ -23,15 +23,7 @@
|
||||
static __attribute__((unused))
|
||||
int sys_poll(struct pollfd *fds, int nfds, int timeout)
|
||||
{
|
||||
#if defined(__NR_ppoll)
|
||||
struct __kernel_old_timespec t;
|
||||
|
||||
if (timeout >= 0) {
|
||||
t.tv_sec = timeout / 1000;
|
||||
t.tv_nsec = (timeout % 1000) * 1000000;
|
||||
}
|
||||
return my_syscall5(__NR_ppoll, fds, nfds, (timeout >= 0) ? &t : NULL, NULL, 0);
|
||||
#else
|
||||
#if defined(__NR_ppoll_time64)
|
||||
struct __kernel_timespec t;
|
||||
|
||||
if (timeout >= 0) {
|
||||
@@ -39,6 +31,14 @@ int sys_poll(struct pollfd *fds, int nfds, int timeout)
|
||||
t.tv_nsec = (timeout % 1000) * 1000000;
|
||||
}
|
||||
return my_syscall5(__NR_ppoll_time64, fds, nfds, (timeout >= 0) ? &t : NULL, NULL, 0);
|
||||
#else
|
||||
struct __kernel_old_timespec t;
|
||||
|
||||
if (timeout >= 0) {
|
||||
t.tv_sec = timeout / 1000;
|
||||
t.tv_nsec = (timeout % 1000) * 1000000;
|
||||
}
|
||||
return my_syscall5(__NR_ppoll, fds, nfds, (timeout >= 0) ? &t : NULL, NULL, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -63,15 +63,7 @@ typedef struct {
|
||||
static __attribute__((unused))
|
||||
int sys_select(int nfds, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeval *timeout)
|
||||
{
|
||||
#if defined(__NR_pselect6)
|
||||
struct __kernel_old_timespec t;
|
||||
|
||||
if (timeout) {
|
||||
t.tv_sec = timeout->tv_sec;
|
||||
t.tv_nsec = timeout->tv_usec * 1000;
|
||||
}
|
||||
return my_syscall6(__NR_pselect6, nfds, rfds, wfds, efds, timeout ? &t : NULL, NULL);
|
||||
#else
|
||||
#if defined(__NR_pselect6_time64)
|
||||
struct __kernel_timespec t;
|
||||
|
||||
if (timeout) {
|
||||
@@ -79,6 +71,14 @@ int sys_select(int nfds, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeva
|
||||
t.tv_nsec = timeout->tv_usec * 1000;
|
||||
}
|
||||
return my_syscall6(__NR_pselect6_time64, nfds, rfds, wfds, efds, timeout ? &t : NULL, NULL);
|
||||
#else
|
||||
struct __kernel_old_timespec t;
|
||||
|
||||
if (timeout) {
|
||||
t.tv_sec = timeout->tv_sec;
|
||||
t.tv_nsec = timeout->tv_usec * 1000;
|
||||
}
|
||||
return my_syscall6(__NR_pselect6, nfds, rfds, wfds, efds, timeout ? &t : NULL, NULL);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -32,9 +32,7 @@ int timerfd_create(int clockid, int flags)
|
||||
static __attribute__((unused))
|
||||
int sys_timerfd_gettime(int fd, struct itimerspec *curr_value)
|
||||
{
|
||||
#if defined(__NR_timerfd_gettime)
|
||||
return my_syscall2(__NR_timerfd_gettime, fd, curr_value);
|
||||
#else
|
||||
#if defined(__NR_timerfd_gettime64)
|
||||
struct __kernel_itimerspec kcurr_value;
|
||||
int ret;
|
||||
|
||||
@@ -42,6 +40,8 @@ int sys_timerfd_gettime(int fd, struct itimerspec *curr_value)
|
||||
__nolibc_timespec_kernel_to_user(&kcurr_value.it_interval, &curr_value->it_interval);
|
||||
__nolibc_timespec_kernel_to_user(&kcurr_value.it_value, &curr_value->it_value);
|
||||
return ret;
|
||||
#else
|
||||
return my_syscall2(__NR_timerfd_gettime, fd, curr_value);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -56,9 +56,7 @@ static __attribute__((unused))
|
||||
int sys_timerfd_settime(int fd, int flags,
|
||||
const struct itimerspec *new_value, struct itimerspec *old_value)
|
||||
{
|
||||
#if defined(__NR_timerfd_settime)
|
||||
return my_syscall4(__NR_timerfd_settime, fd, flags, new_value, old_value);
|
||||
#else
|
||||
#if defined(__NR_timerfd_settime64)
|
||||
struct __kernel_itimerspec knew_value, kold_value;
|
||||
int ret;
|
||||
|
||||
@@ -70,6 +68,8 @@ int sys_timerfd_settime(int fd, int flags,
|
||||
__nolibc_timespec_kernel_to_user(&kold_value.it_value, &old_value->it_value);
|
||||
}
|
||||
return ret;
|
||||
#else
|
||||
return my_syscall4(__NR_timerfd_settime, fd, flags, new_value, old_value);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -43,9 +43,7 @@ void __nolibc_timespec_kernel_to_user(const struct __kernel_timespec *kts, struc
|
||||
static __attribute__((unused))
|
||||
int sys_clock_getres(clockid_t clockid, struct timespec *res)
|
||||
{
|
||||
#if defined(__NR_clock_getres)
|
||||
return my_syscall2(__NR_clock_getres, clockid, res);
|
||||
#else
|
||||
#if defined(__NR_clock_getres_time64)
|
||||
struct __kernel_timespec kres;
|
||||
int ret;
|
||||
|
||||
@@ -53,6 +51,8 @@ int sys_clock_getres(clockid_t clockid, struct timespec *res)
|
||||
if (res)
|
||||
__nolibc_timespec_kernel_to_user(&kres, res);
|
||||
return ret;
|
||||
#else
|
||||
return my_syscall2(__NR_clock_getres, clockid, res);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -65,9 +65,7 @@ int clock_getres(clockid_t clockid, struct timespec *res)
|
||||
static __attribute__((unused))
|
||||
int sys_clock_gettime(clockid_t clockid, struct timespec *tp)
|
||||
{
|
||||
#if defined(__NR_clock_gettime)
|
||||
return my_syscall2(__NR_clock_gettime, clockid, tp);
|
||||
#else
|
||||
#if defined(__NR_clock_gettime64)
|
||||
struct __kernel_timespec ktp;
|
||||
int ret;
|
||||
|
||||
@@ -75,6 +73,8 @@ int sys_clock_gettime(clockid_t clockid, struct timespec *tp)
|
||||
if (tp)
|
||||
__nolibc_timespec_kernel_to_user(&ktp, tp);
|
||||
return ret;
|
||||
#else
|
||||
return my_syscall2(__NR_clock_gettime, clockid, tp);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -87,13 +87,13 @@ int clock_gettime(clockid_t clockid, struct timespec *tp)
|
||||
static __attribute__((unused))
|
||||
int sys_clock_settime(clockid_t clockid, struct timespec *tp)
|
||||
{
|
||||
#if defined(__NR_clock_settime)
|
||||
return my_syscall2(__NR_clock_settime, clockid, tp);
|
||||
#else
|
||||
#if defined(__NR_clock_settime64)
|
||||
struct __kernel_timespec ktp;
|
||||
|
||||
__nolibc_timespec_user_to_kernel(tp, &ktp);
|
||||
return my_syscall2(__NR_clock_settime64, clockid, &ktp);
|
||||
#else
|
||||
return my_syscall2(__NR_clock_settime, clockid, tp);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -107,9 +107,7 @@ static __attribute__((unused))
|
||||
int sys_clock_nanosleep(clockid_t clockid, int flags, const struct timespec *rqtp,
|
||||
struct timespec *rmtp)
|
||||
{
|
||||
#if defined(__NR_clock_nanosleep)
|
||||
return my_syscall4(__NR_clock_nanosleep, clockid, flags, rqtp, rmtp);
|
||||
#else
|
||||
#if defined(__NR_clock_nanosleep_time64)
|
||||
struct __kernel_timespec krqtp, krmtp;
|
||||
int ret;
|
||||
|
||||
@@ -118,6 +116,8 @@ int sys_clock_nanosleep(clockid_t clockid, int flags, const struct timespec *rqt
|
||||
if (rmtp)
|
||||
__nolibc_timespec_kernel_to_user(&krmtp, rmtp);
|
||||
return ret;
|
||||
#else
|
||||
return my_syscall4(__NR_clock_nanosleep, clockid, flags, rqtp, rmtp);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -189,9 +189,7 @@ int timer_delete(timer_t timerid)
|
||||
static __attribute__((unused))
|
||||
int sys_timer_gettime(timer_t timerid, struct itimerspec *curr_value)
|
||||
{
|
||||
#if defined(__NR_timer_gettime)
|
||||
return my_syscall2(__NR_timer_gettime, timerid, curr_value);
|
||||
#else
|
||||
#if defined(__NR_timer_gettime64)
|
||||
struct __kernel_itimerspec kcurr_value;
|
||||
int ret;
|
||||
|
||||
@@ -199,6 +197,8 @@ int sys_timer_gettime(timer_t timerid, struct itimerspec *curr_value)
|
||||
__nolibc_timespec_kernel_to_user(&kcurr_value.it_interval, &curr_value->it_interval);
|
||||
__nolibc_timespec_kernel_to_user(&kcurr_value.it_value, &curr_value->it_value);
|
||||
return ret;
|
||||
#else
|
||||
return my_syscall2(__NR_timer_gettime, timerid, curr_value);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -212,9 +212,7 @@ static __attribute__((unused))
|
||||
int sys_timer_settime(timer_t timerid, int flags,
|
||||
const struct itimerspec *new_value, struct itimerspec *old_value)
|
||||
{
|
||||
#if defined(__NR_timer_settime)
|
||||
return my_syscall4(__NR_timer_settime, timerid, flags, new_value, old_value);
|
||||
#else
|
||||
#if defined(__NR_timer_settime64)
|
||||
struct __kernel_itimerspec knew_value, kold_value;
|
||||
int ret;
|
||||
|
||||
@@ -226,6 +224,8 @@ int sys_timer_settime(timer_t timerid, int flags,
|
||||
__nolibc_timespec_kernel_to_user(&kold_value.it_value, &old_value->it_value);
|
||||
}
|
||||
return ret;
|
||||
#else
|
||||
return my_syscall4(__NR_timer_settime, timerid, flags, new_value, old_value);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user