[LTP] [PATCH v2] tst_clone: Fix child detection on sparc

Petr Vorel pvorel@suse.cz
Tue Sep 29 16:21:56 CEST 2026


Hi Anders,

> On sparc the clone syscall does not return 0 in the child. It returns
> the parent pid, so the child thinks it is the parent.

So, somebody still test sparc :). Before applying a workaround few questions.

I suppose this is because we did not updated our syscalls numbers.


I send a patch which regenerated syscall numbers to have clone3 on sparc (both
32 and 64 bit) v7.0:

$ include/lapi/syscalls/generate_arch.sh ../linux

Can you please verify it works with clone3()? It was added this year in v7.0 in
2153b2e8917b7 ("sparc: Add architecture support for clone3")

Do we care about the past?

Kind regards,
Petr

> Save the pid before the clone and compare it after.

> Signed-off-by: Anders Roxell <anders.roxell@linaro.org>
> ---
>  lib/tst_clone.c | 8 ++++++++
>  1 file changed, 8 insertions(+)

> diff --git a/lib/tst_clone.c b/lib/tst_clone.c
> index 296cd40ac0a0..d7f005a2d2a5 100644
> --- a/lib/tst_clone.c
> +++ b/lib/tst_clone.c
> @@ -20,6 +20,9 @@ pid_t tst_clone(const struct tst_clone_args *tst_args)
>  	};
>  	int flags;
>  	pid_t pid = -1;
> +#ifdef __sparc__
> +	pid_t parent_pid = tst_getpid();
> +#endif

>  	tst_flush();

> @@ -44,5 +47,10 @@ pid_t tst_clone(const struct tst_clone_args *tst_args)
>  	if (pid == -1)
>  		return -2;

> +#ifdef __sparc__
> +	if (pid == parent_pid)
> +		pid = 0;
> +#endif
> +
>  	return pid;
>  }


More information about the ltp mailing list