From patchwork Sat Feb 3 00:05:01 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Brown X-Patchwork-Id: 196101 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:9bc1:b0:106:209c:c626 with SMTP id op1csp769320dyc; Fri, 2 Feb 2024 16:10:28 -0800 (PST) X-Google-Smtp-Source: AGHT+IHznM8qIp+xYHOalPk8qChptMe7yAAYIy3AJIZhtustHV1vRsD7kh2ZDEbdu4IzC0rNVAGa X-Received: by 2002:a17:903:264a:b0:1d9:44d4:706b with SMTP id je10-20020a170903264a00b001d944d4706bmr3771041plb.50.1706919028692; Fri, 02 Feb 2024 16:10:28 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706919028; cv=pass; d=google.com; s=arc-20160816; b=scbDyyLdM3bRiHUMnPhxIY2LzlGvJkZA4CGtx/qybEmBboVV64O0LZ/YQ1Vkg5/0yX dblXQX/NammVjAYLq+BTTRb32wF6kAmDvl2gDMzrT7peI/LR1biUCTu0+2RMsq6wb7+f KqODjyCAiwMwH0is4SJD0Xnr149p6IZNrz4qFgEzpdIMC8X/ow2ctUVJvPscxswWcO7U rS24M8eftwAQWAcV6ZLUA1PdWCWmu+XAiZ6q3tv1sd84ABoo1dOv0M0Ppc70AwiODnvY Bo8m6rKz+vtxsI0dRPMLUUZp2227O+7gMPRqqM6PedP09B4AM3tnWIvd0Wais5F2VVLj w6JA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :subject:date:from:dkim-signature; bh=vVZkVRUin1/QmjMnw/YaKi0zacs/6BQ0/2j1SkJTQ38=; fh=cQYB/P4bTh6EId60PvdRTG4gjYv2OMGfHGsAfIdbdas=; b=CDOQ0QgmcPqFcDuHUew0n7/vMeKwUQFX1yO5HhHVXDtjQBtyBSagjNSQWJS9K3jw6B 9Y4iDFLyg3j9RvnjLRK1lZVCeFipLlB1nNj+Wo3h21mVU4ueK/fiDD5X/ojNrDovRbRm 30zSwETktaaDvSz2enp+roXd1z1BxQo1T5igEOBSwY4Kr/tI/QF5gk73Tj/qw9wdG+B8 1E4+sxlFivuNhCS9HtPxdL0pu/r1q7YaoeD5EeFPGd5duXrIJlX6cyhRg4eAWfaOci5V ElwJX+kYhHBHsaYaGtI5PiKecSAX2m8L04L0wsu8TwhK1016hnmP4vAykd4V3KyCmtoR Ze3A==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=jLsFaBFH; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-50743-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-50743-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org X-Forwarded-Encrypted: i=1; AJvYcCU90JeM77h/fP3oDt4wB1n6FORV5k1N+m9WcdvbQAT8P61gqQ4daaONGyAMyeezTLs6ri6dkn838o8OXBEd5Imo0VdnSA== Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [147.75.48.161]) by mx.google.com with ESMTPS id 21-20020a170902e9d500b001d757b25122si2387497plk.235.2024.02.02.16.10.28 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 02 Feb 2024 16:10:28 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-50743-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) client-ip=147.75.48.161; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=jLsFaBFH; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-50743-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-50743-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 2E944B286D8 for ; Sat, 3 Feb 2024 00:07:19 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id B047779F9; Sat, 3 Feb 2024 00:05:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="jLsFaBFH" 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 A951979C8; Sat, 3 Feb 2024 00:05:55 +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=1706918755; cv=none; b=fv3Kf6ycqe02P7uQ2ebqYx4yJ6Nww6ULyaFC6bS5jCuu8IySNcwTv3farEUfU9oCk74SPCRhmN08OPJB0EVYc62jkIGE5SN+hGwJHNR7fXvjop1nlrUQJRj9CWtJ1goetftoeV69S8hZ9/JT1q1KThwC0w4IVhcTAqBymHJZYYQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706918755; c=relaxed/simple; bh=bhar0tJdOqw54YK6iRyaAGbYhafIqhucm+rmgUHLm6s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pTb+VK7u0xunhpbZ7eXWs9LN1PbvDWCDVOwlcK4iFpqRK/Qj/U2oqA0ggoD+caTqkhUVaZ5oSU6fx6GZIMZFk+fzs9hXVCccSKmesl4BPOYrC/x9Rb0NIHXRHbl70KmI0SaU6ON+rB6yacSxB3QY9hmluPKLrBgNot5FADamEz4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jLsFaBFH; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7D673C433B2; Sat, 3 Feb 2024 00:05:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1706918755; bh=bhar0tJdOqw54YK6iRyaAGbYhafIqhucm+rmgUHLm6s=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=jLsFaBFHCSBrixG4hcZYBOrB75ouuKUlnr438pHKofOeoOX0TyBaenr1drDbtiVOn fsSMxgGZLw6xzRMrZiZFtxYWRWXbtmyr25rKMdb9emXXXMUpkluCi2NRzoLhBU9xxL Hfyu4/PBkX9fILuTsLwBCgwYxHxc0Zrl/yH/pulfiFiertbPT/SBG+/ZAz3bfJh6Sw 7FilMJi8lmrz5uYlTn6anerHlGiGl4uk13g9wHFfC0DYK5phUkwOEGPedfIz+efABv 5EJrILPHLdCe077NB2jmQFC+w6zWvDSTRGcG/t+KYg2/WgQ+81SJYcI+GDme92svv5 vuaWJTTqnH1TQ== From: Mark Brown Date: Sat, 03 Feb 2024 00:05:01 +0000 Subject: [PATCH RFT v5 5/7] 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 Message-Id: <20240203-clone3-shadow-stack-v5-5-322c69598e4b@kernel.org> References: <20240203-clone3-shadow-stack-v5-0-322c69598e4b@kernel.org> In-Reply-To: <20240203-clone3-shadow-stack-v5-0-322c69598e4b@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 , Daniel Bristot de Oliveira , Valentin Schneider , Christian Brauner , Shuah Khan Cc: linux-kernel@vger.kernel.org, Catalin Marinas , Will Deacon , Kees Cook , jannh@google.com, bsegall@google.com, linux-kselftest@vger.kernel.org, linux-api@vger.kernel.org, Mark Brown X-Mailer: b4 0.13-dev-a684c X-Developer-Signature: v=1; a=openpgp-sha256; l=3743; i=broonie@kernel.org; h=from:subject:message-id; bh=bhar0tJdOqw54YK6iRyaAGbYhafIqhucm+rmgUHLm6s=; b=owEBbQGS/pANAwAKASTWi3JdVIfQAcsmYgBlvYM7GLBbYi7dllKXEgV0RzBo5WGltkP1CeQGkqcm Wo26q8yJATMEAAEKAB0WIQSt5miqZ1cYtZ/in+ok1otyXVSH0AUCZb2DOwAKCRAk1otyXVSH0ASJB/ 9ktbBQUb2QeI7D2t4eFe8bPvy6+UZ6NzcbA0Nn3XBIyLkTyY8CeLqC6RTeM3xol6c2hX/1b58LObXo QZbXvri/s4lbDvZDP1pdFkiK4E/m2piEnIC0SJ4ScW9+b1ju9MofbVZR0FnylTQ1rhTUTh5ss8TD4+ p1FhU0J6YqCUJ1b3SvziccgEd9HrYPq/yINeKh3rabAF+jYcg45utYiCjh9pgVVK7k3mGlipq4lQ7I YTzKFhdosYBgeSHLsFeLpNWNGGBn1p7nOs4JnI3Y/adkaxKGawOB2xVFgZyQ2q46zGEW51w3oufksY TFxHYhHl5Z7UnnCc7C84G7pCkwETAV X-Developer-Key: i=broonie@kernel.org; a=openpgp; fpr=3F2568AAC26998F9E813A1C5C3F436CA30F5D8EB X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1789834327170092123 X-GMAIL-MSGID: 1789834327170092123 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. 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 3c9bf0cd82a8..1108bd8e36d6 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 = { @@ -104,30 +117,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) { @@ -155,16 +178,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()", @@ -314,24 +327,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(); }