[LTP] [PATCH v1] Refactor fork05 using new LTP API
Andrea Cervesato
andrea.cervesato@suse.de
Thu Sep 7 12:00:41 CEST 2023
From: Andrea Cervesato <andrea.cervesato@suse.com>
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
testcases/kernel/syscalls/fork/fork05.c | 133 +++++-------------------
1 file changed, 28 insertions(+), 105 deletions(-)
diff --git a/testcases/kernel/syscalls/fork/fork05.c b/testcases/kernel/syscalls/fork/fork05.c
index 9a99cff1d..bf146d32a 100644
--- a/testcases/kernel/syscalls/fork/fork05.c
+++ b/testcases/kernel/syscalls/fork/fork05.c
@@ -1,44 +1,15 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- * Portions Copyright (c) 2000 Ulrich Drepper
- *
- * 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.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * 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.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com$
- *
- * For further information regarding this notice, see:$
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
+ * Author: Ulrich Drepper / Nate Straz , Red Hat
+ * Copyright (C) 2023 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com>
+ */
+
+/*\
+ * [Description]
*
- * Linux Test Project - Silicon Graphics, Inc.
- * TEST IDENTIFIER : fork05
- * EXECUTED BY : anyone
- * TEST TITLE : Make sure LDT is propagated correctly
- * TEST CASE TOTAL : 1
- * CPU TYPES : i386
- * AUTHORS : Ulrich Drepper
- * Nate Straz
+ * This test verifies that LDT is propagated correctly from parent process to
+ * the child process.
*
*On Friday, May 2, 2003 at 09:47:00AM MST, Ulrich Drepper wrote:
*>Robert Williamson wrote:
@@ -96,55 +67,22 @@
*> Red Hat `--' drepper at redhat.com `------------------------
*>
*> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- *
*/
-#include <stdio.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <sys/wait.h>
+#include <asm/ldt.h>
#include "lapi/syscalls.h"
-#include "test.h"
-
-char *TCID = "fork05";
-
-static char *environ_list[] = { "TERM", "NoTSetzWq", "TESTPROG" };
-
-#define NUMBER_OF_ENVIRON (sizeof(environ_list)/sizeof(char *))
-int TST_TOTAL = NUMBER_OF_ENVIRON;
+#include "tst_test.h"
#if defined(linux) && defined(__i386__)
-struct modify_ldt_ldt_s {
- unsigned int entry_number;
- unsigned long int base_addr;
- unsigned int limit;
- unsigned int seg_32bit:1;
- unsigned int contents:2;
- unsigned int read_exec_only:1;
- unsigned int limit_in_pages:1;
- unsigned int seg_not_present:1;
- unsigned int useable:1;
- unsigned int empty:25;
-};
-
-static int a = 42;
-
-static void modify_ldt(int func, struct modify_ldt_ldt_s *ptr, int bytecount)
-{
- tst_syscall(__NR_modify_ldt, func, ptr, bytecount);
-}
-
-int main(void)
+static void run(void)
{
struct modify_ldt_ldt_s ldt0;
+ int base_addr = 42;
int lo;
- pid_t pid;
- int res;
ldt0.entry_number = 0;
- ldt0.base_addr = (long)&a;
+ ldt0.base_addr = (long)&base_addr;
ldt0.limit = 4;
ldt0.seg_32bit = 1;
ldt0.contents = 0;
@@ -154,49 +92,34 @@ int main(void)
ldt0.useable = 1;
ldt0.empty = 0;
- modify_ldt(1, &ldt0, sizeof(ldt0));
+ tst_syscall(__NR_modify_ldt, 1, &ldt0, sizeof(ldt0));
asm volatile ("movw %w0, %%fs"::"q" (7));
-
asm volatile ("movl %%fs:0, %0":"=r" (lo));
- tst_resm(TINFO, "a = %d", lo);
+ tst_res(TINFO, "a = %d", lo);
asm volatile ("pushl %%fs; popl %0":"=q" (lo));
- tst_resm(TINFO, "%%fs = %#06hx", lo);
+ tst_res(TINFO, "%%fs = %#06hx", lo);
asm volatile ("movl %0, %%fs:0"::"r" (99));
- pid = fork();
-
- if (pid == 0) {
+ if (!SAFE_FORK()) {
asm volatile ("pushl %%fs; popl %0":"=q" (lo));
- tst_resm(TINFO, "%%fs = %#06hx", lo);
+ tst_res(TINFO, "%%fs = %#06hx", lo);
asm volatile ("movl %%fs:0, %0":"=r" (lo));
- tst_resm(TINFO, "a = %d", lo);
+ tst_res(TINFO, "a = %d", lo);
+
+ TST_EXP_EQ_LI(lo, 99);
- if (lo != 99)
- tst_resm(TFAIL, "Test failed");
- else
- tst_resm(TPASS, "Test passed");
exit(lo != 99);
- } else {
- waitpid(pid, &res, 0);
}
-
- return WIFSIGNALED(res);
}
-#else /* if defined(linux) && defined(__i386__) */
-
-int main(void)
-{
- tst_resm(TINFO, "%%fs test only for ix86");
-
- /*
- * should be successful on all non-ix86 platforms.
- */
- tst_exit();
-}
+static struct tst_test test = {
+ .run_all = run
+};
-#endif /* if defined(linux) && defined(__i386__) */
+#else /* defined(linux) && defined(__i386__) */
+ TST_TEST_TCONF("Test only supports linux 32 bits");
+#endif
--
2.35.3
More information about the ltp
mailing list