Message ID | 20230905101444.3365-1-wegao@suse.com |
---|---|
State | Changes Requested |
Headers | show |
Series | [v4] clone302: Fix short size test | expand |
Hello, Wei Gao via ltp <ltp@lists.linux.it> writes: > Signed-off-by: Wei Gao <wegao@suse.com> > --- > include/lapi/sched.h | 11 +++++++++++ > testcases/kernel/syscalls/clone3/clone302.c | 5 ++++- > 2 files changed, 15 insertions(+), 1 deletion(-) > > diff --git a/include/lapi/sched.h b/include/lapi/sched.h > index ac766efc5..26fdb628d 100644 > --- a/include/lapi/sched.h > +++ b/include/lapi/sched.h > @@ -60,6 +60,17 @@ struct clone_args { > uint64_t __attribute__((aligned(8))) cgroup; > }; > > +struct clone_args_minimal { > + uint64_t __attribute__((aligned(8))) flags; > + uint64_t __attribute__((aligned(8))) pidfd; > + uint64_t __attribute__((aligned(8))) child_tid; > + uint64_t __attribute__((aligned(8))) parent_tid; > + uint64_t __attribute__((aligned(8))) exit_signal; > + uint64_t __attribute__((aligned(8))) stack; > + uint64_t __attribute__((aligned(8))) stack_size; > + uint64_t __attribute__((aligned(8))) tls; > +}; > + > static inline int clone3(struct clone_args *args, size_t size) > { > return tst_syscall(__NR_clone3, args, size); > diff --git a/testcases/kernel/syscalls/clone3/clone302.c b/testcases/kernel/syscalls/clone3/clone302.c > index b1b4ccebb..9cbf2d58e 100644 > --- a/testcases/kernel/syscalls/clone3/clone302.c > +++ b/testcases/kernel/syscalls/clone3/clone302.c > @@ -12,6 +12,7 @@ > #define _GNU_SOURCE > > #include <stdlib.h> > +#include <assert.h> > > #include "tst_test.h" > #include "lapi/sched.h" > @@ -34,7 +35,7 @@ static struct tcase { > } tcases[] = { > {"invalid args", &invalid_args, sizeof(*valid_args), 0, NULL, SIGCHLD, 0, 0, 0, EFAULT}, > {"zero size", &valid_args, 0, 0, NULL, SIGCHLD, 0, 0, 0, EINVAL}, > - {"short size", &valid_args, sizeof(*valid_args) - 1, 0, NULL, SIGCHLD, 0, 0, 0, EINVAL}, > + {"short size", &valid_args, sizeof(struct clone_args_minimal) - 1, 0, NULL, SIGCHLD, 0, 0, 0, EINVAL}, > {"extra size", &valid_args, sizeof(*valid_args) + 1, 0, NULL, SIGCHLD, 0, 0, 0, EFAULT}, > {"sighand-no-VM", &valid_args, sizeof(*valid_args), CLONE_SIGHAND, NULL, SIGCHLD, 0, 0, 0, EINVAL}, > {"thread-no-sighand", &valid_args, sizeof(*valid_args), CLONE_THREAD, NULL, SIGCHLD, 0, 0, 0, EINVAL}, > @@ -59,6 +60,8 @@ static void setup(void) > { > clone3_supported_by_kernel(); > > + assert(sizeof(struct clone_args_minimal) == 64); Sorry I mean with TST_EXP_EQ_SZ or just an if statement followed by tst_brk. The stdlib assert macro will produce a signal on failure and it will look messy. > + > void *p = tst_get_bad_addr(NULL); > > invalid_args = p; > -- > 2.35.3
diff --git a/include/lapi/sched.h b/include/lapi/sched.h index ac766efc5..26fdb628d 100644 --- a/include/lapi/sched.h +++ b/include/lapi/sched.h @@ -60,6 +60,17 @@ struct clone_args { uint64_t __attribute__((aligned(8))) cgroup; }; +struct clone_args_minimal { + uint64_t __attribute__((aligned(8))) flags; + uint64_t __attribute__((aligned(8))) pidfd; + uint64_t __attribute__((aligned(8))) child_tid; + uint64_t __attribute__((aligned(8))) parent_tid; + uint64_t __attribute__((aligned(8))) exit_signal; + uint64_t __attribute__((aligned(8))) stack; + uint64_t __attribute__((aligned(8))) stack_size; + uint64_t __attribute__((aligned(8))) tls; +}; + static inline int clone3(struct clone_args *args, size_t size) { return tst_syscall(__NR_clone3, args, size); diff --git a/testcases/kernel/syscalls/clone3/clone302.c b/testcases/kernel/syscalls/clone3/clone302.c index b1b4ccebb..9cbf2d58e 100644 --- a/testcases/kernel/syscalls/clone3/clone302.c +++ b/testcases/kernel/syscalls/clone3/clone302.c @@ -12,6 +12,7 @@ #define _GNU_SOURCE #include <stdlib.h> +#include <assert.h> #include "tst_test.h" #include "lapi/sched.h" @@ -34,7 +35,7 @@ static struct tcase { } tcases[] = { {"invalid args", &invalid_args, sizeof(*valid_args), 0, NULL, SIGCHLD, 0, 0, 0, EFAULT}, {"zero size", &valid_args, 0, 0, NULL, SIGCHLD, 0, 0, 0, EINVAL}, - {"short size", &valid_args, sizeof(*valid_args) - 1, 0, NULL, SIGCHLD, 0, 0, 0, EINVAL}, + {"short size", &valid_args, sizeof(struct clone_args_minimal) - 1, 0, NULL, SIGCHLD, 0, 0, 0, EINVAL}, {"extra size", &valid_args, sizeof(*valid_args) + 1, 0, NULL, SIGCHLD, 0, 0, 0, EFAULT}, {"sighand-no-VM", &valid_args, sizeof(*valid_args), CLONE_SIGHAND, NULL, SIGCHLD, 0, 0, 0, EINVAL}, {"thread-no-sighand", &valid_args, sizeof(*valid_args), CLONE_THREAD, NULL, SIGCHLD, 0, 0, 0, EINVAL}, @@ -59,6 +60,8 @@ static void setup(void) { clone3_supported_by_kernel(); + assert(sizeof(struct clone_args_minimal) == 64); + void *p = tst_get_bad_addr(NULL); invalid_args = p;
Signed-off-by: Wei Gao <wegao@suse.com> --- include/lapi/sched.h | 11 +++++++++++ testcases/kernel/syscalls/clone3/clone302.c | 5 ++++- 2 files changed, 15 insertions(+), 1 deletion(-)