From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 138BC2F6566; Tue, 2 Sep 2025 10:22:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756808578; cv=none; b=HGJd8UimezKJM+/+RxuhiY4mzJn8NM3gkcMdNd2VOLiHOHosW5JxNhO9qo+lrBmkum+gnMuU+q9xY1/d6u09tYvNtRkMX0j00XuhpIHldvMqio5ZXiWKW7FiO1PujFHCbi+iRDic9k/I1HG0KftODxzT8C4gpCf+WdL4FArJdJ0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756808578; c=relaxed/simple; bh=XMiGAtjdArL2gbxrFhicE4t6Y0M2WueXT37wxBI+sMo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VGDY2TGc+TmQ9PKtj4B5NtGtJuRuJvlk7lhlbL3HCLkINB+icoLbuCvW4ClVtGwTkvmneBj/+sxZ7BbIlddswn/0Dv8Mf+NtyQjMFOFSKIEn8K8Z+OM/z3mB8vq2HblMIZEJh73HNZRiTq8AaaHfcTWQNT5h3TJFMnyVyQILW8Q= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jcJ4ZZVR; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="jcJ4ZZVR" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8E347C4CEF5; Tue, 2 Sep 2025 10:22:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1756808577; bh=XMiGAtjdArL2gbxrFhicE4t6Y0M2WueXT37wxBI+sMo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=jcJ4ZZVRj2d5gP9vQgZ43cllsOe47I4PJWXPNF0FfxMO/t5XsmkaGkEAvuN785Jsf RX71rTcI/p/qjt5CG9VE/YjUcNH642b+EojIQxgpFDbnkYJ3gmBU2pqwh4rjNPEe8h BOEut+kG8d2orOr1AfpCUuA+i844W2IsNz5CZov2IBp2rItXpMTl6DzQUaT1DO2Ygz gKg1n7sa4kCUAsXTakJdMIKsGK+VWzR3JKC417Ghg9GRkSpHo5KNJ5hJVgyMuEKCYA ZFIhl0hmhgchSQFKw6i9pfTPbK2R12abrJK2ZwBPJXSunsoyZg8D2NVaW3az2TybIf ySEQpfPh2gHuA== From: Mark Brown Date: Tue, 02 Sep 2025 11:21:50 +0100 Subject: [PATCH v20 6/8] selftests/clone3: Factor more of main loop into test_clone3() Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20250902-clone3-shadow-stack-v20-6-4d9fff1c53e7@kernel.org> References: <20250902-clone3-shadow-stack-v20-0-4d9fff1c53e7@kernel.org> In-Reply-To: <20250902-clone3-shadow-stack-v20-0-4d9fff1c53e7@kernel.org> To: "Rick P. Edgecombe" , Deepak Gupta , Szabolcs Nagy , "H.J. Lu" , Florian Weimer , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Christian Brauner , Shuah Khan Cc: linux-kernel@vger.kernel.org, Catalin Marinas , Will Deacon , jannh@google.com, bsegall@google.com, Andrew Morton , Yury Khrustalev , Wilco Dijkstra , linux-kselftest@vger.kernel.org, linux-api@vger.kernel.org, Mark Brown , Kees Cook , Kees Cook , Shuah Khan X-Mailer: b4 0.15-dev-cff91 X-Developer-Signature: v=1; a=openpgp-sha256; l=3987; i=broonie@kernel.org; h=from:subject:message-id; bh=XMiGAtjdArL2gbxrFhicE4t6Y0M2WueXT37wxBI+sMo=; b=owEBbQGS/pANAwAKASTWi3JdVIfQAcsmYgBotsVXgGoEf6Nti5rmUyeNKtA+J1F32QsBFy0sr kTaa541022JATMEAAEKAB0WIQSt5miqZ1cYtZ/in+ok1otyXVSH0AUCaLbFVwAKCRAk1otyXVSH 0JcVB/wJOlhl3F2rxHCjs1vAOo9AWHUNXOlygJqYzoXRc8JvFZxpC8nlsYZSRwkxP4oo+YwH44d Fs/BXTmQdxd9Ut17+OzLymZnxZ/jhyTI+xRC+wsY9nw8+r76360Hk2Kazabga90ng1gYSKKCrPC ekYdmivALKN6YY3EVVQqT1e3IwCrZxBAX2k6fAX9dc6rFJw3WrMWqoifnq3w6GWJUk9mKwtwmQz d2d9uHSZPWC5oyHse9dMQnnrXcBB+7tFaQWTPX/ul5846JH8gga3MLLSyHE/8PE7tYqxr0yhF06 56zLw/4PTdpz4vNjEM2nKGzOhlSJBvtMpf/KBYTSAgK35VjA X-Developer-Key: i=broonie@kernel.org; a=openpgp; fpr=3F2568AAC26998F9E813A1C5C3F436CA30F5D8EB In order to make it easier to add more configuration for the tests and more support for runtime detection of when tests can be run pass the structure describing the tests into test_clone3() rather than picking the arguments out of it and have that function do all the per-test work. No functional change. Reviewed-by: Kees Cook Tested-by: Kees Cook Acked-by: Shuah Khan Reviewed-by: Catalin Marinas Tested-by: Rick Edgecombe Signed-off-by: Mark Brown --- tools/testing/selftests/clone3/clone3.c | 77 ++++++++++++++++----------------- 1 file changed, 37 insertions(+), 40 deletions(-) diff --git a/tools/testing/selftests/clone3/clone3.c b/tools/testing/selftests/clone3/clone3.c index e61f07973ce5..e066b201fa64 100644 --- a/tools/testing/selftests/clone3/clone3.c +++ b/tools/testing/selftests/clone3/clone3.c @@ -30,6 +30,19 @@ enum test_mode { CLONE3_ARGS_INVAL_EXIT_SIGNAL_NSIG, }; +typedef bool (*filter_function)(void); +typedef size_t (*size_function)(void); + +struct test { + const char *name; + uint64_t flags; + size_t size; + size_function size_function; + int expected; + enum test_mode test_mode; + filter_function filter; +}; + static int call_clone3(uint64_t flags, size_t size, enum test_mode test_mode) { struct __clone_args args = { @@ -109,30 +122,40 @@ static int call_clone3(uint64_t flags, size_t size, enum test_mode test_mode) return 0; } -static bool test_clone3(uint64_t flags, size_t size, int expected, - enum test_mode test_mode) +static void test_clone3(const struct test *test) { + size_t size; int ret; + if (test->filter && test->filter()) { + ksft_test_result_skip("%s\n", test->name); + return; + } + + if (test->size_function) + size = test->size_function(); + else + size = test->size; + + ksft_print_msg("Running test '%s'\n", test->name); + ksft_print_msg( "[%d] Trying clone3() with flags %#" PRIx64 " (size %zu)\n", - getpid(), flags, size); - ret = call_clone3(flags, size, test_mode); + getpid(), test->flags, size); + ret = call_clone3(test->flags, size, test->test_mode); ksft_print_msg("[%d] clone3() with flags says: %d expected %d\n", - getpid(), ret, expected); - if (ret != expected) { + getpid(), ret, test->expected); + if (ret != test->expected) { ksft_print_msg( "[%d] Result (%d) is different than expected (%d)\n", - getpid(), ret, expected); - return false; + getpid(), ret, test->expected); + ksft_test_result_fail("%s\n", test->name); + return; } - return true; + ksft_test_result_pass("%s\n", test->name); } -typedef bool (*filter_function)(void); -typedef size_t (*size_function)(void); - static bool not_root(void) { if (getuid() != 0) { @@ -160,16 +183,6 @@ static size_t page_size_plus_8(void) return getpagesize() + 8; } -struct test { - const char *name; - uint64_t flags; - size_t size; - size_function size_function; - int expected; - enum test_mode test_mode; - filter_function filter; -}; - static const struct test tests[] = { { .name = "simple clone3()", @@ -319,24 +332,8 @@ int main(int argc, char *argv[]) ksft_set_plan(ARRAY_SIZE(tests)); test_clone3_supported(); - for (i = 0; i < ARRAY_SIZE(tests); i++) { - if (tests[i].filter && tests[i].filter()) { - ksft_test_result_skip("%s\n", tests[i].name); - continue; - } - - if (tests[i].size_function) - size = tests[i].size_function(); - else - size = tests[i].size; - - ksft_print_msg("Running test '%s'\n", tests[i].name); - - ksft_test_result(test_clone3(tests[i].flags, size, - tests[i].expected, - tests[i].test_mode), - "%s\n", tests[i].name); - } + for (i = 0; i < ARRAY_SIZE(tests); i++) + test_clone3(&tests[i]); ksft_finished(); } -- 2.39.5