diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/.gitignore | 16 | ||||
-rw-r--r-- | tests/Makefile.am | 16 | ||||
-rw-r--r-- | tests/gen_tests.in | 16 | ||||
-rw-r--r-- | tests/spu_create-success-P-Xabbrev.c | 2 | ||||
-rw-r--r-- | tests/spu_create-success-P-Xraw.c | 2 | ||||
-rw-r--r-- | tests/spu_create-success-P-Xverbose.c | 2 | ||||
-rw-r--r-- | tests/spu_create-success-P.c | 2 | ||||
-rw-r--r-- | tests/spu_create-success-Xabbrev.c | 2 | ||||
-rw-r--r-- | tests/spu_create-success-Xraw.c | 2 | ||||
-rw-r--r-- | tests/spu_create-success-Xverbose.c | 2 | ||||
-rw-r--r-- | tests/spu_create-success-y-P-Xabbrev.c | 3 | ||||
-rw-r--r-- | tests/spu_create-success-y-P-Xraw.c | 2 | ||||
-rw-r--r-- | tests/spu_create-success-y-P-Xverbose.c | 2 | ||||
-rw-r--r-- | tests/spu_create-success-y-P.c | 2 | ||||
-rw-r--r-- | tests/spu_create-success-y-Xabbrev.c | 3 | ||||
-rw-r--r-- | tests/spu_create-success-y-Xraw.c | 2 | ||||
-rw-r--r-- | tests/spu_create-success-y-Xverbose.c | 2 | ||||
-rw-r--r-- | tests/spu_create-success-y.c | 6 | ||||
-rw-r--r-- | tests/spu_create-success.c | 168 |
19 files changed, 252 insertions, 0 deletions
diff --git a/tests/.gitignore b/tests/.gitignore index 62c0844be..f654f2551 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -981,6 +981,22 @@ sockopt-sol_socket-success-Xraw sockopt-sol_socket-success-Xverbose sockopt-timestamp splice +spu_create-success +spu_create-success-Xabbrev +spu_create-success-Xraw +spu_create-success-Xverbose +spu_create-success-P +spu_create-success-P-Xabbrev +spu_create-success-P-Xraw +spu_create-success-P-Xverbose +spu_create-success-y +spu_create-success-y-Xabbrev +spu_create-success-y-Xraw +spu_create-success-y-Xverbose +spu_create-success-y-P +spu_create-success-y-P-Xabbrev +spu_create-success-y-P-Xraw +spu_create-success-y-P-Xverbose stack-fcall stack-fcall-attach stack-fcall-mangled diff --git a/tests/Makefile.am b/tests/Makefile.am index d61419974..3c5f8e2e6 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -364,6 +364,22 @@ check_PROGRAMS = $(PURE_EXECUTABLES) \ sockopt-sol_socket-success-Xabbrev \ sockopt-sol_socket-success-Xraw \ sockopt-sol_socket-success-Xverbose \ + spu_create-success \ + spu_create-success-Xabbrev \ + spu_create-success-Xraw \ + spu_create-success-Xverbose \ + spu_create-success-P \ + spu_create-success-P-Xabbrev \ + spu_create-success-P-Xraw \ + spu_create-success-P-Xverbose \ + spu_create-success-y \ + spu_create-success-y-Xabbrev \ + spu_create-success-y-Xraw \ + spu_create-success-y-Xverbose \ + spu_create-success-y-P \ + spu_create-success-y-P-Xabbrev \ + spu_create-success-y-P-Xraw \ + spu_create-success-y-P-Xverbose \ stack-fcall \ stack-fcall-attach \ stack-fcall-mangled \ diff --git a/tests/gen_tests.in b/tests/gen_tests.in index 5a7074dd8..b0e1d7620 100644 --- a/tests/gen_tests.in +++ b/tests/gen_tests.in @@ -959,6 +959,22 @@ sockopt-sol_socket-success-Xraw -einject=getsockopt,setsockopt:retval=42 -etrac sockopt-sol_socket-success-Xverbose -einject=getsockopt,setsockopt:retval=42 -etrace=getsockopt,setsockopt -Xverbose sockopt-timestamp -e trace=recvmsg splice +spu_create-success -einject=spu_create:retval=7 -etrace=spu_create -a23 </dev/null 7>/dev/full +spu_create-success-Xabbrev -einject=spu_create:retval=7 -etrace=spu_create -a23 -Xabbrev </dev/null 7>/dev/full +spu_create-success-Xraw -einject=spu_create:retval=7 -etrace=spu_create -a23 -Xraw </dev/null 7>/dev/full +spu_create-success-Xverbose -einject=spu_create:retval=7 -etrace=spu_create -a23 -Xverbose </dev/null 7>/dev/full +spu_create-success-P -einject=spu_create:retval=7 -etrace=spu_create -a23 -P/dev/full </dev/null 7>/dev/full +spu_create-success-P-Xabbrev -einject=spu_create:retval=7 -etrace=spu_create -a23 -P/dev/full -Xabbrev </dev/null 7>/dev/full +spu_create-success-P-Xraw -einject=spu_create:retval=7 -etrace=spu_create -a23 -P/dev/full -Xraw </dev/null 7>/dev/full +spu_create-success-P-Xverbose -einject=spu_create:retval=7 -etrace=spu_create -a23 -P/dev/full -Xverbose </dev/null 7>/dev/full +spu_create-success-y -einject=spu_create:retval=7 -etrace=spu_create -a23 -y </dev/null 7>/dev/full +spu_create-success-y-Xabbrev -einject=spu_create:retval=23 -etrace=spu_create -a23 -y -Xabbrev </dev/null 7>/dev/full +spu_create-success-y-Xraw -einject=spu_create:retval=7 -etrace=spu_create -a23 -y -Xraw </dev/null 7>/dev/full +spu_create-success-y-Xverbose -einject=spu_create:retval=7 -etrace=spu_create -a23 -y -Xverbose </dev/null 7>/dev/full +spu_create-success-y-P -einject=spu_create:retval=7 -etrace=spu_create -a23 -y -P/dev/full </dev/null 7>/dev/full +spu_create-success-y-P-Xabbrev -einject=spu_create:retval=23 -etrace=spu_create -a23 -y -P/dev/full -Xabbrev </dev/null 7>/dev/full +spu_create-success-y-P-Xraw -einject=spu_create:retval=7 -etrace=spu_create -a23 -y -P/dev/full -Xraw </dev/null 7>/dev/full +spu_create-success-y-P-Xverbose -einject=spu_create:retval=7 -etrace=spu_create -a23 -y -P/dev/full -Xverbose </dev/null 7>/dev/full stat -a30 --no-abbrev --trace-path=stat.sample --trace-path=/dev/full stat64 -a32 --no-abbrev --trace-path=stat.sample --trace-path=/dev/full statfs -a17 diff --git a/tests/spu_create-success-P-Xabbrev.c b/tests/spu_create-success-P-Xabbrev.c new file mode 100644 index 000000000..df2222f2e --- /dev/null +++ b/tests/spu_create-success-P-Xabbrev.c @@ -0,0 +1,2 @@ +#define XLAT_ABBREV 1 +#include "spu_create-success-P.c" diff --git a/tests/spu_create-success-P-Xraw.c b/tests/spu_create-success-P-Xraw.c new file mode 100644 index 000000000..a8b2657b0 --- /dev/null +++ b/tests/spu_create-success-P-Xraw.c @@ -0,0 +1,2 @@ +#define XLAT_RAW 1 +#include "spu_create-success-P.c" diff --git a/tests/spu_create-success-P-Xverbose.c b/tests/spu_create-success-P-Xverbose.c new file mode 100644 index 000000000..a976b27ab --- /dev/null +++ b/tests/spu_create-success-P-Xverbose.c @@ -0,0 +1,2 @@ +#define XLAT_VERBOSE 1 +#include "spu_create-success-P.c" diff --git a/tests/spu_create-success-P.c b/tests/spu_create-success-P.c new file mode 100644 index 000000000..ab3827082 --- /dev/null +++ b/tests/spu_create-success-P.c @@ -0,0 +1,2 @@ +#define PATH_FILTER 1 +#include "spu_create-success.c" diff --git a/tests/spu_create-success-Xabbrev.c b/tests/spu_create-success-Xabbrev.c new file mode 100644 index 000000000..1b5b2e68c --- /dev/null +++ b/tests/spu_create-success-Xabbrev.c @@ -0,0 +1,2 @@ +#define XLAT_ABBREV 1 +#include "spu_create-success.c" diff --git a/tests/spu_create-success-Xraw.c b/tests/spu_create-success-Xraw.c new file mode 100644 index 000000000..ee1291328 --- /dev/null +++ b/tests/spu_create-success-Xraw.c @@ -0,0 +1,2 @@ +#define XLAT_RAW 1 +#include "spu_create-success.c" diff --git a/tests/spu_create-success-Xverbose.c b/tests/spu_create-success-Xverbose.c new file mode 100644 index 000000000..d2e71f853 --- /dev/null +++ b/tests/spu_create-success-Xverbose.c @@ -0,0 +1,2 @@ +#define XLAT_VERBOSE 1 +#include "spu_create-success.c" diff --git a/tests/spu_create-success-y-P-Xabbrev.c b/tests/spu_create-success-y-P-Xabbrev.c new file mode 100644 index 000000000..40f86758d --- /dev/null +++ b/tests/spu_create-success-y-P-Xabbrev.c @@ -0,0 +1,3 @@ +#define XLAT_ABBREV 1 +#define RVAL_STR "" +#include "spu_create-success-y-P.c" diff --git a/tests/spu_create-success-y-P-Xraw.c b/tests/spu_create-success-y-P-Xraw.c new file mode 100644 index 000000000..7c4354ac6 --- /dev/null +++ b/tests/spu_create-success-y-P-Xraw.c @@ -0,0 +1,2 @@ +#define XLAT_RAW 1 +#include "spu_create-success-y-P.c" diff --git a/tests/spu_create-success-y-P-Xverbose.c b/tests/spu_create-success-y-P-Xverbose.c new file mode 100644 index 000000000..46f84e946 --- /dev/null +++ b/tests/spu_create-success-y-P-Xverbose.c @@ -0,0 +1,2 @@ +#define XLAT_VERBOSE 1 +#include "spu_create-success-y-P.c" diff --git a/tests/spu_create-success-y-P.c b/tests/spu_create-success-y-P.c new file mode 100644 index 000000000..2c01cc49d --- /dev/null +++ b/tests/spu_create-success-y-P.c @@ -0,0 +1,2 @@ +#define PATH_FILTER 1 +#include "spu_create-success-y.c" diff --git a/tests/spu_create-success-y-Xabbrev.c b/tests/spu_create-success-y-Xabbrev.c new file mode 100644 index 000000000..1352601a3 --- /dev/null +++ b/tests/spu_create-success-y-Xabbrev.c @@ -0,0 +1,3 @@ +#define XLAT_ABBREV 1 +#define RVAL_STR "" +#include "spu_create-success-y.c" diff --git a/tests/spu_create-success-y-Xraw.c b/tests/spu_create-success-y-Xraw.c new file mode 100644 index 000000000..b86ab1ab2 --- /dev/null +++ b/tests/spu_create-success-y-Xraw.c @@ -0,0 +1,2 @@ +#define XLAT_RAW 1 +#include "spu_create-success-y.c" diff --git a/tests/spu_create-success-y-Xverbose.c b/tests/spu_create-success-y-Xverbose.c new file mode 100644 index 000000000..8011a2075 --- /dev/null +++ b/tests/spu_create-success-y-Xverbose.c @@ -0,0 +1,2 @@ +#define XLAT_VERBOSE 1 +#include "spu_create-success-y.c" diff --git a/tests/spu_create-success-y.c b/tests/spu_create-success-y.c new file mode 100644 index 000000000..7c63e3cf4 --- /dev/null +++ b/tests/spu_create-success-y.c @@ -0,0 +1,6 @@ +#define FD0_STR "<" FD0_PATH ">" +#define FD7_STR "<" FD7_PATH ">" +#ifndef RVAL_STR +# define RVAL_STR FD7_STR +#endif +#include "spu_create-success.c" diff --git a/tests/spu_create-success.c b/tests/spu_create-success.c new file mode 100644 index 000000000..0fe15a9d5 --- /dev/null +++ b/tests/spu_create-success.c @@ -0,0 +1,168 @@ +/* + * Check decoding of spu_create syscall. + * + * Copyright (c) 2022 Eugene Syromyatnikov <evgsyr@gmail.com>. + * All rights reserved. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "tests.h" +#include "scno.h" + +#ifdef __NR_spu_create + +# include <fcntl.h> +# include <inttypes.h> +# include <stdint.h> +# include <stdio.h> +# include <string.h> +# include <unistd.h> + +# define ARR_ITEM(arr_, idx_) ((arr_)[(idx_) % ARRAY_SIZE(arr_)]) + +# define FD0_PATH "/dev/null" +# define FD7_PATH "/dev/full" + +# define PATH2_STR "0123456789abcdefghijklmnopqrstuvwxyz" + +# ifndef FD0_STR +# define FD0_STR "" +# endif + +# ifndef FD7_STR +# define FD7_STR "" +# endif + +# ifndef RVAL_STR +# define RVAL_STR "" +# endif + +# ifndef PATH_FILTER +# define PATH_FILTER 0 +# endif + +struct valstrflag { + unsigned int val; + const char *str; + bool flag; +}; + +enum { CLOSED_FD = 23 }; + +static const char *errstr; + +static long +sys_spu_create(const void *const pathname, const unsigned int flags, + const unsigned short mode, const int neighbor_fd) +{ + static const kernel_ulong_t fill = + (kernel_ulong_t) 0xbeefface00000000ULL; + kernel_ulong_t arg1 = (uintptr_t) pathname; + kernel_ulong_t arg2 = fill | flags; + kernel_ulong_t arg3 = fill | 0xdead0000U | mode; + kernel_ulong_t arg4 = fill | (unsigned int) neighbor_fd; + kernel_ulong_t arg5 = fill | 0xdecaffed; + kernel_ulong_t arg6 = fill | 0xdeefaced; + + long rc = syscall(__NR_spu_create, arg1, arg2, arg3, arg4, arg5, arg6); + errstr = sprintrc(rc); + return rc; +} + +int +main(void) +{ + close(CLOSED_FD); + + /* NULL/zero args */ + sys_spu_create(NULL, 0, 0, 0); + if (!PATH_FILTER) { + printf("spu_create(NULL, 0, 000) = %s" RVAL_STR " (INJECTED)\n", + errstr); + } + + static const struct valstrflag flags[] = { + { ARG_STR(0) }, + { ARG_STR(0x1) NRAW(" /* SPU_CREATE_EVENTS_ENABLED */") }, + { ARG_STR(0x10) NRAW(" /* SPU_CREATE_AFFINITY_SPU */"), true }, + { ARG_STR(0x40) NRAW(" /* SPU_CREATE_??? */") }, + { ARG_STR(0xbeef) NRAW(" /* SPU_CREATE_EVENTS_ENABLED" + "|SPU_CREATE_GANG|SPU_CREATE_NOSCHED" + "|SPU_CREATE_ISOLATE" + "|SPU_CREATE_AFFINITY_MEM|0xbec0 */") }, + { ARG_STR(0xcafe) NRAW(" /* SPU_CREATE_GANG|SPU_CREATE_NOSCHED" + "|SPU_CREATE_ISOLATE" + "|SPU_CREATE_AFFINITY_SPU" + "|SPU_CREATE_AFFINITY_MEM|0xcac0 */"), + true }, + { ARG_STR(0xfacedec0) NRAW(" /* SPU_CREATE_??? */") }, + }; + static const struct strval16 modes[] = { + { ARG_STR(000) }, + { ARG_STR(0755) }, + { ARG_STR(04000) }, + }; + static const struct valstrflag fds[] = { + { 0, FD0_STR }, + { 7, FD7_STR, true }, + { CLOSED_FD, "" }, + { 0xdeadbeef, "" }, + }; + + TAIL_ALLOC_OBJECT_VAR_ARR(char, path0, 1); + TAIL_ALLOC_OBJECT_VAR_ARR(char, path1, 3); + TAIL_ALLOC_OBJECT_VAR_ARR(char, path2, 37); + TAIL_ALLOC_OBJECT_VAR_ARR(char, path3, sizeof(FD7_PATH)); + + path0[0] = '\0'; + memcpy(path1, "\r\n\t", 3); + memcpy(path2, PATH2_STR, 37); + strcpy(path3, FD7_PATH); + + const struct { + const char *val; + const char *str; + bool flag; + } paths[] = { + { path0 + 1, NULL }, + { path0, "\"\"" }, + { path1, NULL }, + { path2, "\"" PATH2_STR "\"" }, + { path3, "\"" FD7_PATH "\"", true }, + }; + const size_t iters = 4 * MAX(MAX(MAX(ARRAY_SIZE(flags), ARRAY_SIZE(fds)), + ARRAY_SIZE(modes)), ARRAY_SIZE(paths)); + + for (size_t i = 0; i < iters; i++) { + sys_spu_create(ARR_ITEM(paths, i).val, ARR_ITEM(flags, i).val, + ARR_ITEM(modes, i).val, ARR_ITEM(fds, i).val); + + if (PATH_FILTER && !ARR_ITEM(paths, i).flag + && (!ARR_ITEM(flags, i).flag || !ARR_ITEM(fds, i).flag)) + continue; + + printf("spu_create("); + if (ARR_ITEM(paths, i).str) + printf("%s", ARR_ITEM(paths, i).str); + else + printf("%p", ARR_ITEM(paths, i).val); + printf(", %s, %s", + ARR_ITEM(flags, i).str, ARR_ITEM(modes, i).str); + if (ARR_ITEM(flags, i).flag) { + printf(", %d%s", + ARR_ITEM(fds, i).val, ARR_ITEM(fds, i).str); + } + printf(") = %s" RVAL_STR " (INJECTED)\n", errstr); + } + + puts("+++ exited with 0 +++"); + + return 0; +} + +#else + +SKIP_MAIN_UNDEFINED("__NR_spu_create") + +#endif |