* [LTP] [PATCH v3] syscalls/faccessat202: Add new testcase @ 2023-08-23 5:24 Yang Xu 2023-08-23 9:34 ` Cyril Hrubis 0 siblings, 1 reply; 2+ messages in thread From: Yang Xu @ 2023-08-23 5:24 UTC (permalink / raw) To: ltp Check various errnos for faccessat2(). Signed-off-by: Yang Xu <xuyang2018.jy@fujitsu.com> --- runtest/syscalls | 1 + .../kernel/syscalls/faccessat2/.gitignore | 1 + .../kernel/syscalls/faccessat2/faccessat202.c | 100 ++++++++++++++++++ 3 files changed, 102 insertions(+) create mode 100644 testcases/kernel/syscalls/faccessat2/faccessat202.c diff --git a/runtest/syscalls b/runtest/syscalls index 02768c236..7af2842f3 100644 --- a/runtest/syscalls +++ b/runtest/syscalls @@ -218,6 +218,7 @@ faccessat01 faccessat01 #faccessat2 test cases faccessat201 faccessat201 +faccessat202 faccessat202 #fallocate test cases fallocate01 fallocate01 diff --git a/testcases/kernel/syscalls/faccessat2/.gitignore b/testcases/kernel/syscalls/faccessat2/.gitignore index 53f700bac..f58f045f4 100644 --- a/testcases/kernel/syscalls/faccessat2/.gitignore +++ b/testcases/kernel/syscalls/faccessat2/.gitignore @@ -1 +1,2 @@ /faccessat201 +/faccessat202 diff --git a/testcases/kernel/syscalls/faccessat2/faccessat202.c b/testcases/kernel/syscalls/faccessat2/faccessat202.c new file mode 100644 index 000000000..e6cd1ec5e --- /dev/null +++ b/testcases/kernel/syscalls/faccessat2/faccessat202.c @@ -0,0 +1,100 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Copyright (c) 2023 FUJITSU LIMITED. All rights reserved. + * Copyright (c) Linux Test Project, 2003-2023 + * Author: Yang Xu <xuyang2018.jy@fujitsu.com> + */ + +/*\ + * [Description] + * + * Test basic error handling of faccessat2 syscall: + * + * - faccessat2() fails with EFAULT if pathname is a bad pathname point. + * - faccessat2() fails with EINVAL if flags is -1. + * - faccessat2() fails with EINVAL if mode is -1. + * - faccessat2() fails with EBADF if dirfd is -1. + * - faccessat2() fails with ENOTDIR if pathname is relative path to a + * file and dir_fd is file descriptor for this file. + * - faccessat2() fails with EACCES if flags is AT_EACCESS and not using + * the effective user and group IDs. + * + * Minimum Linux version required is v5.8. + */ + +#include <pwd.h> + +#include "tst_test.h" +#include "lapi/syscalls.h" +#include "lapi/faccessat.h" + +#define TESTUSER "nobody" +#define TESTDIR "faccessat2dir" +#define RELPATH "faccessat2dir/faccessat2file" + +static int fd; +static int bad_fd = -1; +static int atcwd_fd = AT_FDCWD; +static char *bad_path; +static char *rel_path; + +static struct passwd *ltpuser; + +static struct tcase { + int *fd; + char **filename; + int mode; + int flags; + int exp_errno; +} tcases[] = { + {&atcwd_fd, &bad_path, R_OK, 0, EFAULT}, + {&atcwd_fd, &rel_path, R_OK, -1, EINVAL}, + {&atcwd_fd, &rel_path, -1, 0, EINVAL}, + {&bad_fd, &rel_path, R_OK, 0, EBADF}, + {&fd, &rel_path, R_OK, 0, ENOTDIR}, + {&atcwd_fd, &rel_path, R_OK, AT_EACCESS, EACCES}, +}; + +static void verify_faccessat2(unsigned int i) +{ + struct tcase *tc = &tcases[i]; + + if (tc->exp_errno == EACCES) + SAFE_SETEUID(ltpuser->pw_uid); + + TST_EXP_FAIL(faccessat2(*tc->fd, *tc->filename, tc->mode, tc->flags), + tc->exp_errno, "faccessat2()"); + + if (tc->exp_errno == EACCES) + SAFE_SETEUID(0); +} + +static void setup(void) +{ + SAFE_MKDIR(TESTDIR, 0666); + SAFE_TOUCH(RELPATH, 0444, NULL); + + fd = SAFE_OPEN(RELPATH, O_RDONLY); + bad_path = tst_get_bad_addr(NULL); + + ltpuser = SAFE_GETPWNAM(TESTUSER); +} + +static void cleanup(void) +{ + if (fd > -1) + SAFE_CLOSE(fd); +} + +static struct tst_test test = { + .test = verify_faccessat2, + .tcnt = ARRAY_SIZE(tcases), + .setup = setup, + .cleanup = cleanup, + .bufs = (struct tst_buffers []) { + {&rel_path, .str = RELPATH}, + {}, + }, + .needs_tmpdir = 1, + .needs_root = 1, +}; -- 2.39.1 -- Mailing list info: https://lists.linux.it/listinfo/ltp ^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [LTP] [PATCH v3] syscalls/faccessat202: Add new testcase 2023-08-23 5:24 [LTP] [PATCH v3] syscalls/faccessat202: Add new testcase Yang Xu @ 2023-08-23 9:34 ` Cyril Hrubis 0 siblings, 0 replies; 2+ messages in thread From: Cyril Hrubis @ 2023-08-23 9:34 UTC (permalink / raw) To: Yang Xu; +Cc: ltp Hi! I've added short descriptions to the testcase structure and pushed, thanks. Full diff: diff --git a/testcases/kernel/syscalls/faccessat2/faccessat202.c b/testcases/kernel/syscalls/faccessat2/faccessat202.c index e6cd1ec5e..a60db2bf8 100644 --- a/testcases/kernel/syscalls/faccessat2/faccessat202.c +++ b/testcases/kernel/syscalls/faccessat2/faccessat202.c @@ -46,13 +46,15 @@ static struct tcase { int mode; int flags; int exp_errno; + const char *desc; } tcases[] = { - {&atcwd_fd, &bad_path, R_OK, 0, EFAULT}, - {&atcwd_fd, &rel_path, R_OK, -1, EINVAL}, - {&atcwd_fd, &rel_path, -1, 0, EINVAL}, - {&bad_fd, &rel_path, R_OK, 0, EBADF}, - {&fd, &rel_path, R_OK, 0, ENOTDIR}, - {&atcwd_fd, &rel_path, R_OK, AT_EACCESS, EACCES}, + {&atcwd_fd, &bad_path, R_OK, 0, EFAULT, "invalid address"}, + {&atcwd_fd, &rel_path, R_OK, -1, EINVAL, "invalid flags"}, + {&atcwd_fd, &rel_path, -1, 0, EINVAL, "invalid mode"}, + {&bad_fd, &rel_path, R_OK, 0, EBADF, "invalid fd"}, + {&fd, &rel_path, R_OK, 0, ENOTDIR, "fd pointing to file"}, + {&atcwd_fd, &rel_path, R_OK, AT_EACCESS, EACCES, + "AT_EACCESS and unprivileged EUID"}, }; static void verify_faccessat2(unsigned int i) @@ -63,7 +65,7 @@ static void verify_faccessat2(unsigned int i) SAFE_SETEUID(ltpuser->pw_uid); TST_EXP_FAIL(faccessat2(*tc->fd, *tc->filename, tc->mode, tc->flags), - tc->exp_errno, "faccessat2()"); + tc->exp_errno, "faccessat2() with %s", tc->desc); if (tc->exp_errno == EACCES) SAFE_SETEUID(0); -- Cyril Hrubis chrubis@suse.cz -- Mailing list info: https://lists.linux.it/listinfo/ltp ^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2023-08-23 9:34 UTC | newest] Thread overview: 2+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-08-23 5:24 [LTP] [PATCH v3] syscalls/faccessat202: Add new testcase Yang Xu 2023-08-23 9:34 ` Cyril Hrubis
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox