.../testing/selftests/futex/include/futex2test.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+)
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.
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 >
© 2016 - 2025 Red Hat, Inc.