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 * Check for equality of getpid() from a child and return value of clone(2) 11 */ 12 13#include <stdio.h> 14#include <stdlib.h> 15#include "tst_test.h" 16#include "clone_platform.h" 17 18static void *child_stack; 19static int *child_pid; 20 21static int child_fn(void *arg LTP_ATTRIBUTE_UNUSED) 22{ 23 *child_pid = getpid(); 24 exit(0); 25} 26 27static void verify_clone(void) 28{ 29 30 TST_EXP_PID_SILENT(ltp_clone(SIGCHLD, child_fn, NULL, CHILD_STACK_SIZE, 31 child_stack)); 32 33 if (!TST_PASS) 34 return; 35 36 tst_reap_children(); 37 38 TST_EXP_VAL(TST_RET, *child_pid, "pid(%d)", *child_pid); 39} 40 41static void setup(void) 42{ 43 child_pid = SAFE_MMAP(NULL, sizeof(*child_pid), PROT_READ | PROT_WRITE, 44 MAP_SHARED | MAP_ANONYMOUS, -1, 0); 45} 46 47static void cleanup(void) 48{ 49 if (child_pid) 50 SAFE_MUNMAP(child_pid, sizeof(*child_pid)); 51} 52 53static struct tst_test test = { 54 .setup = setup, 55 .test_all = verify_clone, 56 .bufs = (struct tst_buffers []) { 57 {&child_stack, .size = CHILD_STACK_SIZE}, 58 {}, 59 }, 60 .cleanup = cleanup, 61}; 62