diff mbox series

[v2] Futex_waitv: Convert 32bit timespec struct to 64bit version for 32bit compatibility mode

Message ID 20240209012657.10797-1-wegao@suse.com
State Accepted
Headers show
Series [v2] Futex_waitv: Convert 32bit timespec struct to 64bit version for 32bit compatibility mode | expand

Commit Message

Wei Gao Feb. 9, 2024, 1:26 a.m. UTC
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 | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

Comments

Andrea Cervesato Feb. 9, 2024, 9:08 a.m. UTC | #1
Hi!
LGTM

Reviewed-by: Andrea Cervesato <andrea.cervesato.suse.com>

On 2/9/24 02:26, Wei Gao via ltp wrote:
> 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 | 17 +++++++++++++++++
>   1 file changed, 17 insertions(+)
>
> diff --git a/testcases/kernel/syscalls/futex/futex2test.h b/testcases/kernel/syscalls/futex/futex2test.h
> index ce97f47c1..a3cd0ef5c 100644
> --- a/testcases/kernel/syscalls/futex/futex2test.h
> +++ b/testcases/kernel/syscalls/futex/futex2test.h
> @@ -12,6 +12,14 @@
>   #include <stdint.h>
>   #include "lapi/syscalls.h"
>   #include "futextest.h"
> +#include "lapi/abisize.h"
> +
> +#ifdef TST_ABI32
> +struct timespec64 {
> +	int64_t tv_sec;
> +	int64_t tv_nsec;
> +};
> +#endif
>   
>   /**
>    * futex_waitv - Wait at multiple futexes, wake on any
> @@ -24,7 +32,16 @@ static inline int futex_waitv(volatile struct futex_waitv *waiters,
>   			      unsigned long nr_waiters, unsigned long flags,
>   			      struct timespec *timo, clockid_t clockid)
>   {
> +#ifdef TST_ABI32
> +	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 */
Petr Vorel Feb. 9, 2024, 10:26 a.m. UTC | #2
Hi Wei, Andrea,

merged (with some Suggested-by: tags), thanks!

Kind regards,
Petr
diff mbox series

Patch

diff --git a/testcases/kernel/syscalls/futex/futex2test.h b/testcases/kernel/syscalls/futex/futex2test.h
index ce97f47c1..a3cd0ef5c 100644
--- a/testcases/kernel/syscalls/futex/futex2test.h
+++ b/testcases/kernel/syscalls/futex/futex2test.h
@@ -12,6 +12,14 @@ 
 #include <stdint.h>
 #include "lapi/syscalls.h"
 #include "futextest.h"
+#include "lapi/abisize.h"
+
+#ifdef TST_ABI32
+struct timespec64 {
+	int64_t tv_sec;
+	int64_t tv_nsec;
+};
+#endif
 
 /**
  * futex_waitv - Wait at multiple futexes, wake on any
@@ -24,7 +32,16 @@  static inline int futex_waitv(volatile struct futex_waitv *waiters,
 			      unsigned long nr_waiters, unsigned long flags,
 			      struct timespec *timo, clockid_t clockid)
 {
+#ifdef TST_ABI32
+	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 */