All Virtuozzo development lists (kernel + QEMU)
 help / color / mirror / Atom feed
From: Konstantin Khorenko <khorenko@virtuozzo.com>
Subject: [Devel] [PATCH RHEL10 COMMIT] selftests/core: fix unshare_test with large fs.nr_open
Date: Fri, 14 Aug 2026 18:24:25 +0200	[thread overview]
Message-ID: <202608141624.67EGOP7F278691@f0.sw.ru> (raw)
In-Reply-To: <20260814161852.278262-2-khorenko@virtuozzo.com>

The commit is pushed to "branch-rh10-6.12.0-211.39.1.16.x.vz10-ovz" and will appear at git at bitbucket.org:openvz/vzkernel.git
after rh10-6.12.0-211.39.1.16.4.vz10
------>
commit cade8d2ddfe60d4ea67bc95b44ea9ed0585989ab
Author: Eva Kurchatova <eva.kurchatova@virtuozzo.com>
Date:   Fri Aug 14 14:35:43 2026 +0200

    selftests/core: fix unshare_test with large fs.nr_open
    
    The test assumes fs.nr_open is close to the default 1048576, but some
    systems set it much higher (e.g. 1073741816). This is systemd's doing:
    since systemd v240 (2018), PID 1 bumps fs.nr_open and fs.file-max to
    their largest possible values on boot, as file descriptors are already
    accounted for by memcg [1].
    
    In that case, dup2() to nr_open + 64 requires the kernel to allocate a
    file descriptor table with ~1 billion entries, which fails with ENOMEM.
    
    Cap the nr_open value used for the test's own arithmetic to a known
    reasonable base value (1048576) and restore the true original value
    once the test has completed.
    
    [1] https://github.com/systemd/systemd/commit/a8b627aaed409a15260c25988970c795bf963812
        ("main: bump fs.nr_open + fs.max-file to their largest possible values")
    
    https://virtuozzo.atlassian.net/browse/VSTOR-132444
    
    Feature: fix kselftests
    Signed-off-by: Eva Kurchatova <eva.kurchatova@virtuozzo.com>
    Signed-off-by: Konstantin Khorenko <khorenko@virtuozzo.com>
---
 tools/testing/selftests/core/unshare_test.c | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/core/unshare_test.c b/tools/testing/selftests/core/unshare_test.c
index 7fec9dfb1b0e3..6716e0f74d7da 100644
--- a/tools/testing/selftests/core/unshare_test.c
+++ b/tools/testing/selftests/core/unshare_test.c
@@ -40,6 +40,14 @@ TEST(unshare_EMFILE)
 
 	ASSERT_EQ(sscanf(buf, "%d", &nr_open), 1);
 
+	/*
+	 * Cap nr_open for the duration of the test to avoid ENOMEM from a
+	 * huge fd table allocation; buf/n keep the real original value so
+	 * fs.nr_open can be restored to it once the test is done.
+	 */
+	if (nr_open > 1024 * 1024)
+		nr_open = 1024 * 1024;
+
 	ASSERT_EQ(0, getrlimit(RLIMIT_NOFILE, &rlimit));
 
 	/* bump fs.nr_open */
@@ -73,10 +81,13 @@ TEST(unshare_EMFILE)
 
 	if (pid == 0) {
 		int err;
+		char buf3[32];
+		ssize_t n3;
 
-		/* restore fs.nr_open */
+		/* restore fs.nr_open to the (possibly capped) test baseline */
+		n3 = sprintf(buf3, "%d\n", nr_open);
 		lseek(fd, 0, SEEK_SET);
-		write(fd, buf, n);
+		write(fd, buf3, n3);
 		/* ... and now unshare(CLONE_FILES) must fail with EMFILE */
 		err = unshare(CLONE_FILES);
 		EXPECT_EQ(err, -1)
@@ -89,6 +100,10 @@ TEST(unshare_EMFILE)
 	EXPECT_EQ(waitpid(pid, &status, 0), pid);
 	EXPECT_EQ(true, WIFEXITED(status));
 	EXPECT_EQ(0, WEXITSTATUS(status));
+
+	/* restore the real fs.nr_open value */
+	lseek(fd, 0, SEEK_SET);
+	write(fd, buf, n);
 }
 
 TEST_HARNESS_MAIN

      reply	other threads:[~2026-08-14 16:24 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20260518113556.516760-1-eva.kurchatova@virtuozzo.com>
2026-08-14 16:18 ` [Devel] [PATCH vz10 v2 0/1] " Konstantin Khorenko
2026-08-14 16:18   ` [Devel] [PATCH vz10 v2 1/1] " Konstantin Khorenko
2026-08-14 16:24     ` Konstantin Khorenko [this message]

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=202608141624.67EGOP7F278691@f0.sw.ru \
    --to=khorenko@virtuozzo.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.