Skip to content

Commit 5fe6c54

Browse files
chriswaileswangli5665
authored andcommitted
Update clone3 wrapper signature
This CL adds the `ltp_clone3_raw` wrapper for direct testing of the syscall and adds a `ltp_clone3` wrapper for libc implementations that provide `clone3`. Signed-off-by: Chris Wailes <chriswailes@google.com> Reviewed-by: Li Wang <liwang@redhat.com>
1 parent 475f2db commit 5fe6c54

5 files changed

Lines changed: 24 additions & 10 deletions

File tree

configure.ac

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ AC_CHECK_MEMBERS([struct utsname.domainname],,,[
189189
AC_CHECK_TYPES([enum kcmp_type],,,[#include <linux/kcmp.h>])
190190
AC_CHECK_TYPES([struct acct_v3],,,[#include <sys/acct.h>])
191191
AC_CHECK_TYPES([struct af_alg_iv, struct sockaddr_alg],,,[# include <linux/if_alg.h>])
192+
AC_CHECK_TYPES([struct clone_args],,,[#include <sched.h>])
192193
AC_CHECK_TYPES([struct fanotify_event_info_fid, struct fanotify_event_info_error,
193194
struct fanotify_event_info_header, struct fanotify_event_info_pidfd,
194195
struct fanotify_event_info_range],,,[#include <sys/fanotify.h>])

include/lapi/sched.h

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,7 @@ static inline int sched_getattr(pid_t pid, struct sched_attr *attr,
4949
# define SCHED_ATTR_SIZE_VER0 48 /* sizeof first published struct */
5050
#endif
5151

52-
#ifndef HAVE_CLONE3
53-
struct clone_args {
52+
struct clone_args_minimal {
5453
uint64_t __attribute__((aligned(8))) flags;
5554
uint64_t __attribute__((aligned(8))) pidfd;
5655
uint64_t __attribute__((aligned(8))) child_tid;
@@ -59,12 +58,10 @@ struct clone_args {
5958
uint64_t __attribute__((aligned(8))) stack;
6059
uint64_t __attribute__((aligned(8))) stack_size;
6160
uint64_t __attribute__((aligned(8))) tls;
62-
uint64_t __attribute__((aligned(8))) set_tid;
63-
uint64_t __attribute__((aligned(8))) set_tid_size;
64-
uint64_t __attribute__((aligned(8))) cgroup;
6561
};
6662

67-
struct clone_args_minimal {
63+
#ifndef HAVE_STRUCT_CLONE_ARGS
64+
struct clone_args {
6865
uint64_t __attribute__((aligned(8))) flags;
6966
uint64_t __attribute__((aligned(8))) pidfd;
7067
uint64_t __attribute__((aligned(8))) child_tid;
@@ -73,12 +70,28 @@ struct clone_args_minimal {
7370
uint64_t __attribute__((aligned(8))) stack;
7471
uint64_t __attribute__((aligned(8))) stack_size;
7572
uint64_t __attribute__((aligned(8))) tls;
73+
uint64_t __attribute__((aligned(8))) set_tid;
74+
uint64_t __attribute__((aligned(8))) set_tid_size;
75+
uint64_t __attribute__((aligned(8))) cgroup;
7676
};
77+
#endif
7778

78-
static inline int clone3(struct clone_args *args, size_t size)
79+
static inline int ltp_clone3_raw(struct clone_args *args, size_t size)
7980
{
8081
return tst_syscall(__NR_clone3, args, size);
8182
}
83+
84+
#ifdef HAVE_CLONE3
85+
static inline int ltp_clone3(struct clone_args *cl_args, size_t size,
86+
int (*fn)(void *), void *arg) {
87+
return clone3(cl_args, size, fn, arg);
88+
}
89+
#else
90+
static inline int ltp_clone3(struct clone_args *cl_args, size_t size,
91+
int (*fn)(void *), void *arg)
92+
{
93+
return -1;
94+
}
8295
#endif
8396

8497
static inline void clone3_supported_by_kernel(void)

testcases/kernel/syscalls/clone3/clone301.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ static void run(unsigned int n)
123123
parent_received_signal = 0;
124124
SAFE_SIGACTION(tc->exit_signal, &psig_action, NULL);
125125

126-
TEST(pid = clone3(args, sizeof(*args)));
126+
TEST(pid = ltp_clone3_raw(args, sizeof(*args)));
127127
if (pid < 0) {
128128
tst_res(TFAIL | TTERRNO, "clone3() failed (%d)", n);
129129
return;

testcases/kernel/syscalls/clone3/clone302.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ static void run(unsigned int n)
8383
args->tls = tc->tls;
8484
}
8585

86-
TEST(clone3(args, tc->size));
86+
TEST(ltp_clone3_raw(args, tc->size));
8787

8888
if (!TST_RET)
8989
exit(EXIT_SUCCESS);

testcases/kernel/syscalls/clone3/clone304.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ static void run(unsigned int n)
5858
args.set_tid_size = 1;
5959
}
6060

61-
TST_EXP_FAIL(clone3(&args, sizeof(args)), EPERM,
61+
TST_EXP_FAIL(ltp_clone3_raw(&args, sizeof(args)), EPERM,
6262
"clone3(%s) set_tid_size=%ld",
6363
tc->sflags, args.set_tid_size);
6464
}

0 commit comments

Comments
 (0)