From patchwork Thu Apr 19 02:50:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiao Yang X-Patchwork-Id: 900538 X-Patchwork-Delegate: petr.vorel@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=lists.linux.it (client-ip=2001:1418:10:5::2; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=cn.fujitsu.com Received: from picard.linux.it (picard.linux.it [IPv6:2001:1418:10:5::2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40RP0q4Bfnz9s1l for ; Thu, 19 Apr 2018 13:02:19 +1000 (AEST) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id D810E3E6C83 for ; Thu, 19 Apr 2018 05:02:16 +0200 (CEST) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-2.smtp.seeweb.it (in-2.smtp.seeweb.it [217.194.8.2]) by picard.linux.it (Postfix) with ESMTP id D21F33E6C30 for ; Thu, 19 Apr 2018 05:02:14 +0200 (CEST) Received: from heian.cn.fujitsu.com (unknown [183.91.158.132]) by in-2.smtp.seeweb.it (Postfix) with ESMTP id A57CA600FF6 for ; Thu, 19 Apr 2018 05:02:00 +0200 (CEST) X-IronPort-AV: E=Sophos;i="5.43,368,1503331200"; d="scan'208";a="39109178" Received: from localhost (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 19 Apr 2018 11:01:47 +0800 Received: from G08CNEXCHPEKD02.g08.fujitsu.local (unknown [10.167.33.83]) by cn.fujitsu.com (Postfix) with ESMTP id B8C7E4B5CBF6 for ; Thu, 19 Apr 2018 11:01:48 +0800 (CST) Received: from RHEL7U5Alpha_SERVER.g08.fujitsu.local (10.167.220.185) by G08CNEXCHPEKD02.g08.fujitsu.local (10.167.33.89) with Microsoft SMTP Server (TLS) id 14.3.361.1; Thu, 19 Apr 2018 11:01:47 +0800 From: Xiao Yang To: Date: Thu, 19 Apr 2018 10:50:56 +0800 Message-ID: <1524106257-4711-1-git-send-email-yangx.jy@cn.fujitsu.com> X-Mailer: git-send-email 1.8.3.1 MIME-Version: 1.0 X-Originating-IP: [10.167.220.185] X-yoursite-MailScanner-ID: B8C7E4B5CBF6.AD034 X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: yangx.jy@cn.fujitsu.com X-Spam-Status: No, score=1.3 required=7.0 tests=RDNS_NONE autolearn=disabled version=3.4.0 X-Virus-Scanned: clamav-milter 0.99.2 at in-2.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Level: * X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on in-2.smtp.seeweb.it Subject: [LTP] [PATCH 1/2] syscalls/prctl01: Rewrite to the new library X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.18 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it Sender: "ltp" Signed-off-by: Xiao Yang Reviewed-by: Petr Vorel --- testcases/kernel/syscalls/prctl/prctl01.c | 197 ++++++------------------------ 1 file changed, 40 insertions(+), 157 deletions(-) diff --git a/testcases/kernel/syscalls/prctl/prctl01.c b/testcases/kernel/syscalls/prctl/prctl01.c index 1857dfb..58e0ae7 100644 --- a/testcases/kernel/syscalls/prctl/prctl01.c +++ b/testcases/kernel/syscalls/prctl/prctl01.c @@ -1,174 +1,57 @@ /* * Copyright (c) Wipro Technologies Ltd, 2002. All Rights Reserved. * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * DESCRIPTION + * This is a Phase I test for the prctl(2) system call. + * It is intended to provide a limited exposure of the system call. */ -/********************************************************** - * - * TEST IDENTIFIER : prctl01 - * - * EXECUTED BY : anyone - * - * TEST TITLE : Basic test for prctl(2) - * - * TEST CASE TOTAL : 2 - * - * AUTHOR : Saji Kumar.V.R - * - * SIGNALS - * Uses SIGUSR1 to pause before test if option set. - * (See the parse_opts(3) man page). - * - * DESCRIPTION - * This is a Phase I test for the prctl(2) system call. - * It is intended to provide a limited exposure of the system call. - * - * Setup: - * Setup signal handling. - * Pause for SIGUSR1 if option specified. - * - * Test: - * Loop if the proper options are given. - * fork a child - * - * CHILD: - * call prctl() with proper arguments - * If call succeeds, - * exit with 0 - * else - * exit with 1 - * PARENT: - * wait() for child. - * If child exits with exit value 0, - * Test passed - * else - * Test Failed - * - * Cleanup: - * Print errno log and/or timing stats if options given - * - * USAGE: - * prctl01 [-c n] [-e] [-i n] [-I x] [-P x] [-t] [-h] [-f] [-p] - * where, -c n : Run n copies concurrently. - * -e : Turn on errno logging. - * -h : Show help screen - * -f : Turn off functional testing - * -i n : Execute test n times. - * -I x : Execute test for x seconds. - * -p : Pause for SIGUSR1 before starting - * -P x : Pause for x seconds between iterations. - * -t : Turn on syscall timing. - * - ****************************************************************/ #include #include #include -#include - -#include "test.h" - -static void setup(void); -static void cleanup(void); -char *TCID = "prctl01"; +#include "tst_test.h" -int option[2] = { PR_GET_PDEATHSIG, PR_SET_PDEATHSIG }; - -int TST_TOTAL = 2; - -int main(int ac, char **av) +static void verify_prctl(void) { + int get_sig = 0; - int lc, i; - pid_t child_pid; - int status, sig; - - tst_parse_opts(ac, av, NULL, NULL); - - setup(); - - for (lc = 0; TEST_LOOPING(lc); lc++) { - - tst_count = 0; - - for (i = 0; i < TST_TOTAL; ++i) { - - switch (child_pid = FORK_OR_VFORK()) { - - case -1: - /* fork() failed */ - tst_resm(TFAIL, "fork() failed"); - continue; - - case 0: - /* Child */ - if (i == 1) { - sig = SIGUSR2; - TEST(prctl(option[i], sig)); - } else { - TEST(prctl(option[i], &sig)); - } - - if (TEST_RETURN == 0) { - exit(0); - } else { - tst_resm(TWARN | TTERRNO, - "prctl() returned %ld", - TEST_RETURN); - exit(1); - } - - default: - /* Parent */ - if ((waitpid(child_pid, &status, 0)) < 0) { - tst_resm(TFAIL, "waitpid() failed"); - continue; - } - - if ((WIFEXITED(status)) && - (WEXITSTATUS(status) == 0)) { - tst_resm(TPASS, "Test Passed"); - } else { - tst_resm(TFAIL, "Test Failed"); - } - - } - } + TEST(prctl(PR_SET_PDEATHSIG, SIGUSR2)); + if (TEST_RETURN == -1) { + tst_res(TFAIL | TTERRNO, "prctl(PR_SET_PDEATHSIG) failed"); + return; } - /* cleanup and exit */ - cleanup(); - tst_exit(); - -} - -/* setup() - performs all ONE TIME setup for this test */ -void setup(void) -{ - - tst_sig(FORK, DEF_HANDLER, cleanup); - - TEST_PAUSE; + TEST(prctl(PR_GET_PDEATHSIG, &get_sig)); + if (TEST_RETURN == -1) { + tst_res(TFAIL | TTERRNO, "prctl(PR_GET_PDEATHSIG) failed"); + return; + } + if (get_sig == SIGUSR2) { + tst_res(TPASS, + "prctl(PR_GET_PDEATHSIG) got expected death signal"); + } else { + tst_res(TFAIL, "prctl(PR_GET_PDEATHSIG) got death signal %d," + " expected %d", get_sig, SIGUSR2); + } } -/* - *cleanup() - performs all ONE TIME cleanup for this test at - * completion or premature exit. - */ -void cleanup(void) -{ - -} +static struct tst_test test = { + .test_all = verify_prctl, +}; From patchwork Thu Apr 19 02:50:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiao Yang X-Patchwork-Id: 900537 X-Patchwork-Delegate: petr.vorel@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=lists.linux.it (client-ip=2001:1418:10:5::2; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=cn.fujitsu.com Received: from picard.linux.it (picard.linux.it [IPv6:2001:1418:10:5::2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40RP0n0hKWz9s1l for ; Thu, 19 Apr 2018 13:02:16 +1000 (AEST) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id 50A243E6C2D for ; Thu, 19 Apr 2018 05:02:11 +0200 (CEST) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-4.smtp.seeweb.it (in-4.smtp.seeweb.it [IPv6:2001:4b78:1:20::4]) by picard.linux.it (Postfix) with ESMTP id B51583E6C17 for ; Thu, 19 Apr 2018 05:02:09 +0200 (CEST) Received: from heian.cn.fujitsu.com (mail.cn.fujitsu.com [183.91.158.132]) by in-4.smtp.seeweb.it (Postfix) with ESMTP id D54AC10009E0 for ; Thu, 19 Apr 2018 05:02:02 +0200 (CEST) X-IronPort-AV: E=Sophos;i="5.43,368,1503331200"; d="scan'208";a="39109193" Received: from localhost (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 19 Apr 2018 11:01:52 +0800 Received: from G08CNEXCHPEKD02.g08.fujitsu.local (unknown [10.167.33.83]) by cn.fujitsu.com (Postfix) with ESMTP id 6AA3E4B32DA3 for ; Thu, 19 Apr 2018 11:01:49 +0800 (CST) Received: from RHEL7U5Alpha_SERVER.g08.fujitsu.local (10.167.220.185) by G08CNEXCHPEKD02.g08.fujitsu.local (10.167.33.89) with Microsoft SMTP Server (TLS) id 14.3.361.1; Thu, 19 Apr 2018 11:01:47 +0800 From: Xiao Yang To: Date: Thu, 19 Apr 2018 10:50:57 +0800 Message-ID: <1524106257-4711-2-git-send-email-yangx.jy@cn.fujitsu.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1524106257-4711-1-git-send-email-yangx.jy@cn.fujitsu.com> References: <1524106257-4711-1-git-send-email-yangx.jy@cn.fujitsu.com> MIME-Version: 1.0 X-Originating-IP: [10.167.220.185] X-yoursite-MailScanner-ID: 6AA3E4B32DA3.A9CDB X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: yangx.jy@cn.fujitsu.com X-Spam-Status: No, score=0.0 required=7.0 tests=none autolearn=disabled version=3.4.0 X-Virus-Scanned: clamav-milter 0.99.2 at in-4.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on in-4.smtp.seeweb.it Subject: [LTP] [PATCH 2/2] syscalls/prctl02: Rewrite to the new library X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.18 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it Sender: "ltp" Signed-off-by: Xiao Yang Reviewed-by: Petr Vorel --- testcases/kernel/syscalls/prctl/prctl02.c | 203 ++++++------------------------ 1 file changed, 39 insertions(+), 164 deletions(-) diff --git a/testcases/kernel/syscalls/prctl/prctl02.c b/testcases/kernel/syscalls/prctl/prctl02.c index 67e3b6f..f412e21 100644 --- a/testcases/kernel/syscalls/prctl/prctl02.c +++ b/testcases/kernel/syscalls/prctl/prctl02.c @@ -1,189 +1,64 @@ /* * Copyright (c) Wipro Technologies Ltd, 2002. All Rights Reserved. * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * DESCRIPTION + * 1) prctl() fails with EINVAL when an invalid value is given for option + * 2) prctl() fails with EINVAL when option is PR_SET_PDEATHSIG & arg2 is + * not zero or a valid signal number */ -/********************************************************** - * - * TEST IDENTIFIER : prctl02 - * - * EXECUTED BY : anyone - * - * TEST TITLE : Tests for error conditions - * - * TEST CASE TOTAL : 2 - * - * AUTHOR : Saji Kumar.V.R - * - * SIGNALS - * Uses SIGUSR1 to pause before test if option set. - * (See the parse_opts(3) man page). - * - * DESCRIPTION - * Verify that - * 1) prctl() fails with errno, EINVAL when an invalid value is given for - * option - * 2) prctl() fails with errno, EINVAL when option is PR_SET_PDEATHSIG - * & arg2 is not zero or a valid signal number - * - * Setup: - * Setup signal handling. - * Pause for SIGUSR1 if option specified. - * - * Test: - * Loop if the proper options are given. - * fork a child - * - * CHILD: - * call prctl() with proper arguments - * If call fails with expected errno, - * exit with 0 - * else - * exit with 1 - * PARENT: - * wait() for child. - * If child exits with exit value 0, - * Test passed - * else - * Test Failed - * - * Cleanup: - * Print errno log and/or timing stats if options given - * - * USAGE: - * prctl02 [-c n] [-e] [-i n] [-I x] [-P x] [-t] [-h] [-f] [-p] - * where, -c n : Run n copies concurrently. - * -e : Turn on errno logging. - * -h : Show help screen - * -f : Turn off functional testing - * -i n : Execute test n times. - * -I x : Execute test for x seconds. - * -p : Pause for SIGUSR1 before starting - * -P x : Pause for x seconds between iterations. - * -t : Turn on syscall timing. - * - ****************************************************************/ #include #include #include -#include -#include "test.h" +#include "tst_test.h" #define OPTION_INVALID 999 #define INVALID_ARG 999 -static void setup(void); -static void cleanup(void); - -char *TCID = "prctl02"; - -struct test_cases_t { +static struct test_cases_t { int option; unsigned long arg2; int exp_errno; } test_cases[] = { - { - OPTION_INVALID, 0, EINVAL}, { - PR_SET_PDEATHSIG, INVALID_ARG, EINVAL} + {OPTION_INVALID, 0, EINVAL}, + {PR_SET_PDEATHSIG, INVALID_ARG, EINVAL}, }; -int TST_TOTAL = sizeof(test_cases) / sizeof(test_cases[0]); - -int main(int ac, char **av) +static void verify_prctl(unsigned int n) { + struct test_cases_t *tc = &test_cases[n]; - int lc, i; - pid_t child_pid; - int status; - - tst_parse_opts(ac, av, NULL, NULL); - - setup(); - - for (lc = 0; TEST_LOOPING(lc); lc++) { - - tst_count = 0; - - for (i = 0; i < TST_TOTAL; ++i) { - - switch (child_pid = FORK_OR_VFORK()) { - - case -1: - /* fork() failed */ - tst_resm(TFAIL, "fork() failed"); - continue; - - case 0: - /* Child */ - - TEST(prctl(test_cases[i].option, - test_cases[i].arg2)); - if ((TEST_RETURN == -1) && (TEST_ERRNO == - test_cases - [i].exp_errno)) { - exit(TEST_ERRNO); - } else { - tst_resm(TWARN | TTERRNO, - "prctl() returned %ld", - TEST_RETURN); - exit(TEST_ERRNO); - } - - default: - /* Parent */ - if ((waitpid(child_pid, &status, 0)) < 0) { - tst_resm(TFAIL, "waitpid() failed"); - continue; - } - - if ((WIFEXITED(status)) && (WEXITSTATUS(status) - == - test_cases - [i].exp_errno)) { - tst_resm(TPASS, "Test Passed"); - } else { - tst_resm(TFAIL, "Test Failed"); - } - - } - } + TEST(prctl(tc->option, tc->arg2)); + if (TEST_RETURN == 0) { + tst_res(TFAIL, "prctl() succeeded unexpectedly"); + return; } - /* cleanup and exit */ - cleanup(); - - tst_exit(); - -} - -/* setup() - performs all ONE TIME setup for this test */ -void setup(void) -{ - - tst_sig(FORK, DEF_HANDLER, cleanup); - - TEST_PAUSE; - + if (TEST_ERRNO == tc->exp_errno) { + tst_res(TPASS | TTERRNO, "prctl() failed as expected"); + } else { + tst_res(TPASS | TTERRNO, "prctl() failed unexpectedly, " + "expected %s", tst_strerrno(tc->exp_errno)); + } } -/* - *cleanup() - performs all ONE TIME cleanup for this test at - * completion or premature exit. - */ -void cleanup(void) -{ - -} +static struct tst_test test = { + .tcnt = ARRAY_SIZE(test_cases), + .test = verify_prctl, +};