From patchwork Mon Mar 25 23:20:09 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sandeep Patil X-Patchwork-Id: 1064921 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=213.254.12.146; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=android.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=android.com header.i=@android.com header.b="UpbjBWnG"; dkim-atps=neutral Received: from picard.linux.it (picard.linux.it [213.254.12.146]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44Sqxl6MGXz9sRW for ; Tue, 26 Mar 2019 10:20:41 +1100 (AEDT) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id D2E78294AF0 for ; Tue, 26 Mar 2019 00:20:37 +0100 (CET) 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 7DF42294AE9 for ; Tue, 26 Mar 2019 00:20:34 +0100 (CET) Received: from mail-pl1-x641.google.com (mail-pl1-x641.google.com [IPv6:2607:f8b0:4864:20::641]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by in-2.smtp.seeweb.it (Postfix) with ESMTPS id 8DA96601178 for ; Tue, 26 Mar 2019 00:20:33 +0100 (CET) Received: by mail-pl1-x641.google.com with SMTP id bf11so673936plb.12 for ; Mon, 25 Mar 2019 16:20:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=android.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=jUB81bAjBhZVsQFDgewWPh11JtH7DF3/lwQ3spL+u+k=; b=UpbjBWnGB0hjpeFbDoOhEp1z3IdG/0taZ9fhjA5dV0K0RDAmafyfqY+2Re1pqYoXwE KvESThR+hnuQFh0UIG6ijSCrPCU6pMHXR87aZe+NDIaquOfQTa+EynTlAvZoUirsg/VV 4yxnu4McpgOVdpg9wzXHspU7WP1pdfH7+JJ22J3XrDporw5Rx0xup8aMqWm7j2qDkEP/ tpSbZcDC3Ho/nE0Bl18fSMgQrY4xYh9kgKMRViZXKm0DGb0k6J9a8ikkyyKwIp3YRoyU zfnuMO7LeqWscJsC8B0imbekT0S7NcBx6HyxIBcM6FQIxq8Dl3IV5i2hUOjKFs/XdIAm d3qQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=jUB81bAjBhZVsQFDgewWPh11JtH7DF3/lwQ3spL+u+k=; b=Z/ABuNTiMCj3alpUEtPjMvsRRbmiTrnVprWzBgC4e+hdfI0hASbuMsALZWtyhIpblA IE8rqEi8KlMuMk8DiIlaXYc+sEMkUuHAft2/58hi+xpbfNmjEsYkpyPU8G698rcw5Srb vSGX/J9WZOzWLc4JAvOenGZovVb1OSAU9jnMmeyhPwJL5jokT2gU847BADQ9KuthvKg4 3Zai5U2PfUOH3Cjgxl2Q5zvBhFG/Zx4csUmHpYrwzoNBYmiXH2gki7WxstmbIsZbIQHY fieOXHoJIGBQxgEp4vjjtP936jInlkXmS1kvWrCp0QJ8oDcWhQH/aJ2WvNffi0QxjUCD m7Wg== X-Gm-Message-State: APjAAAVu0CoeBM8pBTOytUo9zo7B9gjZE0rKsrRw0JOMTLdayUOQdLNk B5lZwed67zCL7HyifdBrP9Bw7Qp9IU/0UQ== X-Google-Smtp-Source: APXvYqzf3lYVsLed6oPeUi8ZXg9SePhOGOlvLT13PVeQMBQ2zfOgAteU+FvwtfuDAF/9TSXLBhBnRg== X-Received: by 2002:a17:902:f209:: with SMTP id gn9mr28085587plb.50.1553556031925; Mon, 25 Mar 2019 16:20:31 -0700 (PDT) Received: from sspatil-glaptop2.roam.corp.google.com ([175.223.31.125]) by smtp.gmail.com with ESMTPSA id 17sm24671432pgz.52.2019.03.25.16.20.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 25 Mar 2019 16:20:31 -0700 (PDT) From: Sandeep Patil To: ltp@lists.linux.it Date: Mon, 25 Mar 2019 16:20:09 -0700 Message-Id: <20190325232012.67123-2-sspatil@android.com> X-Mailer: git-send-email 2.21.0.392.gf8f6787159e-goog In-Reply-To: <20190325232012.67123-1-sspatil@android.com> References: <20190325232012.67123-1-sspatil@android.com> MIME-Version: 1.0 X-Virus-Scanned: clamav-milter 0.99.2 at in-2.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=0.1 required=7.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,SPF_PASS autolearn=disabled version=3.4.0 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on in-2.smtp.seeweb.it Cc: chrubis@suze.cz, kernel-team@android.com Subject: [LTP] [RFC PATCH 1/4] syscalls/abort01: convert to 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" From: Sandeep Patil In the process, drop checks for UCLINUX and WCOREDUMP. Make the test simple and remove all the logic to detect if a system is "in stress". Signed-off-by: Sandeep Patil --- testcases/kernel/syscalls/abort/abort01.c | 171 ++++++---------------- 1 file changed, 48 insertions(+), 123 deletions(-) diff --git a/testcases/kernel/syscalls/abort/abort01.c b/testcases/kernel/syscalls/abort/abort01.c index 3a5dff585..ac5ddb140 100644 --- a/testcases/kernel/syscalls/abort/abort01.c +++ b/testcases/kernel/syscalls/abort/abort01.c @@ -1,25 +1,12 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + /* * Copyright (c) International Business Machines Corp., 2002 * 01/02/2003 Port to LTP avenkat@us.ibm.com * 11/11/2002: Ported to LTP Suite by Ananda * 06/30/2001 Port to Linux nsharoff@us.ibm.com * - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - - /* ALGORITHM + * ALGORITHM * Fork child. Have child abort, check return status. * * RESTRICTIONS @@ -35,132 +22,70 @@ #include #include -#include "test.h" -#include "safe_macros.h" +#include "tst_test.h" -#define NUM 3 - -char *TCID = "abort01"; -int TST_TOTAL = 1; - -static void setup(void); -static void cleanup(void); -static void do_child(); -static int instress(); +static void do_child(void) +{ + abort(); + fprintf(stderr, "\tchild - abort failed.\n"); + exit(1); +} -int main(int argc, char *argv[]) +void verify_abort(unsigned int nr) { - register int i; - int status, count, child, kidpid; + int i; + int status, child, kidpid; int sig, ex; - -#ifdef WCOREDUMP int core; - core = 0; -#endif - ex = sig = 0; - - tst_parse_opts(argc, argv, NULL, NULL); -#ifdef UCLINUX - maybe_run_child(&do_child, ""); -#endif - - setup(); - - for (i = 0; i < NUM; i++) { - kidpid = FORK_OR_VFORK(); - if (kidpid == 0) { -#ifdef UCLINUX - if (self_exec(argv[0], "")) { - if (!instress()) { - perror("fork failed"); - exit(1); - } - } -#else - do_child(); -#endif - } - if (kidpid < 0) - if (!instress()) - tst_brkm(TBROK | TERRNO, cleanup, - "fork failed"); - count = 0; - while ((child = wait(&status)) > 0) - count++; - if (count != 1) { - tst_brkm(TBROK, cleanup, - "wrong # children waited on; got %d, expected 1", - count); - } - if (WIFSIGNALED(status)) { + core = ex = sig = 0; -#ifdef WCOREDUMP - core = WCOREDUMP(status); -#endif - sig = WTERMSIG(status); + kidpid = SAFE_FORK(); + if (kidpid == 0) + do_child(); - } - if (WIFEXITED(status)) - ex = WEXITSTATUS(status); + child = SAFE_WAIT(&status); -#ifdef WCOREDUMP - if (core == 0) { - tst_brkm(TFAIL, cleanup, - "Child did not dump core; exit code = %d, " - "signal = %d", ex, sig); - } else if (core != -1) { - tst_resm(TPASS, "abort dumped core"); - } -#endif - if (sig == SIGIOT) { - tst_resm(TPASS, "abort raised SIGIOT"); - } else { - tst_brkm(TFAIL, cleanup, - "Child did not raise SIGIOT (%d); exit code = %d, " - "signal = %d", SIGIOT, ex, sig); - } + if (WIFSIGNALED(status)) { + core = WCOREDUMP(status); + sig = WTERMSIG(status); } - cleanup(); - tst_exit(); + if (WIFEXITED(status)) + ex = WEXITSTATUS(status); + + if (core == 0) + tst_brk(TFAIL, + "Missing core dump; exit(%d), signal(%d)", + ex, sig); + else if (core != -1) + tst_res(TPASS, "abort() dumped core"); + + if (sig == SIGIOT) + tst_res(TPASS, "abort() raised SIGIOT"); + else + tst_brk(TFAIL, + "Unexpected signal(%d), expected SIGIOT(%d)", + sig, SIGIOT); } -/* 1024 GNU blocks */ -#define MIN_RLIMIT_CORE (1024 * 1024) - static void setup(void) { +#define MIN_RLIMIT_CORE (1024 * 1024) struct rlimit rlim; - SAFE_GETRLIMIT(NULL, RLIMIT_CORE, &rlim); - + /* make sure we get core dumps */ + SAFE_GETRLIMIT(RLIMIT_CORE, &rlim); if (rlim.rlim_cur < MIN_RLIMIT_CORE) { - tst_resm(TINFO, "Adjusting RLIMIT_CORE to %i", MIN_RLIMIT_CORE); rlim.rlim_cur = MIN_RLIMIT_CORE; - SAFE_SETRLIMIT(NULL, RLIMIT_CORE, &rlim); + SAFE_SETRLIMIT(RLIMIT_CORE, &rlim); } - - tst_tmpdir(); } -static void cleanup(void) -{ - unlink("core"); - tst_rmdir(); -} - -static void do_child(void) -{ - abort(); - fprintf(stderr, "\tchild - abort failed.\n"); - exit(1); -} - -static int instress(void) -{ - tst_resm(TINFO, - "System resources may be too low; fork(), select() etc are likely to fail."); - return 1; -} +static struct tst_test test = { + .tcnt = 3, + .needs_tmpdir = 1, + .forks_child = 1, + .setup = setup, + .test = verify_abort, +}; From patchwork Mon Mar 25 23:20:10 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sandeep Patil X-Patchwork-Id: 1064923 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=213.254.12.146; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=android.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=android.com header.i=@android.com header.b="Yo3Rsp+d"; dkim-atps=neutral Received: from picard.linux.it (picard.linux.it [213.254.12.146]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44Sqxn6L9cz9sSY for ; Tue, 26 Mar 2019 10:20:45 +1100 (AEDT) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id 6E02C294AFD for ; Tue, 26 Mar 2019 00:20:43 +0100 (CET) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-7.smtp.seeweb.it (in-7.smtp.seeweb.it [IPv6:2001:4b78:1:20::7]) by picard.linux.it (Postfix) with ESMTP id 0B593294AB3 for ; Tue, 26 Mar 2019 00:20:38 +0100 (CET) Received: from mail-pg1-x543.google.com (mail-pg1-x543.google.com [IPv6:2607:f8b0:4864:20::543]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by in-7.smtp.seeweb.it (Postfix) with ESMTPS id DDFBA2001A2 for ; Tue, 26 Mar 2019 00:20:36 +0100 (CET) Received: by mail-pg1-x543.google.com with SMTP id f6so3179247pgs.8 for ; Mon, 25 Mar 2019 16:20:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=android.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=3gvkBOmEuwfdTKmIXZb/PKJ5+0fZ4hbOpZFH+eu4I90=; b=Yo3Rsp+ddty+RHjKICTEQOSbech19SKySGN7YndksyvlYbmHGdA7nczShQNOE5c0xt NbdChzsRANxQbMsXZVrzGCjmlk3sC0AhmdXee5ETr2UjJhjrJuuL3Kdk9QE4ObteyjDh mGpfoAXB2pqy10FV/y3f3j42J+M0ZKQRLY/vyPs4SPkxR3moVgwJYSG+pdGQrbDE+uYd Nneike82hnDmVDdIT9rZJV5wfaPNIZmMfwrkjKh1zLlkie18Ig7sqW5Iic2mx91iebHD N6DUz4Srl2k8UTNsTc1KQMCfpZNfjT7GlU+AHfa7fdCxJedjEPIDLHRZpce7xOFDo0Q9 tbPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=3gvkBOmEuwfdTKmIXZb/PKJ5+0fZ4hbOpZFH+eu4I90=; b=lfWg62eP1n+EQFcVACxPXuW1mqufgetuHhJUMASPjEm30lec2yVS49qojaOAL8BCQM H2lMpwmHxdlFGNDSBujN2KzO+KWp5hR+qZtK4ecadygOEA8cTJBTMHjhdE9SAB1qw/TN 4kZ/vjMYE2i3R6T6dvfmlrPJseVtK3M+bLVZ03ov8h1zzziGLL6Fo1GI/Y5UGVlX6MRK +tCSHhNJbys0jrOj1Bnag6LXxHphdu8tHGzc3lvafRkQMecw1S0DvATio+XNpq0cRSPE t+f3rnyd+t4O3llpMqEHQw9ejLh1M3aJC2/LnSyouC5BelwNa1y67Hu1f0PsDE+akFYd 54rw== X-Gm-Message-State: APjAAAWRUQ1m9dU3w7439Uv7KvHtfYIhTBTUk0eznTYBepKbyegGILHr qJ85P3ZfyCWfIwaW4/lG0HXa9nTu2GzBMA== X-Google-Smtp-Source: APXvYqzUpD2cQhWErB7sY1HFgOg8kq4okW6JvSeg8BEAGiBq8H7pNfjR6Mduxt1Pn0M/tbBKHdSLRA== X-Received: by 2002:a62:ee03:: with SMTP id e3mr27006131pfi.241.1553556035078; Mon, 25 Mar 2019 16:20:35 -0700 (PDT) Received: from sspatil-glaptop2.roam.corp.google.com ([175.223.31.125]) by smtp.gmail.com with ESMTPSA id 17sm24671432pgz.52.2019.03.25.16.20.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 25 Mar 2019 16:20:34 -0700 (PDT) From: Sandeep Patil To: ltp@lists.linux.it Date: Mon, 25 Mar 2019 16:20:10 -0700 Message-Id: <20190325232012.67123-3-sspatil@android.com> X-Mailer: git-send-email 2.21.0.392.gf8f6787159e-goog In-Reply-To: <20190325232012.67123-1-sspatil@android.com> References: <20190325232012.67123-1-sspatil@android.com> MIME-Version: 1.0 X-Virus-Scanned: clamav-milter 0.99.2 at in-7.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=0.1 required=7.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,SPF_PASS autolearn=disabled version=3.4.0 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on in-7.smtp.seeweb.it Cc: chrubis@suze.cz, kernel-team@android.com Subject: [LTP] [PATCH 2/4] syscalls/accept01: convert to 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" ...and drop the duplicate "invalid addrlen" test case. Signed-off-by: Sandeep Patil --- testcases/kernel/syscalls/accept/accept01.c | 236 +++++++++----------- 1 file changed, 103 insertions(+), 133 deletions(-) diff --git a/testcases/kernel/syscalls/accept/accept01.c b/testcases/kernel/syscalls/accept/accept01.c index b50056520..5982c09f8 100644 --- a/testcases/kernel/syscalls/accept/accept01.c +++ b/testcases/kernel/syscalls/accept/accept01.c @@ -1,26 +1,11 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + /* - * * Copyright (c) International Business Machines Corp., 2001 * 07/2001 Ported by Wayne Boyer * - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/* - * Description: - * Verify that accept() returns the proper errno for various failure cases + * Description: + * Verify that accept() returns the proper errno for various failure cases */ #include @@ -34,150 +19,135 @@ #include -#include "test.h" -#include "safe_macros.h" - -char *TCID = "accept01"; -int testno; +#include "tst_test.h" -int s; /* socket descriptor */ struct sockaddr_in sin0, fsin1; -socklen_t sinlen; - -static void setup(void); -static void cleanup(void); -static void setup0(void); -static void cleanup0(void); -static void setup1(void); -static void cleanup1(void); -static void setup2(void); -static void setup3(void); - -struct test_case_t { /* test case structure */ + +struct test_case; +static void setup_invalid_fd(struct test_case *tcase); +static void setup_nonsocket_fd(struct test_case *tcase); +static void setup_socket(struct test_case *tcase); +static void setup_fionbio(struct test_case *tcase); +static void cleanup_tcase(struct test_case *tcase); + +/* test cases */ +static struct test_case { int domain; /* PF_INET, PF_UNIX, ... */ int type; /* SOCK_STREAM, SOCK_DGRAM ... */ int proto; /* protocol number (usually 0 = default) */ + int socketfd; /* socketfd for the test case */ struct sockaddr *sockaddr; /* socket address buffer */ - socklen_t *salen; /* accept's 3rd argument */ + socklen_t salen; /* accept's 3rd argument */ int retval; /* syscall return value */ int experrno; /* expected errno */ - void (*setup) (void); - void (*cleanup) (void); + void (*setup) (struct test_case *); + void (*cleanup) (struct test_case *); char *desc; -} tdat[] = { +} tcases[] = { { - PF_INET, SOCK_STREAM, 0, (struct sockaddr *)&fsin1, - &sinlen, -1, EBADF, setup0, cleanup0, - "bad file descriptor"}, { - PF_INET, SOCK_STREAM, 0, (struct sockaddr *)&fsin1, - &sinlen, -1, ENOTSOCK, setup0, cleanup0, - "bad file descriptor"}, { - PF_INET, SOCK_STREAM, 0, (struct sockaddr *)3, - &sinlen, -1, EINVAL, setup1, cleanup1, - "invalid socket buffer"}, { - PF_INET, SOCK_STREAM, 0, (struct sockaddr *)&fsin1, - (socklen_t *) 1, -1, EINVAL, setup1, cleanup1, - "invalid salen"}, { - PF_INET, SOCK_STREAM, 0, (struct sockaddr *)&fsin1, - &sinlen, -1, EINVAL, setup2, cleanup1, - "invalid salen"}, { - PF_INET, SOCK_STREAM, 0, (struct sockaddr *)&fsin1, - &sinlen, -1, EINVAL, setup3, cleanup1, - "no queued connections"}, { - PF_INET, SOCK_DGRAM, 0, (struct sockaddr *)&fsin1, - &sinlen, -1, EOPNOTSUPP, setup1, cleanup1, - "UDP accept"},}; - -int TST_TOTAL = sizeof(tdat) / sizeof(tdat[0]); - -int main(int ac, char *av[]) -{ - int lc; - - tst_parse_opts(ac, av, NULL, NULL); - - setup(); - - for (lc = 0; TEST_LOOPING(lc); ++lc) { - tst_count = 0; - for (testno = 0; testno < TST_TOTAL; ++testno) { - tdat[testno].setup(); - - TEST(accept(s, tdat[testno].sockaddr, - tdat[testno].salen)); - if (TEST_RETURN > 0) - TEST_RETURN = 0; - if (TEST_RETURN != tdat[testno].retval || - (TEST_RETURN < 0 && - TEST_ERRNO != tdat[testno].experrno)) { - tst_resm(TFAIL, "%s ; returned" - " %ld (expected %d), errno %d (expected" - " %d)", tdat[testno].desc, - TEST_RETURN, tdat[testno].retval, - TEST_ERRNO, tdat[testno].experrno); - } else { - tst_resm(TPASS, "%s successful", - tdat[testno].desc); - } - tdat[testno].cleanup(); - } - } - - cleanup(); - tst_exit(); -} + PF_INET, SOCK_STREAM, 0, -1, (struct sockaddr *)&fsin1, + sizeof(fsin1), -1, EBADF, setup_invalid_fd, NULL, + "bad file descriptor" + }, + { + PF_INET, SOCK_STREAM, 0, -1, (struct sockaddr *)&fsin1, + sizeof(fsin1), -1, ENOTSOCK, setup_nonsocket_fd, + cleanup_tcase, "bad file descriptor" + }, + { + PF_INET, SOCK_STREAM, 0, -1, (struct sockaddr *)3, + sizeof(fsin1), -1, EINVAL, setup_socket, cleanup_tcase, + "invalid socket buffer" + }, + { + PF_INET, SOCK_STREAM, 0, -1, (struct sockaddr *)&fsin1, + 1, -1, EINVAL, setup_socket, cleanup_tcase, + "invalid salen" + }, + { + PF_INET, SOCK_STREAM, 0, -1, (struct sockaddr *)&fsin1, + sizeof(fsin1), -1, EINVAL, setup_fionbio, cleanup_tcase, + "no queued connections" + }, + { + PF_INET, SOCK_DGRAM, 0, -1, (struct sockaddr *)&fsin1, + sizeof(fsin1), -1, EOPNOTSUPP, setup_socket, cleanup_tcase, + "UDP accept" + }, +}; -static void setup(void) -{ - TEST_PAUSE; - /* initialize local sockaddr */ - sin0.sin_family = AF_INET; - sin0.sin_port = 0; - sin0.sin_addr.s_addr = INADDR_ANY; -} -static void cleanup(void) +static void setup_invalid_fd(struct test_case *tcase) { + tcase->socketfd = 400; /* anything that is not an open file */ } -static void setup0(void) +static void setup_nonsocket_fd(struct test_case *tcase) { - if (tdat[testno].experrno == EBADF) - s = 400; /* anything not an open file */ - else if ((s = open("/dev/null", O_WRONLY)) == -1) - tst_brkm(TBROK | TERRNO, cleanup, "error opening /dev/null"); + tcase->socketfd = SAFE_OPEN("/dev/null", O_WRONLY); } -static void cleanup0(void) +static void setup_socket(struct test_case *tcase) { - s = -1; + tcase->socketfd = SAFE_SOCKET(tcase->domain, tcase->type, tcase->proto); + SAFE_BIND(tcase->socketfd, (struct sockaddr *)&sin0, sizeof(sin0)); + tcase->salen = sizeof(fsin1); } -static void setup1(void) +static void setup_fionbio(struct test_case *tcase) { - s = SAFE_SOCKET(cleanup, tdat[testno].domain, tdat[testno].type, - tdat[testno].proto); - SAFE_BIND(cleanup, s, (struct sockaddr *)&sin0, sizeof(sin0)); - sinlen = sizeof(fsin1); + int one = 1; + setup_socket(tcase); + SAFE_IOCTL(tcase->socketfd, FIONBIO, &one); } -static void cleanup1(void) +static void cleanup_tcase(struct test_case *tcase) { - (void)close(s); - s = -1; + if (tcase->socketfd >= 0) + SAFE_CLOSE(tcase->socketfd); + + tcase->socketfd = -1; } -static void setup2(void) +void verify_accept(unsigned int nr) { - setup1(); /* get a socket in s */ - sinlen = 1; /* invalid s */ + struct test_case *tcase = &tcases[nr]; + + if (tcase->setup) + tcase->setup(tcase); + + TEST(accept(tcase->socketfd, tcase->sockaddr, &tcase->salen)); + if (TST_RET > 0) { + /* don't leak accepted socket, close them first */ + SAFE_CLOSE(TST_RET); + TST_RET = 0; + } + + if (TST_RET != tcase->retval || + (TST_RET < 0 && TST_ERR != tcase->experrno)) { + tst_res(TFAIL, "%s ; returned" + " %ld (expected %d), errno %d (expected" + " %d)", tcase->desc, TST_RET, tcase->retval, + TST_ERR, tcase->experrno); + } else { + tst_res(TPASS, "%s successful", tcase->desc); + } + + if (tcase->cleanup) + tcase->cleanup(tcase); } -static void setup3(void) +static void test_setup(void) { - int one = 1; - - setup1(); - SAFE_IOCTL(cleanup, s, FIONBIO, &one); + /* initialize local sockaddr */ + sin0.sin_family = AF_INET; + sin0.sin_port = 0; + sin0.sin_addr.s_addr = INADDR_ANY; } + +static struct tst_test test = { + .tcnt = ARRAY_SIZE(tcases), + .setup = test_setup, + .test = verify_accept, +}; From patchwork Mon Mar 25 23:20:11 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sandeep Patil X-Patchwork-Id: 1064924 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=fail (p=none dis=none) header.from=android.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=android.com header.i=@android.com header.b="Xzgb40iO"; dkim-atps=neutral Received: from picard.linux.it (picard.linux.it [IPv6:2001:1418:10:5::2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44Sqxx6ssmz9sRW for ; Tue, 26 Mar 2019 10:20:53 +1100 (AEDT) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id 2359E294AE0 for ; Tue, 26 Mar 2019 00:20:51 +0100 (CET) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-6.smtp.seeweb.it (in-6.smtp.seeweb.it [217.194.8.6]) by picard.linux.it (Postfix) with ESMTP id E71C4294ACC for ; Tue, 26 Mar 2019 00:20:40 +0100 (CET) Received: from mail-pg1-x544.google.com (mail-pg1-x544.google.com [IPv6:2607:f8b0:4864:20::544]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by in-6.smtp.seeweb.it (Postfix) with ESMTPS id DC259140097F for ; Tue, 26 Mar 2019 00:20:39 +0100 (CET) Received: by mail-pg1-x544.google.com with SMTP id j26so5302177pgl.5 for ; Mon, 25 Mar 2019 16:20:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=android.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=e1BvK2Az+P6tb1Wf7sY3sRucooruTSkLOTE6rQe90po=; b=Xzgb40iOKLs07X+y1kTGIOgiztCdDIVQZtHGAaIg9ckuCPQNlBzFouEuXHwap9AeAX GjBc9qufKgX5lpiPtkEcjZHsDgWVUQuj0BT2J6MhmD6iMZDC5/AHglhxH6dozj2LM25B 9IREj6amFfNZZWrLSziWULJnnwa73Az2s9ZfpWEBYWZAFybn+gyBjYntCDp7gyBJbMuv o7EZYlw15MeJl+OGsrvM8CdJ0SPQojuplHKxmarkAgrO+asoi7fEGWvBW8OaqHszPV2t 6SCFSdofTLzlCZUjKqhfle4ZM3ub1YVmRF1dfqQk3hFcvcRos4yzBxfUVr/zRwt2wqv9 aTZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=e1BvK2Az+P6tb1Wf7sY3sRucooruTSkLOTE6rQe90po=; b=g6srL/NgVyJP0n7gS5jG8HRAosgbtDlEyv2+9UfwN/WmhqCYKd1udx5uEb+4jhLUtb gOmO3OA19JxVpeJS9AA/aTrcOghd6xs4rPnDQmjs6Oa2aivLliI+g4qEN3q2djLB/U8W sVWeEzLKiC5C+MoSSSMxBgnFt1QNRDc3MXU6u532pjtV+Z9VvRx71GDM608q5HQPf07X GdG2kTyl5e2qgfqDq0TQ/MimWyJHiaWNRPWHuDZ+6O39wkL/dVLPanl7jWzp2gn2Fxo6 ZabI4zZ41hVjoJ4UCO43rxPNt87S63rJEBiOdH0ye+MbCMMdboI24mL/76iVf+aXs3Ga pUsg== X-Gm-Message-State: APjAAAVpFN3bSochjAPGXzJi2CfnZuC+BLnQvC01n7H34wc6y55sdLMf 8f//I1W6KFDLGeN8KN2qaB/nyCAqAcS+XA== X-Google-Smtp-Source: APXvYqyQisgXdFflH599ELkz2ZRa9wk2iXYrWbPxBfs3V9+0iFkITYiFjNQTsfwL1tOI2auMtariXA== X-Received: by 2002:a63:cf11:: with SMTP id j17mr25591531pgg.252.1553556038198; Mon, 25 Mar 2019 16:20:38 -0700 (PDT) Received: from sspatil-glaptop2.roam.corp.google.com ([175.223.31.125]) by smtp.gmail.com with ESMTPSA id 17sm24671432pgz.52.2019.03.25.16.20.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 25 Mar 2019 16:20:37 -0700 (PDT) From: Sandeep Patil To: ltp@lists.linux.it Date: Mon, 25 Mar 2019 16:20:11 -0700 Message-Id: <20190325232012.67123-4-sspatil@android.com> X-Mailer: git-send-email 2.21.0.392.gf8f6787159e-goog In-Reply-To: <20190325232012.67123-1-sspatil@android.com> References: <20190325232012.67123-1-sspatil@android.com> MIME-Version: 1.0 X-Virus-Scanned: clamav-milter 0.99.2 at in-6.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=0.1 required=7.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,SPF_PASS autolearn=disabled version=3.4.0 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on in-6.smtp.seeweb.it Cc: chrubis@suze.cz, kernel-team@android.com Subject: [LTP] [PATCH 3/4] syscalls/accept4: convert to 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" Remove all debug checks and simplify the test. Signed-off-by: Sandeep Patil --- .../kernel/syscalls/accept4/accept4_01.c | 241 ++++++------------ 1 file changed, 81 insertions(+), 160 deletions(-) diff --git a/testcases/kernel/syscalls/accept4/accept4_01.c b/testcases/kernel/syscalls/accept4/accept4_01.c index dec4ef93b..036457571 100644 --- a/testcases/kernel/syscalls/accept4/accept4_01.c +++ b/testcases/kernel/syscalls/accept4/accept4_01.c @@ -1,23 +1,10 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + /* - * * Copyright (C) 2008, Linux Foundation, * written by Michael Kerrisk * Initial Porting to LTP by Subrata * - * Licensed under the GNU GPLv2 or later. - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #define _GNU_SOURCE @@ -31,14 +18,12 @@ #include #include -#include "test.h" +#include "tst_test.h" #include "lapi/fcntl.h" #include "lapi/syscalls.h" #define PORT_NUM 33333 -#define die(msg) tst_brkm(TBROK|TERRNO, cleanup, msg) - #ifndef SOCK_CLOEXEC #define SOCK_CLOEXEC O_CLOEXEC #endif @@ -50,39 +35,13 @@ #define USE_SOCKETCALL 1 #endif -char *TCID = "accept04_01"; -int TST_TOTAL = 1; - -static void setup(void) -{ - TEST_PAUSE; - tst_tmpdir(); -} - -static void cleanup(void) -{ - tst_rmdir(); -} +struct sockaddr_in conn_addr; +int listening_fd; #if !(__GLIBC_PREREQ(2, 10)) static int accept4_01(int fd, struct sockaddr *sockaddr, socklen_t *addrlen, int flags) { -#ifdef DEBUG - tst_resm(TINFO, "Calling accept4(): flags = %x", flags); - if (flags != 0) { - tst_resm(TINFO, " ("); - if (flags & SOCK_CLOEXEC) - tst_resm(TINFO, "SOCK_CLOEXEC"); - if ((flags & SOCK_CLOEXEC) && (flags & SOCK_NONBLOCK)) - tst_resm(TINFO, " "); - if (flags & SOCK_NONBLOCK) - tst_resm(TINFO, "SOCK_NONBLOCK"); - tst_resm(TINFO, ")"); - } - tst_resm(TINFO, "\n"); -#endif - #if USE_SOCKETCALL long args[6]; @@ -98,79 +57,7 @@ accept4_01(int fd, struct sockaddr *sockaddr, socklen_t *addrlen, int flags) } #endif -static void -do_test(int lfd, struct sockaddr_in *conn_addr, - int closeonexec_flag, int nonblock_flag) -{ - int connfd, acceptfd; - int fdf, flf, fdf_pass, flf_pass; - struct sockaddr_in claddr; - socklen_t addrlen; - -#ifdef DEBUG - tst_resm(TINFO, "=======================================\n"); -#endif - - connfd = socket(AF_INET, SOCK_STREAM, 0); - if (connfd == -1) - die("Socket Error"); - if (connect(connfd, (struct sockaddr *)conn_addr, - sizeof(struct sockaddr_in)) == -1) - die("Connect Error"); - - addrlen = sizeof(struct sockaddr_in); -#if !(__GLIBC_PREREQ(2, 10)) - acceptfd = accept4_01(lfd, (struct sockaddr *)&claddr, &addrlen, - closeonexec_flag | nonblock_flag); -#else - acceptfd = accept4(lfd, (struct sockaddr *)&claddr, &addrlen, - closeonexec_flag | nonblock_flag); -#endif - if (acceptfd == -1) { - if (errno == ENOSYS) { - tst_brkm(TCONF, cleanup, - "syscall __NR_accept4 not supported"); - } else { - tst_brkm(TBROK | TERRNO, cleanup, "accept4 failed"); - } - } - - fdf = fcntl(acceptfd, F_GETFD); - if (fdf == -1) - die("fcntl:F_GETFD"); - fdf_pass = ((fdf & FD_CLOEXEC) != 0) == - ((closeonexec_flag & SOCK_CLOEXEC) != 0); -#ifdef DEBUG - tst_resm(TINFO, "Close-on-exec flag is %sset (%s); ", - (fdf & FD_CLOEXEC) ? "" : "not ", fdf_pass ? "OK" : "failed"); -#endif - if (!fdf_pass) - tst_resm(TFAIL, - "Close-on-exec flag mismatch, should be %x, actual %x", - fdf & FD_CLOEXEC, closeonexec_flag & SOCK_CLOEXEC); - - flf = fcntl(acceptfd, F_GETFL); - if (flf == -1) - die("fcntl:F_GETFD"); - flf_pass = ((flf & O_NONBLOCK) != 0) == - ((nonblock_flag & SOCK_NONBLOCK) != 0); -#ifdef DEBUG - tst_resm(TINFO, "nonblock flag is %sset (%s)\n", - (flf & O_NONBLOCK) ? "" : "not ", flf_pass ? "OK" : "failed"); -#endif - if (!flf_pass) - tst_resm(TFAIL, - "nonblock flag mismatch, should be %x, actual %x", - fdf & O_NONBLOCK, nonblock_flag & SOCK_NONBLOCK); - - close(acceptfd); - close(connfd); - - if (fdf_pass && flf_pass) - tst_resm(TPASS, "Test passed"); -} - -static int create_listening_socket(int port_num) +static int create_listening_socket(void) { struct sockaddr_in svaddr; int lfd; @@ -179,65 +66,99 @@ static int create_listening_socket(int port_num) memset(&svaddr, 0, sizeof(struct sockaddr_in)); svaddr.sin_family = AF_INET; svaddr.sin_addr.s_addr = htonl(INADDR_ANY); - svaddr.sin_port = htons(port_num); + svaddr.sin_port = htons(PORT_NUM); - lfd = socket(AF_INET, SOCK_STREAM, 0); - if (lfd == -1) - die("Socket Error"); + lfd = SAFE_SOCKET(AF_INET, SOCK_STREAM, 0); optval = 1; - if (setsockopt(lfd, SOL_SOCKET, SO_REUSEADDR, &optval, - sizeof(optval)) == -1) - die("Setsockopt Error"); - - if (bind(lfd, (struct sockaddr *)&svaddr, - sizeof(struct sockaddr_in)) == -1) - die("Bind Error"); - - if (listen(lfd, 5) == -1) - die("Listen Error"); + SAFE_SETSOCKOPT(lfd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)); + SAFE_BIND(lfd, (struct sockaddr *)&svaddr, sizeof(struct sockaddr_in)); + SAFE_LISTEN(lfd, 5); return lfd; } -static char *opt_port; +void setup(void) +{ + memset(&conn_addr, 0, sizeof(struct sockaddr_in)); + conn_addr.sin_family = AF_INET; + conn_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); + conn_addr.sin_port = htons(PORT_NUM); -static option_t options[] = { - {"p:", NULL, &opt_port}, - {NULL, NULL, NULL} -}; + listening_fd = create_listening_socket(); +} -static void usage(void) +void cleanup(void) { - printf(" -p Port\n"); + SAFE_CLOSE(listening_fd); } -int main(int argc, char *argv[]) +static struct test_case { + int cloexec; + int nonblock; +} tcases[] = { + { 0, 0 }, + { SOCK_CLOEXEC, 0 }, + { 0, SOCK_NONBLOCK }, + { SOCK_CLOEXEC, SOCK_NONBLOCK }, +}; + +void verify_accept4(unsigned int nr) { - struct sockaddr_in conn_addr; - int lfd; - int port_num = PORT_NUM; + struct test_case *tcase = &tcases[nr]; + int connfd, acceptfd; + int fdf, flf, fdf_pass, flf_pass; + struct sockaddr_in claddr; + socklen_t addrlen; - tst_parse_opts(argc, argv, options, usage); + connfd = SAFE_SOCKET(AF_INET, SOCK_STREAM, 0); + SAFE_CONNECT(connfd, (struct sockaddr *)&conn_addr, sizeof(conn_addr)); + addrlen = sizeof(claddr); - if (opt_port) - port_num = atoi(opt_port); +#if !(__GLIBC_PREREQ(2, 10)) + TEST(accept4_01(listening_fd, (struct sockaddr *)&claddr, &addrlen, + tcase->cloexec | tcase->nonblock)); +#else + TEST(accept4(listening_fd, (struct sockaddr *)&claddr, &addrlen, + tcase->cloexec | tcase->nonblock)); +#endif + if (TST_RET == -1) { + if (TST_ERR == ENOSYS) + tst_brk(TCONF, "syscall __NR_accept4 not supported"); + else + tst_brk(TBROK | TTERRNO, "accept4 failed"); + } - setup(); + acceptfd = TST_RET; - memset(&conn_addr, 0, sizeof(struct sockaddr_in)); - conn_addr.sin_family = AF_INET; - conn_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); - conn_addr.sin_port = htons(port_num); + /* Test to see if O_CLOEXEC is as expected */ + fdf = SAFE_FCNTL(acceptfd, F_GETFD); + fdf_pass = !!(fdf & FD_CLOEXEC) == !!(tcase->cloexec & SOCK_CLOEXEC); + if (!fdf_pass) + tst_res(TFAIL, "Close-on-exec flag mismatch, %d vs %d", + !!(fdf & FD_CLOEXEC), + !!(tcase->cloexec & SOCK_CLOEXEC)); + + /* Test to see if O_NONBLOCK is as expected */ + flf = SAFE_FCNTL(acceptfd, F_GETFL); + flf_pass = !!(flf & O_NONBLOCK) == !!(tcase->nonblock & SOCK_NONBLOCK); + if (!flf_pass) + tst_res(TFAIL, "nonblock flag mismatch, %d vs %d", + !!(fdf & O_NONBLOCK), + !!(tcase->nonblock & SOCK_NONBLOCK)); - lfd = create_listening_socket(port_num); + SAFE_CLOSE(acceptfd); + SAFE_CLOSE(connfd); - do_test(lfd, &conn_addr, 0, 0); - do_test(lfd, &conn_addr, SOCK_CLOEXEC, 0); - do_test(lfd, &conn_addr, 0, SOCK_NONBLOCK); - do_test(lfd, &conn_addr, SOCK_CLOEXEC, SOCK_NONBLOCK); + if (fdf_pass && flf_pass) + tst_res(TPASS, "Test passed: Close-on-exec %d, nonblock %d", + fdf_pass, flf_pass); - close(lfd); - cleanup(); - tst_exit(); } + +static struct tst_test test = { + .tcnt = ARRAY_SIZE(tcases), + .setup = setup, + .cleanup = cleanup, + .test = verify_accept4, +}; From patchwork Mon Mar 25 23:20:12 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sandeep Patil X-Patchwork-Id: 1064925 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=fail (p=none dis=none) header.from=android.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=android.com header.i=@android.com header.b="bWnUzTtP"; dkim-atps=neutral Received: from picard.linux.it (picard.linux.it [IPv6:2001:1418:10:5::2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44Sqy24LTnz9sRW for ; Tue, 26 Mar 2019 10:20:58 +1100 (AEDT) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id D2C65294ABE for ; Tue, 26 Mar 2019 00:20:55 +0100 (CET) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-5.smtp.seeweb.it (in-5.smtp.seeweb.it [217.194.8.5]) by picard.linux.it (Postfix) with ESMTP id AE449294AB7 for ; Tue, 26 Mar 2019 00:20:43 +0100 (CET) Received: from mail-pg1-x543.google.com (mail-pg1-x543.google.com [IPv6:2607:f8b0:4864:20::543]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by in-5.smtp.seeweb.it (Postfix) with ESMTPS id 920DE600209 for ; Tue, 26 Mar 2019 00:20:44 +0100 (CET) Received: by mail-pg1-x543.google.com with SMTP id r124so7313967pgr.3 for ; Mon, 25 Mar 2019 16:20:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=android.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=eWiKtlKlvGI2K33/qXpYzm3U0racoBHMmMiXQlLtadg=; b=bWnUzTtPSZa9vtjh6rpTja+SyTmlv5dCZcvp/hqYeEG+Hl+oBC3GtLIFDuOHtRe0WQ ab/UmNKruu8x1PXui7iEkuEj0g5Ik67rii9GLg3lSd3XAi8zkKwzdG/P4F9I3wFxqQxI FIuWgl7gr06V/3WK3ToBqO4K7RksZeEqk1ocHkHMABnxfoH2Cak96R2dQrJGUfxVhOG2 4kzy+IMJKBmuu6Es4swshWI3AW25EisLTy+etJ2NbuzjWU8SJ1+LhsH2VZbOCz0rI9OK +lUXlxShOxdQcNFlK3uMmOegVSEbwtrh6I4QFuQ5Btwo3UOsu9NMYP8mra7MPypG5utV lD1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=eWiKtlKlvGI2K33/qXpYzm3U0racoBHMmMiXQlLtadg=; b=exHEWrNYRzJKFoafhEWcmMnhl9Nd8dIjkrvyuyJLZ2qlDcRkxJStkrXvLPAh0m5Muq LoR+jTdDSn/ebQCVMWNkQm5tS+uX1lSOTDcBTeoQUJ4zrNxhPck8wMKKPaQf72q33TUz GBfbHY8W9+3Z81jhDLPYvXAajywG5jkZ7pm5fNK7oTVaviHPUVgWughmy6YDcRaeVSwp zhbmXo4f0N9jtcZk6E9Pn7GL7JwZ75o7CKO/y2BeVmhFp6DXSSydCVdNsr+TX6Vx25kx BV+rqIgUNPRWyD3O1Vtlg8kXUpND2QR31rdlYAZtCsDYvIDrpGb36nwM3Fi3N7O1GUkH O4DA== X-Gm-Message-State: APjAAAURqTud1/aCHq/V+FKjVFZZB6Di9enGWGja3o4uu1SFGb7CBQT2 mYS+qIqJ20L6r5MdocYFCXQSlLMxnUP60g== X-Google-Smtp-Source: APXvYqzfErUkDiD3f+TLYQl4N1byUB7PUAORv+HwmeAwgNOlz05v+HzSr9JHj1Os5ToV/8kLLUZWPA== X-Received: by 2002:a63:fc5a:: with SMTP id r26mr1556620pgk.97.1553556041187; Mon, 25 Mar 2019 16:20:41 -0700 (PDT) Received: from sspatil-glaptop2.roam.corp.google.com ([175.223.31.125]) by smtp.gmail.com with ESMTPSA id 17sm24671432pgz.52.2019.03.25.16.20.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 25 Mar 2019 16:20:40 -0700 (PDT) From: Sandeep Patil To: ltp@lists.linux.it Date: Mon, 25 Mar 2019 16:20:12 -0700 Message-Id: <20190325232012.67123-5-sspatil@android.com> X-Mailer: git-send-email 2.21.0.392.gf8f6787159e-goog In-Reply-To: <20190325232012.67123-1-sspatil@android.com> References: <20190325232012.67123-1-sspatil@android.com> MIME-Version: 1.0 X-Virus-Scanned: clamav-milter 0.99.2 at in-5.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=0.1 required=7.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,SPF_PASS autolearn=disabled version=3.4.0 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on in-5.smtp.seeweb.it Cc: chrubis@suze.cz, kernel-team@android.com Subject: [LTP] [PATCH 4/4] syscalls/acct01: convert to 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" Use pre-created files provided by the library instead of creating them by hand in the setup() routine. Signed-off-by: Sandeep Patil --- testcases/kernel/syscalls/acct/acct01.c | 207 +++++++----------------- 1 file changed, 62 insertions(+), 145 deletions(-) diff --git a/testcases/kernel/syscalls/acct/acct01.c b/testcases/kernel/syscalls/acct/acct01.c index eb104315b..b2bde13ed 100644 --- a/testcases/kernel/syscalls/acct/acct01.c +++ b/testcases/kernel/syscalls/acct/acct01.c @@ -1,31 +1,12 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + /* - * * Copyright (c) International Business Machines Corp., 2002 - * - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* 12/03/2002 Port to LTP robbiew@us.ibm.com */ /* 06/30/2001 Port to Linux nsharoff@us.ibm.com */ -/* - * ALGORITHM - * issue calls to acct and test the returned values against - * expected results - */ - #include #include #include @@ -36,8 +17,7 @@ #include #include -#include "test.h" -#include "safe_macros.h" +#include "tst_test.h" #define DIR_MODE (S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP| \ S_IXGRP|S_IROTH|S_IXOTH) @@ -48,169 +28,106 @@ #define TEST_FILE5 "./tmpfile" #define TEST_FILE6 "test_file_eloop1" #define TEST_FILE7 nametoolong -#define TEST_FILE8 "mntpoint/tmp" +#define TEST_FILE8 "mntpoint/file" static char nametoolong[PATH_MAX+2]; -static const char *fs_type; -static const char *device; -static int mount_flag; +static struct passwd *ltpuser; -static void setup(void); -static void cleanup(void); -static void setup2(void); -static void cleanup2(void); -static void acct_verify(int); +static void setup_euid(void) +{ + SAFE_SETEUID(ltpuser->pw_uid); +} -static struct test_case_t { +static void cleanup_euid(void) +{ + SAFE_SETEUID(0); +} + +static struct test_case { char *filename; char *exp_errval; int exp_errno; void (*setupfunc) (); void (*cleanfunc) (); -} test_cases[] = { +} tcases[] = { {TEST_FILE1, "EISDIR", EISDIR, NULL, NULL}, {TEST_FILE2, "EACCES", EACCES, NULL, NULL}, {TEST_FILE3, "ENOENT", ENOENT, NULL, NULL}, {TEST_FILE4, "ENOTDIR", ENOTDIR, NULL, NULL}, - {TEST_FILE5, "EPERM", EPERM, setup2, cleanup2}, - {NULL, "EPERM", EPERM, setup2, cleanup2}, + {TEST_FILE5, "EPERM", EPERM, setup_euid, cleanup_euid}, + {NULL, "EPERM", EPERM, setup_euid, cleanup_euid}, {TEST_FILE6, "ELOOP", ELOOP, NULL, NULL}, {TEST_FILE7, "ENAMETOOLONG", ENAMETOOLONG, NULL, NULL}, {TEST_FILE8, "EROFS", EROFS, NULL, NULL}, }; -char *TCID = "acct01"; -int TST_TOTAL = ARRAY_SIZE(test_cases); -static struct passwd *ltpuser; - -int main(int argc, char *argv[]) -{ - int lc; - int i; - - tst_parse_opts(argc, argv, NULL, NULL); - - setup(); - - for (lc = 0; TEST_LOOPING(lc); lc++) { - tst_count = 0; - for (i = 0; i < TST_TOTAL; i++) - acct_verify(i); - } - - cleanup(); - tst_exit(); -} - -static void check_acct_in_kernel(void) -{ - /* check if acct is implemented in kernel */ - if (acct(NULL) == -1) { - if (errno == ENOSYS) { - tst_brkm(TCONF, - NULL, "BSD process accounting is not configured in " - "this kernel"); - } - } -} - static void setup(void) { int fd; - tst_require_root(); - - check_acct_in_kernel(); - - tst_tmpdir(); + TEST(acct(NULL)); + if (TST_RET == -1 && TST_ERR == ENOSYS) + tst_brk(TCONF, "acct() system call isn't configured in kernel"); - ltpuser = SAFE_GETPWNAM(cleanup, "nobody"); + ltpuser = SAFE_GETPWNAM("nobody"); - fd = SAFE_CREAT(cleanup, TEST_FILE5, 0777); - SAFE_CLOSE(cleanup, fd); + fd = SAFE_CREAT(TEST_FILE5, 0777); + SAFE_CLOSE(fd); - if (acct(TEST_FILE5) == -1) - tst_brkm(TBROK | TERRNO, cleanup, "acct failed unexpectedly"); + TEST(acct(TEST_FILE5)); + if (TST_RET == -1) + tst_brk(TBROK | TTERRNO, "acct failed unexpectedly"); /* turn off acct, so we are in a known state */ - if (acct(NULL) == -1) - tst_brkm(TBROK | TERRNO, cleanup, "acct(NULL) failed"); + TEST(acct(NULL)); + if (TST_RET == -1) + tst_brk(TBROK | TTERRNO, "acct(NULL) failed"); /* ELOOP SETTING */ - SAFE_SYMLINK(cleanup, TEST_FILE6, "test_file_eloop2"); - SAFE_SYMLINK(cleanup, "test_file_eloop2", TEST_FILE6); + SAFE_SYMLINK(TEST_FILE6, "test_file_eloop2"); + SAFE_SYMLINK("test_file_eloop2", TEST_FILE6); /* ENAMETOOLONG SETTING */ memset(nametoolong, 'a', PATH_MAX+1); - - /* EROFS SETTING */ - fs_type = tst_dev_fs_type(); - device = tst_acquire_device(cleanup); - - if (!device) - tst_brkm(TCONF, cleanup, "Failed to obtain block device"); - - tst_mkfs(cleanup, device, fs_type, NULL, NULL); - SAFE_MKDIR(cleanup, "mntpoint", DIR_MODE); - SAFE_MOUNT(cleanup, device, "mntpoint", fs_type, 0, NULL); - mount_flag = 1; - - /* Create a file in the file system, then remount it as read-only */ - fd = SAFE_CREAT(cleanup, TEST_FILE8, 0644); - SAFE_CLOSE(cleanup, fd); - SAFE_MOUNT(cleanup, device, "mntpoint", fs_type, - MS_REMOUNT | MS_RDONLY, NULL); } -static void acct_verify(int i) +static void cleanup(void) { - - if (test_cases[i].setupfunc) - test_cases[i].setupfunc(); - - TEST(acct(test_cases[i].filename)); - - if (test_cases[i].cleanfunc) - test_cases[i].cleanfunc(); - - if (TEST_RETURN != -1) { - tst_resm(TFAIL, "acct(%s) succeeded unexpectedly", - test_cases[i].filename); - return; - } - - if (TEST_ERRNO == test_cases[i].exp_errno) { - tst_resm(TPASS | TTERRNO, "acct failed as expected"); - } else { - tst_resm(TFAIL | TTERRNO, - "acct failed unexpectedly; expected: %d - %s", - test_cases[i].exp_errno, - strerror(test_cases[i].exp_errno)); - } + SAFE_UNLINK(TEST_FILE5); + SAFE_UNLINK(TEST_FILE6); } -static void setup2(void) +static void verify_acct(unsigned int nr) { - SAFE_SETEUID(cleanup, ltpuser->pw_uid); -} + struct test_case *tcase = &tcases[nr]; -static void cleanup2(void) -{ - SAFE_SETEUID(cleanup, 0); -} + if (tcase->setupfunc) + tcase->setupfunc(); -static void cleanup(void) -{ - if (acct(NULL) == -1) - tst_resm(TWARN | TERRNO, "acct(NULL) failed"); + TEST(acct(tcase->filename)); - if (mount_flag && tst_umount("mntpoint") < 0) { - tst_resm(TWARN | TERRNO, - "umount device:%s failed", device); - } + if (tcase->cleanfunc) + tcase->cleanfunc(); - if (device) - tst_release_device(device); + if (TST_RET != -1) + tst_res(TFAIL, "acct(%s) succeeded unexpectedly", + tcase->filename); - tst_rmdir(); + if (TST_ERR == tcase->exp_errno) + tst_res(TPASS | TTERRNO, "acct() failed as expected"); + else + tst_res(TFAIL | TTERRNO, + "acct() failed, expected: %d - %s", + tcase->exp_errno, strerror(tcase->exp_errno)); } + +static struct tst_test test = { + .needs_root = 1, + .needs_tmpdir = 1, + .mntpoint = "mntpoint", + .needs_rofs = 1, + .tcnt = ARRAY_SIZE(tcases), + .setup = setup, + .cleanup = cleanup, + .test = verify_acct, +};