Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 17 Jun 2022 19:37:58 GMT
From:      Dmitry Chagin <dchagin@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: b2c247a0dba4 - stable/13 - linux(4): Change clone syscall definition to match Linux actual one.
Message-ID:  <202206171937.25HJbwb7014067@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/13 has been updated by dchagin:

URL: https://cgit.FreeBSD.org/src/commit/?id=b2c247a0dba4370943322f89334bda9e3835a0d1

commit b2c247a0dba4370943322f89334bda9e3835a0d1
Author:     Dmitry Chagin <dchagin@FreeBSD.org>
AuthorDate: 2021-08-12 08:46:36 +0000
Commit:     Dmitry Chagin <dchagin@FreeBSD.org>
CommitDate: 2022-06-17 19:33:29 +0000

    linux(4): Change clone syscall definition to match Linux actual one.
    
    Differential revision:  https://reviews.freebsd.org/D31473
    MFC after:              2 weeks
    
    (cherry picked from commit f1c450492f81cda4bddd46dc71ea4c92907567ac)
---
 sys/amd64/linux/syscalls.master   |  8 ++++----
 sys/amd64/linux32/syscalls.master | 10 +++++-----
 sys/arm/linux/syscalls.master     | 10 +++++-----
 sys/arm64/linux/syscalls.master   |  8 ++++----
 sys/compat/linux/linux_fork.c     | 10 +++++-----
 sys/i386/linux/syscalls.master    | 10 +++++-----
 6 files changed, 28 insertions(+), 28 deletions(-)

diff --git a/sys/amd64/linux/syscalls.master b/sys/amd64/linux/syscalls.master
index b9b88a036e61..cdf663ce2e06 100644
--- a/sys/amd64/linux/syscalls.master
+++ b/sys/amd64/linux/syscalls.master
@@ -422,10 +422,10 @@
 56	AUE_RFORK	STD {
 		int linux_clone(
 		    l_ulong flags,
-		    void *stack,
-		    void *parent_tidptr,
-		    void *child_tidptr,
-		    void *tls
+		    l_ulong stack,
+		    l_int *parent_tidptr,
+		    l_int *child_tidptr,
+		    l_ulong tls
 		);
 	}
 57	AUE_FORK	STD {
diff --git a/sys/amd64/linux32/syscalls.master b/sys/amd64/linux32/syscalls.master
index 60f227142f01..ff7ab7f98ca8 100644
--- a/sys/amd64/linux32/syscalls.master
+++ b/sys/amd64/linux32/syscalls.master
@@ -642,11 +642,11 @@
 	}
 120	AUE_RFORK	STD {
 		int linux_clone(
-		    l_int flags,
-		    void *stack,
-		    void *parent_tidptr,
-		    void *tls,
-		    void *child_tidptr
+		    l_ulong flags,
+		    l_ulong stack,
+		    l_int *parent_tidptr,
+		    l_ulong tls,
+		    l_int *child_tidptr
 		);
 	}
 121	AUE_SYSCTL	STD {
diff --git a/sys/arm/linux/syscalls.master b/sys/arm/linux/syscalls.master
index 46cf988c3dfe..3221aaa6bd6d 100644
--- a/sys/arm/linux/syscalls.master
+++ b/sys/arm/linux/syscalls.master
@@ -508,11 +508,11 @@
 	}
 120	AUE_RFORK	STD	{
 		int linux_clone(
-		    l_int flags,
-		    void *stack,
-		    void *parent_tidptr,
-		    void *tls,
-		    void * child_tidptr
+		    l_ulong flags,
+		    l_ulong stack,
+		    l_int *parent_tidptr,
+		    l_ulong tls,
+		    l_int *child_tidptr
 		);
 	}
 121	AUE_SYSCTL	STD	{
diff --git a/sys/arm64/linux/syscalls.master b/sys/arm64/linux/syscalls.master
index 7b4ebbb2c2e9..6e163cc3360d 100644
--- a/sys/arm64/linux/syscalls.master
+++ b/sys/arm64/linux/syscalls.master
@@ -1316,10 +1316,10 @@
 220	AUE_RFORK	STD	{
 		int linux_clone(
 		    l_ulong flags,
-		    void *stack,
-		    void *parent_tidptr,
-		    void *tls,
-		    void *child_tidptr
+		    l_ulong stack,
+		    l_int *parent_tidptr,
+		    l_ulong tls,
+		    l_int *child_tidptr
 		);
 	}
 221	AUE_EXECVE	STD	{
diff --git a/sys/compat/linux/linux_fork.c b/sys/compat/linux/linux_fork.c
index bc7704795127..955e9e512bd1 100644
--- a/sys/compat/linux/linux_fork.c
+++ b/sys/compat/linux/linux_fork.c
@@ -205,10 +205,10 @@ linux_clone_proc(struct thread *td, struct linux_clone_args *args)
 	 * stack. This is what normal fork() does, so we just keep tf_rsp arg
 	 * intact.
 	 */
-	linux_set_upcall(td2, PTROUT(args->stack));
+	linux_set_upcall(td2, args->stack);
 
 	if (args->flags & LINUX_CLONE_SETTLS)
-		linux_set_cloned_tls(td2, args->tls);
+		linux_set_cloned_tls(td2, PTRIN(args->tls));
 
 	/*
 	 * If CLONE_PARENT is set, then the parent of the new process will be
@@ -253,7 +253,7 @@ linux_clone_thread(struct thread *td, struct linux_clone_args *args)
 			return (EINVAL);
 
 	/* Threads should be created with own stack */
-	if (args->stack == NULL)
+	if (PTRIN(args->stack) == NULL)
 		return (EINVAL);
 
 	p = td->td_proc;
@@ -290,7 +290,7 @@ linux_clone_thread(struct thread *td, struct linux_clone_args *args)
 	KASSERT(em != NULL, ("clone_thread: emuldata not found.\n"));
 
 	if (args->flags & LINUX_CLONE_SETTLS)
-		linux_set_cloned_tls(newtd, args->tls);
+		linux_set_cloned_tls(newtd, PTRIN(args->tls));
 
 	if (args->flags & LINUX_CLONE_CHILD_SETTID)
 		em->child_set_tid = args->child_tidptr;
@@ -304,7 +304,7 @@ linux_clone_thread(struct thread *td, struct linux_clone_args *args)
 
 	cpu_thread_clean(newtd);
 
-	linux_set_upcall(newtd, PTROUT(args->stack));
+	linux_set_upcall(newtd, args->stack);
 
 	PROC_LOCK(p);
 	p->p_flag |= P_HADTHREADS;
diff --git a/sys/i386/linux/syscalls.master b/sys/i386/linux/syscalls.master
index 3a70c1352b44..aecb852e21c7 100644
--- a/sys/i386/linux/syscalls.master
+++ b/sys/i386/linux/syscalls.master
@@ -659,11 +659,11 @@
 	}
 120	AUE_RFORK	STD {
 		int linux_clone(
-		    l_int flags,
-		    void *stack,
-		    void *parent_tidptr,
-		    void *tls,
-		    void *child_tidptr
+		    l_ulong flags,
+		    l_ulong stack,
+		    l_int *parent_tidptr,
+		    l_ulong tls,
+		    l_int *child_tidptr
 		);
 	}
 121	AUE_SYSCTL	STD {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202206171937.25HJbwb7014067>