Futex_waitv can not accept old_timespec32 struct, so userspace should convert it from 32bit to 64bit before syscall in 32bit compatible mode.
This fix is based off [1]
Link: https://lore.kernel.org/all/20231203235117.29677-1-wegao@suse.com/ [1]
Signed-off-by: Wei Gao wegao@suse.com Signed-off-by: Terry Tritton terry.tritton@linaro.org --- .../testing/selftests/futex/include/futex2test.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+)
diff --git a/tools/testing/selftests/futex/include/futex2test.h b/tools/testing/selftests/futex/include/futex2test.h index ea79662405bc..6780e51eb2d6 100644 --- a/tools/testing/selftests/futex/include/futex2test.h +++ b/tools/testing/selftests/futex/include/futex2test.h @@ -55,6 +55,13 @@ struct futex32_numa { futex_t numa; };
+#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 @@ -65,7 +72,15 @@ struct futex32_numa { 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 syscall(__NR_futex_waitv, waiters, nr_waiters, flags, &timo64, clockid); +#else return syscall(__NR_futex_waitv, waiters, nr_waiters, flags, timo, clockid); +#endif }
/*
Sorry forgot to save the change log before sending. v2: fix Signed-off-by chain
On Tue, 1 Jul 2025 at 15:23, Terry Tritton terry.tritton@linaro.org wrote:
Futex_waitv can not accept old_timespec32 struct, so userspace should convert it from 32bit to 64bit before syscall in 32bit compatible mode.
This fix is based off [1]
Link: https://lore.kernel.org/all/20231203235117.29677-1-wegao@suse.com/ [1]
Signed-off-by: Wei Gao wegao@suse.com Signed-off-by: Terry Tritton terry.tritton@linaro.org
.../testing/selftests/futex/include/futex2test.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+)
diff --git a/tools/testing/selftests/futex/include/futex2test.h b/tools/testing/selftests/futex/include/futex2test.h index ea79662405bc..6780e51eb2d6 100644 --- a/tools/testing/selftests/futex/include/futex2test.h +++ b/tools/testing/selftests/futex/include/futex2test.h @@ -55,6 +55,13 @@ struct futex32_numa { futex_t numa; };
+#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
@@ -65,7 +72,15 @@ struct futex32_numa { 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 syscall(__NR_futex_waitv, waiters, nr_waiters, flags, &timo64, clockid);
+#else return syscall(__NR_futex_waitv, waiters, nr_waiters, flags, timo, clockid); +#endif }
/*
2.39.5
On Tue, Jul 01 2025 at 15:23, Terry Tritton wrote:
Futex_waitv can not accept old_timespec32 struct, so userspace should convert it from 32bit to 64bit before syscall in 32bit compatible mode.
This fix is based off [1]
Link: https://lore.kernel.org/all/20231203235117.29677-1-wegao@suse.com/ [1]
Signed-off-by: Wei Gao wegao@suse.com Signed-off-by: Terry Tritton terry.tritton@linaro.org
This is still wrong.
If it is based on someone else work, then you need to attribute it Originally-by and omit the Signed-off-by of the original author.
If you just picked it up and adopted it to a later kernel version then you need to add 'From: Original Author' and preserve his Signed-off-by.
If you collaborated with him, then you want to use Co-developed-by.
All of this is documented in Documentation/process/
Signed-off-by: Wei Gao wegao@suse.com Signed-off-by: Terry Tritton terry.tritton@linaro.org
This is still wrong.
If it is based on someone else work, then you need to attribute it Originally-by and omit the Signed-off-by of the original author.
If you just picked it up and adopted it to a later kernel version then you need to add 'From: Original Author' and preserve his Signed-off-by.
If you collaborated with him, then you want to use Co-developed-by.
All of this is documented in Documentation/process/
Ah sorry, I thought it was just the order that was wrong.
Thanks for pointing me in the right direction!
On Tue, Jul 01, 2025 at 10:34:28PM +0200, Thomas Gleixner wrote:
On Tue, Jul 01 2025 at 15:23, Terry Tritton wrote:
Futex_waitv can not accept old_timespec32 struct, so userspace should convert it from 32bit to 64bit before syscall in 32bit compatible mode.
This fix is based off [1]
Link: https://lore.kernel.org/all/20231203235117.29677-1-wegao@suse.com/ [1]
Signed-off-by: Wei Gao wegao@suse.com Signed-off-by: Terry Tritton terry.tritton@linaro.org
This is still wrong.
If it is based on someone else work, then you need to attribute it Originally-by and omit the Signed-off-by of the original author.
If you just picked it up and adopted it to a later kernel version then you need to add 'From: Original Author' and preserve his Signed-off-by.
@Terry @Thomas, Thank you both for the mention in the commit. I appreciate being included. I guess above options both good.
If you collaborated with him, then you want to use Co-developed-by.
All of this is documented in Documentation/process/
Signed-off-by: Wei Gao wegao@suse.com Signed-off-by: Terry Tritton terry.tritton@linaro.org
This is still wrong.
If it is based on someone else work, then you need to attribute it Originally-by and omit the Signed-off-by of the original author.
If you just picked it up and adopted it to a later kernel version then you need to add 'From: Original Author' and preserve his Signed-off-by.
@Terry @Thomas, Thank you both for the mention in the commit. I appreciate being included. I guess above options both good.
No problem! Not sure how often this situation comes up where an ltp patch is also needed in kselftest.
linux-kselftest-mirror@lists.linaro.org