From: "Jin Li" <jinli@lanxincomputing.com>
To: "Shuah Khan" <shuah@kernel.org>
Cc: <linux-kselftest@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
"Jin Li" <jinli@lanxincomputing.com>
Subject: [PATCH] selftests: core: Fix unshare_test on systems with max nr_open
Date: Mon, 7 Sep 2026 13:28:53 +0000 [thread overview]
Message-ID: <20260907132853.3596858-1-jinli@lanxincomputing.com> (raw)
When nr_open is already set to INT_MAX, nr_open + 1024 overflows
and causes setrlimit to fail. This happens on systems where
fs.nr_open has been configured to its maximum value.
Add a check to detect this condition. If nr_open is near INT_MAX,
skip increasing fs.nr_open and use a fallback value of 1048576
for RLIMIT_NOFILE instead, which is large enough for the test.
This fixes the test failure on systems with maxed-out nr_open.
Signed-off-by: Jin Li <jinli@lanxincomputing.com>
---
tools/testing/selftests/core/unshare_test.c | 38 +++++++++++++++------
1 file changed, 27 insertions(+), 11 deletions(-)
diff --git a/tools/testing/selftests/core/unshare_test.c b/tools/testing/selftests/core/unshare_test.c
index ffce75a6c228..dcc61488e4dd 100644
--- a/tools/testing/selftests/core/unshare_test.c
+++ b/tools/testing/selftests/core/unshare_test.c
@@ -42,18 +42,34 @@ TEST(unshare_EMFILE)
ASSERT_EQ(0, getrlimit(RLIMIT_NOFILE, &rlimit));
- /* bump fs.nr_open */
- n2 = sprintf(buf2, "%d\n", nr_open + 1024);
- lseek(fd, 0, SEEK_SET);
- write(fd, buf2, n2);
-
- /* bump ulimit -n */
- rlimit.rlim_cur = nr_open + 1024;
- rlimit.rlim_max = nr_open + 1024;
- EXPECT_EQ(0, setrlimit(RLIMIT_NOFILE, &rlimit)) {
+ /*
+ * Only bump fs.nr_open and RLIMIT_NOFILE if nr_open is not already
+ * at or near INT_MAX. Adding 1024 to INT_MAX would overflow.
+ */
+ if (nr_open < INT_MAX - 1024) {
+ n2 = sprintf(buf2, "%d\n", nr_open + 1024);
lseek(fd, 0, SEEK_SET);
- write(fd, buf, n);
- exit(EXIT_FAILURE);
+ write(fd, buf2, n2);
+
+ rlimit.rlim_cur = nr_open + 1024;
+ rlimit.rlim_max = nr_open + 1024;
+ EXPECT_EQ(0, setrlimit(RLIMIT_NOFILE, &rlimit)) {
+ lseek(fd, 0, SEEK_SET);
+ write(fd, buf, n);
+ exit(EXIT_FAILURE);
+ }
+ } else {
+ /*
+ * If nr_open is already at maximum, use a fallback value
+ * for RLIMIT_NOFILE that is large enough for the test.
+ */
+ rlimit.rlim_cur = 1048576;
+ rlimit.rlim_max = 1048576;
+ EXPECT_EQ(0, setrlimit(RLIMIT_NOFILE, &rlimit)) {
+ lseek(fd, 0, SEEK_SET);
+ write(fd, buf, n);
+ exit(EXIT_FAILURE);
+ }
}
/* get a descriptor past the old fs.nr_open */
--
2.53.0
reply other threads:[~2026-09-07 13:30 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=20260907132853.3596858-1-jinli@lanxincomputing.com \
--to=jinli@lanxincomputing.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=shuah@kernel.org \
/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.