Received: by 2002:a05:6358:16cc:b0:ea:6187:17c9 with SMTP id r12csp4984311rwl; Sun, 8 Jan 2023 06:44:19 -0800 (PST) X-Google-Smtp-Source: AMrXdXul9Ku28h/csJ2mW1bjeNr5ChKpxwvyGG8T7TXtU5PHrWY2OEOJCDBQxZY3W0YCAYztO7zD X-Received: by 2002:a17:906:30c2:b0:7ae:c0b:a25c with SMTP id b2-20020a17090630c200b007ae0c0ba25cmr48501153ejb.13.1673189059642; Sun, 08 Jan 2023 06:44:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673189059; cv=none; d=google.com; s=arc-20160816; b=T56nzs87MJvvwnEFBXNcrC6NbXyLBrtEQ+E6caEqAnprCAh+9ygYbwAOFas2fqF3GB MQ5aNCFN74xLNJvFNA/ZD3lito9AAhoS4IITI6d2cbJ78b1FCsEz5BQ61+4g5yE/6AkH UqjgzfQg+nfV20QNV/dL8AInLLO4hyRfti7ffHVQk92TpAXMD7uLsgPra31kUkELFnbP trQV10r0bpYr/O5o2JX63VYPPfBLK0T0p7cSYT/a94uCmCIMHWIjqwYbA3N98Z7FB8tp IJdjHj0JipHOzHVkzJo5fR8Kbz3I4PyB6fd/UOm9p2+5tYuXNzvyO+FG9yESxoUR4WwL qtcg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=gEkN9LZgBWtHv6wa3k0M7O0AiSsnRAs/DRQhQtYa60I=; b=BnYI5BU2/f2z0MGSie07c/+mlFWn1FmORxr9GV4LydD3TUSqfDrMBV7y3HyANypyTK TDici1zIv+EAbabR0BN3yroXGuBOmSRM++CtKqNwjIdD9/ICMXNZTKonwCSwHdAYpMO6 CRKXVhu1j+7RlMEBJPJRsuX9GKA2piJYOaTM+eTXpzfMrtO2LKEG8Da988utVrwmlJ3z wJ6CTwqlBpKbUu2mVXcQVVBeCAtosYrqsPPsjq41MxiW6Uq3zGuk6bXmyGerck1DIe3M 8xoI6EvbfNBm1J2JGq/yBxnasJ5dwdbnX5eqzLo6Iq3rusqSo7iwA/K6qyqf5Irxmuq+ U3aA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gnuweeb.org header.s=default header.b=NpytHYUz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnuweeb.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e12-20020a17090658cc00b00805ea749ee4si7277688ejs.474.2023.01.08.06.44.05; Sun, 08 Jan 2023 06:44:19 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gnuweeb.org header.s=default header.b=NpytHYUz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnuweeb.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234231AbjAHN7t (ORCPT + 54 others); Sun, 8 Jan 2023 08:59:49 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51510 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234916AbjAHN72 (ORCPT ); Sun, 8 Jan 2023 08:59:28 -0500 Received: from gnuweeb.org (gnuweeb.org [51.81.211.47]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2BDC5DEAB; Sun, 8 Jan 2023 05:59:21 -0800 (PST) Received: from localhost.localdomain (unknown [182.253.183.184]) by gnuweeb.org (Postfix) with ESMTPSA id 1CD0A7E6EE; Sun, 8 Jan 2023 13:59:17 +0000 (UTC) X-GW-Data: lPqxHiMPbJw1wb7CM9QUryAGzr0yq5atzVDdxTR0iA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gnuweeb.org; s=default; t=1673186360; bh=FDH1SiFwyTAYw73kTXZ3LWXEORDAq51IpBI/AfSBiCw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NpytHYUzml+I6lOZoeqsb+qnJPvs010A+G1N2Z9l8NpQYtjmmimkeEjDJP25fuWTQ zox777FEhhiFuYO4tuPBCojzPKsK8J9abdl29cNZBvhfCwGEVf2TMtV1r7tE6YI1p1 AkB8EbBJ34fFK3w0z+kKCKGQRBIUB3X6vwCqScP8GvMZqZOt3xD1NFYcv+pli4DSGd anXffvFKretW9siunjzWXt+Wl1vg/NctDdzOI9ViOAPUbiqOlPAZ9u7lDLrGYmmdbo pom3VPP3fyGLnM/zO/qVnoiBnqe4pA+m95u/r6L9PlWW9wqsxCSjfGsc88U2FdSvFS ngQzUaHwBUckQ== From: Ammar Faizi To: Willy Tarreau Cc: Ammar Faizi , Shuah Khan , "Paul E. McKenney" , Gilang Fachrezy , Alviro Iskandar Setiawan , GNU/Weeb Mailing List , Linux Kernel Mailing List , Linux Kselftest Mailing List Subject: [PATCH v3 3/5] selftests/nolibc: Add `fork(2)` selftest Date: Sun, 8 Jan 2023 20:59:02 +0700 Message-Id: <20230108135904.851762-4-ammar.faizi@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230108135904.851762-1-ammar.faizi@intel.com> References: <20230108135904.851762-1-ammar.faizi@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Ammar Faizi Ensure the fork() function can create a child process. Also, when the child exits, the parent must be able to get the child's exit code via waitpid(). Signed-off-by: Ammar Faizi --- tools/testing/selftests/nolibc/nolibc-test.c | 45 ++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/tools/testing/selftests/nolibc/nolibc-test.c b/tools/testing/selftests/nolibc/nolibc-test.c index 3a78399f4624..cb6ec9f71aae 100644 --- a/tools/testing/selftests/nolibc/nolibc-test.c +++ b/tools/testing/selftests/nolibc/nolibc-test.c @@ -471,6 +471,50 @@ static int test_getpagesize(void) return !c; } +/* + * Test fork(). + * Make sure the exit code can be read from the parent process. + */ +static int test_fork_and_exit(int expected_code) +{ + int status; + int code; + pid_t ret; + pid_t p; + + p = fork(); + if (p < 0) + return p; + + if (!p) + exit(expected_code); + + do { + ret = waitpid(p, &status, 0); + if (ret < 0) + return ret; + } while (!WIFEXITED(status)); + + code = WEXITSTATUS(status); + if (code != expected_code) { + printf("test_fork_and_exit(): waitpid(): Invalid exit code: %d; expected = %d\n", code, expected_code); + return -1; + } + + return 0; +} + +static int test_fork(void) +{ + int i; + + for (i = 0; i < 255; i++) { + if (test_fork_and_exit(i)) + return -1; + } + return 0; +} + /* Run syscall tests between IDs and . * Return 0 on success, non-zero on failure. */ @@ -523,6 +567,7 @@ int run_syscall(int min, int max) CASE_TEST(dup3_0); tmp = dup3(0, 100, 0); EXPECT_SYSNE(1, tmp, -1); close(tmp); break; CASE_TEST(dup3_m1); tmp = dup3(-1, 100, 0); EXPECT_SYSER(1, tmp, -1, EBADF); if (tmp != -1) close(tmp); break; CASE_TEST(execve_root); EXPECT_SYSER(1, execve("/", (char*[]){ [0] = "/", [1] = NULL }, NULL), -1, EACCES); break; + CASE_TEST(fork); EXPECT_SYSZR(1, test_fork()); break; CASE_TEST(getdents64_root); EXPECT_SYSNE(1, test_getdents64("/"), -1); break; CASE_TEST(getdents64_null); EXPECT_SYSER(1, test_getdents64("/dev/null"), -1, ENOTDIR); break; CASE_TEST(gettimeofday_null); EXPECT_SYSZR(1, gettimeofday(NULL, NULL)); break; -- Ammar Faizi