From nobody Fri Dec 19 05:59:56 2025 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 3CA3A332918; Thu, 18 Dec 2025 08:13:39 +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=1766045619; cv=none; b=pWk9HadHWthr6AA/yrPHIaeg2TsMm7MCA1hypzqJPUWHY0R42WH/8sqx5EvtzicrYnCu8gmc2d2Fo+0C/6K5MReU3S7YzEpOk22EToto/9MiWDSUDWO6XQTsB52O9yD0c6lzJp3f+XBPU74PG14A3o7sSzFG9fcGBGyILg33pNE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766045619; c=relaxed/simple; bh=d62mKnZ8KnVaUGN6V9Sf3vOPMwiSvjXfVmsMQG7U0Yg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JpucoHMySLZU/GGCxGUdIBiMZh0FxQx/ojj1HRLX/HgR/fPb8+rvLx2cmZIMZPDGNC0ckrB+SyPfnhUEG0Dm+/unrgMcWifGAZZVd8g0Mz6Zf+11frTfoszg+RU9z4xJ7Vc6sw0McZ4Ovys7KESaffOkb7MTeQ092vFp/k7Co9c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ipntjqPS; 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="ipntjqPS" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1B020C19422; Thu, 18 Dec 2025 08:13:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1766045619; bh=d62mKnZ8KnVaUGN6V9Sf3vOPMwiSvjXfVmsMQG7U0Yg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ipntjqPSASQDkkyaGqBYOZ3NCdBuysXrFQjx5/K2m0AU0faZ8KcY6ck6p5ZBAVYk2 nmMmpbbLOkWDtxKTuU4zaxFg0SkL+sOVbUELctRmEpWxnC3/E/Jt4xZM+dLoNdrPjS sf1isWMXvfWxdSrcdzHjkHLshJsqSuE4AZCqFcjRfb8VX5R9gj7an5fy6poOENeoy6 /F75zTZ9+aQV78oofoYrDGgAC6KYOSkVoeASeRt7p1PehYo0s8lDQzXP3lshOmdaIp DG+wP6BBVsfxwcV8n+yZWParV9aV9l22+9w1wapo5d3SysBKsTLh3vmgO+Qa6sZ8YT 2ZT5llQLlkRmg== From: Mark Brown Date: Thu, 18 Dec 2025 08:10:11 +0000 Subject: [PATCH v23 6/8] selftests/clone3: Factor more of main loop into test_clone3() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251218-clone3-shadow-stack-v23-6-7cb318fbb385@kernel.org> References: <20251218-clone3-shadow-stack-v23-0-7cb318fbb385@kernel.org> In-Reply-To: <20251218-clone3-shadow-stack-v23-0-7cb318fbb385@kernel.org> To: "Rick P. Edgecombe" , Deepak Gupta , "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 , "H.J. Lu" , Adhemerval Zanella Netto , Wilco Dijkstra , CarlosO'Donell , Florian Weimer , Rich Felker , linux-kselftest@vger.kernel.org, linux-api@vger.kernel.org, Mark Brown , Kees Cook , Kees Cook , Shuah Khan X-Mailer: b4 0.15-dev-47773 X-Developer-Signature: v=1; a=openpgp-sha256; l=3987; i=broonie@kernel.org; h=from:subject:message-id; bh=d62mKnZ8KnVaUGN6V9Sf3vOPMwiSvjXfVmsMQG7U0Yg=; b=owGbwMvMwMWocq27KDak/QLjabUkhkzn7XVsm+eE7C4P9li78eRinj/z1nTxTLnupOko3LT7U NyyshLdTkZjFgZGLgZZMUWWtc8yVqWHS2yd/2j+K5hBrEwgUxi4OAVgIleWsv/39PlWzPLYQNRr 50X+pdGOXy/wr2fV+F/g0vy4mVdNe5m1nMMxhUvbjisayfTXsU4tEKzdF2603miLaK3os3a9gkD 9vomqq4ub/FwXJ17sVf8WU8G2pUzBuPOodB9bkiL/goTARIcF+9+L9rfcfX3hcP5cgS8v63IZ1p kW5guwvWE3Ovqt3Ckq4mihfuOlrqhPH649ik7Z7K8453vhf9ZimXOHzU+mH3cXOblW7532e//mA v+eK5f6BHsbNQ8vmuf0bGf5l0YZsztLfTKnrvcI7VIovtx2/6DAVx5hzogHDFfLX6z1lOll79jo nzp729qKiat69J9w/J5XuFVd6mWt4HXLooyOCfb9012MAQ== 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/selfte= sts/clone3/clone3.c index 289e0c7c1f09..8c852d022c55 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, }; =20 +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_mo= de) { struct __clone_args args =3D { @@ -109,30 +122,40 @@ static int call_clone3(uint64_t flags, size_t size, e= num test_mode test_mode) return 0; } =20 -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; =20 + if (test->filter && test->filter()) { + ksft_test_result_skip("%s\n", test->name); + return; + } + + if (test->size_function) + size =3D test->size_function(); + else + size =3D 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 =3D call_clone3(flags, size, test_mode); + getpid(), test->flags, size); + ret =3D 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 !=3D expected) { + getpid(), ret, test->expected); + if (ret !=3D 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; } =20 - return true; + ksft_test_result_pass("%s\n", test->name); } =20 -typedef bool (*filter_function)(void); -typedef size_t (*size_function)(void); - static bool not_root(void) { if (getuid() !=3D 0) { @@ -160,16 +183,6 @@ static size_t page_size_plus_8(void) return getpagesize() + 8; } =20 -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[] =3D { { .name =3D "simple clone3()", @@ -319,24 +332,8 @@ int main(int argc, char *argv[]) ksft_set_plan(ARRAY_SIZE(tests)); test_clone3_supported(); =20 - for (i =3D 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 =3D tests[i].size_function(); - else - size =3D 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 =3D 0; i < ARRAY_SIZE(tests); i++) + test_clone3(&tests[i]); =20 ksft_finished(); } --=20 2.47.3