From 486b257357c23743d9729ea715136d105fff461e Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Wed, 21 Oct 2026 13:46:59 +0200 Subject: [PATCH] selftests/namespaces: check listns() with a U64_MAX cursor Pass the largest possible namespace id as the cursor and check that listns() fails with ENOENT instead of starting over: - in the unified tree - in a type-specific tree - in the owner tree of the caller's user namespace Nothing can come after the largest possible id. Link: https://patch.msgid.link/20261021-work-mount-statmount_listns_fixes-v1-6-8917a4c1bd14@kernel.org Signed-off-by: Christian Brauner (Amutable) --- .../selftests/namespaces/listns_test.c | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/tools/testing/selftests/namespaces/listns_test.c b/tools/testing/selftests/namespaces/listns_test.c index 8a95789d6a87..538d60f908b4 100644 --- a/tools/testing/selftests/namespaces/listns_test.c +++ b/tools/testing/selftests/namespaces/listns_test.c @@ -676,4 +676,38 @@ TEST(listns_error_cases) } } +/* + * A cursor at the largest possible namespace id must not wrap around and + * restart the listing from the beginning. + */ +TEST(listns_cursor_max) +{ + struct ns_id_req req = { + .size = sizeof(req), + .ns_id = ULLONG_MAX, + }; + __u64 ns_ids[10]; + ssize_t ret; + + /* unified tree */ + ret = sys_listns(&req, ns_ids, ARRAY_SIZE(ns_ids), 0); + if (ret < 0 && errno == ENOSYS) + SKIP(return, "listns() not supported"); + ASSERT_EQ(ret, -1); + ASSERT_EQ(errno, ENOENT); + + /* type-specific tree */ + req.ns_type = CLONE_NEWUSER; + ret = sys_listns(&req, ns_ids, ARRAY_SIZE(ns_ids), 0); + ASSERT_EQ(ret, -1); + ASSERT_EQ(errno, ENOENT); + + /* owner tree */ + req.ns_type = 0; + req.user_ns_id = LISTNS_CURRENT_USER; + ret = sys_listns(&req, ns_ids, ARRAY_SIZE(ns_ids), 0); + ASSERT_EQ(ret, -1); + ASSERT_EQ(errno, ENOENT); +} + TEST_HARNESS_MAIN