From 499f90b77c4834bec3ffa3969a1b576cd1e6bd39 Mon Sep 17 00:00:00 2001 From: Andrea Cervesato Date: Mon, 7 Oct 2024 14:11:42 +0200 Subject: [PATCH] Add statmount08 test Verify that statmount() raises EPERM when mount point is not accessible. Signed-off-by: Andrea Cervesato --- runtest/syscalls | 1 + .../kernel/syscalls/statmount/.gitignore | 1 + .../kernel/syscalls/statmount/statmount08.c | 63 +++++++++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 testcases/kernel/syscalls/statmount/statmount08.c diff --git a/runtest/syscalls b/runtest/syscalls index bf222e4662c..f8ae25344a2 100644 --- a/runtest/syscalls +++ b/runtest/syscalls @@ -1581,6 +1581,7 @@ statmount04 statmount04 statmount05 statmount05 statmount06 statmount06 statmount07 statmount07 +statmount08 statmount08 statfs01 statfs01 statfs01_64 statfs01_64 diff --git a/testcases/kernel/syscalls/statmount/.gitignore b/testcases/kernel/syscalls/statmount/.gitignore index b2a55c07794..6106fcf0737 100644 --- a/testcases/kernel/syscalls/statmount/.gitignore +++ b/testcases/kernel/syscalls/statmount/.gitignore @@ -5,3 +5,4 @@ statmount04 statmount05 statmount06 statmount07 +statmount08 diff --git a/testcases/kernel/syscalls/statmount/statmount08.c b/testcases/kernel/syscalls/statmount/statmount08.c new file mode 100644 index 00000000000..bb0cbf87767 --- /dev/null +++ b/testcases/kernel/syscalls/statmount/statmount08.c @@ -0,0 +1,63 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Copyright (C) 2024 SUSE LLC Andrea Cervesato + */ + +/*\ + * [Description] + * + * Verify that statmount() raises EPERM when mount point is not accessible. + */ + +#define _GNU_SOURCE + +#include +#include "statmount.h" +#include "lapi/stat.h" + +#define MNTPOINT "mntpoint" + +static struct statmount *st_mount; +static uint64_t root_id; + +static void run(void) +{ + if (SAFE_FORK()) + return; + + struct passwd *pw; + + pw = SAFE_GETPWNAM("nobody"); + SAFE_SETEGID(pw->pw_gid); + SAFE_SETEUID(pw->pw_uid); + + memset(st_mount, 0, sizeof(struct statmount)); + + TST_EXP_FAIL(statmount(root_id, STATMOUNT_SB_BASIC, st_mount, + sizeof(struct statmount), 0), EPERM); + + exit(0); +} + + +static void setup(void) +{ + struct ltp_statx sx; + + SAFE_UNSHARE(CLONE_NEWNS); + + SAFE_STATX(AT_FDCWD, "/", 0, STATX_MNT_ID_UNIQUE, &sx); + root_id = sx.data.stx_mnt_id; +} + +static struct tst_test test = { + .test_all = run, + .setup = setup, + .needs_root = 1, + .forks_child = 1, + .min_kver = "6.8", + .bufs = (struct tst_buffers []) { + {&st_mount, .size = sizeof(struct statmount)}, + {} + } +};