From: Andrea Cervesato via ltp <ltp@lists.linux.it>
To: Wei Gao <wegao@suse.com>, ltp@lists.linux.it
Subject: Re: [LTP] [PATCH v4] unshare03.c: Add test coverage for dup_fd() failure handling in unshare_fd()
Date: Tue, 4 Mar 2025 09:31:03 +0100 [thread overview]
Message-ID: <361f2b39-3deb-462d-90fe-4f2ee2de9b60@suse.com> (raw)
In-Reply-To: <20250304040601.23920-1-wegao@suse.com>
Hi,
thanks for editing the last version. A couple of comments below.
On 3/4/25 05:06, Wei Gao via ltp wrote:
> Add a test case based on kernel self-test unshare_test.c to check that
> the kernel handles the EMFILE error when a parent process changes file
> descriptor limits and the child process tries to unshare (CLONE_FILES).
>
> Signed-off-by: Wei Gao <wegao@suse.com>
> ---
> runtest/syscalls | 1 +
> testcases/kernel/syscalls/unshare/.gitignore | 1 +
> testcases/kernel/syscalls/unshare/unshare03.c | 77 +++++++++++++++++++
> 3 files changed, 79 insertions(+)
> create mode 100644 testcases/kernel/syscalls/unshare/unshare03.c
>
> diff --git a/runtest/syscalls b/runtest/syscalls
> index ded035ee8..10800c1a3 100644
> --- a/runtest/syscalls
> +++ b/runtest/syscalls
> @@ -1715,6 +1715,7 @@ unlinkat01 unlinkat01
>
> unshare01 unshare01
> unshare02 unshare02
> +unshare03 unshare03
>
> #
> # These tests require an unmounted block device
> diff --git a/testcases/kernel/syscalls/unshare/.gitignore b/testcases/kernel/syscalls/unshare/.gitignore
> index 855ffd055..e5b5c261d 100644
> --- a/testcases/kernel/syscalls/unshare/.gitignore
> +++ b/testcases/kernel/syscalls/unshare/.gitignore
> @@ -1,2 +1,3 @@
> /unshare01
> /unshare02
> +/unshare03
> diff --git a/testcases/kernel/syscalls/unshare/unshare03.c b/testcases/kernel/syscalls/unshare/unshare03.c
> new file mode 100644
> index 000000000..c1f13bcd5
> --- /dev/null
> +++ b/testcases/kernel/syscalls/unshare/unshare03.c
> @@ -0,0 +1,77 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (c) 2024 Al Viro <viro@zeniv.linux.org.uk>
> + * Copyright (C) 2024 Wei Gao <wegao@suse.com>
> + */
> +
> +/*\
> + * This test case based on kernel self-test unshare_test.c to check that
> + * the kernel handles the EMFILE error when a parent process changes file
> + * descriptor limits and the child process tries to unshare (CLONE_FILES).
> + */
> +
> +#define _GNU_SOURCE
> +
> +#include "tst_test.h"
> +#include "config.h"
> +#include "lapi/sched.h"
> +
> +#define FS_NR_OPEN "/proc/sys/fs/nr_open"
> +
> +#ifdef HAVE_UNSHARE
> +
> +static void run(void)
> +{
> + int nr_open;
> + struct rlimit rlimit;
> + struct tst_clone_args args = {
> + .flags = CLONE_FILES,
> + .exit_signal = SIGCHLD,
> + };
> +
> + SAFE_FILE_SCANF(FS_NR_OPEN, "%d", &nr_open);
> + tst_res(TDEBUG, "Maximum number of file descriptors: %d", nr_open);
> +
> + SAFE_FILE_PRINTF(FS_NR_OPEN, "%d", nr_open + 1024);
> +
> + SAFE_GETRLIMIT(RLIMIT_NOFILE, &rlimit);
> +
> + rlimit.rlim_cur = nr_open + 1024;
> + rlimit.rlim_max = nr_open + 1024;
> +
> + SAFE_SETRLIMIT(RLIMIT_NOFILE, &rlimit);
> + tst_res(TDEBUG, "Set new maximum number of file descriptors to : %d",
> + nr_open + 1024);
> +
> + SAFE_DUP2(2, nr_open + 64);
> +
> + if (!SAFE_CLONE(&args)) {
> + SAFE_FILE_PRINTF(FS_NR_OPEN, "%d", nr_open);
> + TST_EXP_FAIL(unshare(CLONE_FILES), EMFILE);
> + TST_CHECKPOINT_WAKE(0);
There's no need to use synchronization mechanisms because at the end of
the test we call tst_reap_children() waiting for all the children to be
completed.
> + exit(0);
> + }
> +
> + TST_CHECKPOINT_WAIT(0);
> +}
> +
> +static void setup(void)
> +{
> + clone3_supported_by_kernel();
> +}
> +
> +static struct tst_test test = {
> + .forks_child = 1,
> + .needs_root = 1,
> + .test_all = run,
> + .setup = setup,
> + .needs_checkpoints = 1,
> + .save_restore = (const struct tst_path_val[]) {
> + {FS_NR_OPEN, NULL, TST_SR_TCONF},
> + {}
> + },
> +};
> +
> +#else
> +TST_TEST_TCONF("unshare syscall is undefined.");
> +#endif
The rest looks good. If you want I can edit the checkpoint thing and
merge this patch.
Kind regards,
Andrea Cervesato
--
Mailing list info: https://lists.linux.it/listinfo/ltp
next prev parent reply other threads:[~2025-03-04 8:31 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-19 8:19 [LTP] [PATCH v1] unshare03.c: Add test coverage for dup_fd() failure handling in unshare_fd() Wei Gao via ltp
2025-02-19 15:12 ` Andrea Cervesato via ltp
2025-03-03 9:42 ` [LTP] [PATCH v2] " Wei Gao via ltp
2025-03-03 10:47 ` Andrea Cervesato via ltp
2025-03-04 4:03 ` Wei Gao via ltp
2025-03-04 3:43 ` [LTP] [PATCH v3] " Wei Gao via ltp
2025-03-04 4:06 ` [LTP] [PATCH v4] " Wei Gao via ltp
2025-03-04 8:31 ` Andrea Cervesato via ltp [this message]
2025-03-05 7:04 ` Wei Gao via ltp
2025-03-05 12:11 ` Andrea Cervesato via ltp
2025-03-06 2:24 ` Wei Gao via ltp
2025-03-06 2:22 ` [LTP] [PATCH v5] " Wei Gao via ltp
2025-03-06 8:23 ` Andrea Cervesato via ltp
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=361f2b39-3deb-462d-90fe-4f2ee2de9b60@suse.com \
--to=ltp@lists.linux.it \
--cc=andrea.cervesato@suse.com \
--cc=wegao@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.