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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®