1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Copyright (c) Wipro Technologies Ltd, 2002. All Rights Reserved. 4 * Copyright (c) 2012 Wanlong Gao <gaowanlong@cn.fujitsu.com> 5 */ 6 7/*\ 8 * [Description] 9 * 10 * Basic clone() test. 11 * 12 * Use clone() to create a child process, and wait for the child process to exit, 13 * verify that the child process pid is correct. 14 */ 15 16#include <stdlib.h> 17#include "tst_test.h" 18#include "clone_platform.h" 19 20static void *child_stack; 21 22static int do_child(void *arg LTP_ATTRIBUTE_UNUSED) 23{ 24 exit(0); 25} 26 27static void verify_clone(void) 28{ 29 int status, child_pid; 30 31 TST_EXP_PID_SILENT(ltp_clone(SIGCHLD, do_child, NULL, 32 CHILD_STACK_SIZE, child_stack), "clone()"); 33 34 child_pid = SAFE_WAIT(&status); 35 36 if (child_pid == TST_RET) 37 tst_res(TPASS, "clone returned %ld", TST_RET); 38 else 39 tst_res(TFAIL, "clone returned %ld, wait returned %d", 40 TST_RET, child_pid); 41 42 if (WIFEXITED(status) && WEXITSTATUS(status) == 0) 43 tst_res(TPASS, "Child exited with 0"); 44 else 45 tst_res(TFAIL, "Child %s", tst_strstatus(status)); 46} 47 48static struct tst_test test = { 49 .test_all = verify_clone, 50 .forks_child = 1, 51 .bufs = (struct tst_buffers []) { 52 {&child_stack, .size = CHILD_STACK_SIZE}, 53 {} 54 }, 55}; 56