[LTP] [PATCH v1] Futex_waitv: Convert 32bit timespec struct to 64bit version for 32bit compatibility mode

Wei Gao wegao@suse.com
Mon Dec 4 00:51:17 CET 2023


Futex_waitv can not accept old_timespec32 struct, so userspace should
convert it from 32bit to 64bit before syscall in 32bit compatible mode.

Detail info you can refer following email thread:
https://lkml.org/lkml/2023/11/23/13

Signed-off-by: Wei Gao <wegao@suse.com>
---
 testcases/kernel/syscalls/futex/futex2test.h | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/testcases/kernel/syscalls/futex/futex2test.h b/testcases/kernel/syscalls/futex/futex2test.h
index ce97f47c1..f9a031e11 100644
--- a/testcases/kernel/syscalls/futex/futex2test.h
+++ b/testcases/kernel/syscalls/futex/futex2test.h
@@ -13,6 +13,13 @@
 #include "lapi/syscalls.h"
 #include "futextest.h"
 
+#if !defined(__LP64__)
+struct timespec64 {
+	int64_t tv_sec;
+	int64_t tv_nsec;
+};
+#endif
+
 /**
  * futex_waitv - Wait at multiple futexes, wake on any
  * @waiters:    Array of waiters
@@ -24,7 +31,16 @@ static inline int futex_waitv(volatile struct futex_waitv *waiters,
 			      unsigned long nr_waiters, unsigned long flags,
 			      struct timespec *timo, clockid_t clockid)
 {
+#if !defined(__LP64__)
+	struct timespec64 timo64 = {0};
+
+	timo64.tv_sec = timo->tv_sec;
+	timo64.tv_nsec = timo->tv_nsec;
+	return tst_syscall(__NR_futex_waitv, waiters, nr_waiters, flags, &timo64, clockid);
+#else
 	return tst_syscall(__NR_futex_waitv, waiters, nr_waiters, flags, timo, clockid);
+
+#endif
 }
 
 #endif /* _FUTEX2TEST_H */
-- 
2.35.3



More information about the ltp mailing list