xref: /aosp_15_r20/external/ltp/testcases/kernel/containers/utsname/utsname01.c (revision 49cdfc7efb34551c7342be41a7384b9c40d7cab7)
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * Copyright (C) 2023 SUSE LLC Andrea Cervesato <[email protected]>
4  */
5 
6 /*\
7  * [Description]
8  *
9  * Clone two plain processes and check if both read the same hostname.
10  */
11 
12 #define _GNU_SOURCE
13 
14 #include "tst_test.h"
15 
16 static char *hostname1;
17 static char *hostname2;
18 
run(void)19 static void run(void)
20 {
21 	memset(hostname1, 0, HOST_NAME_MAX);
22 	memset(hostname2, 0, HOST_NAME_MAX);
23 
24 	if (!SAFE_FORK()) {
25 		SAFE_GETHOSTNAME(hostname1, HOST_NAME_MAX);
26 		return;
27 	}
28 
29 	if (!SAFE_FORK()) {
30 		SAFE_GETHOSTNAME(hostname2, HOST_NAME_MAX);
31 		return;
32 	}
33 
34 	tst_reap_children();
35 
36 	TST_EXP_PASS(strcmp(hostname1, hostname2));
37 }
38 
setup(void)39 static void setup(void)
40 {
41 	hostname1 = SAFE_MMAP(NULL, HOST_NAME_MAX, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
42 	hostname2 = SAFE_MMAP(NULL, HOST_NAME_MAX, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
43 }
44 
cleanup(void)45 static void cleanup(void)
46 {
47 	SAFE_MUNMAP(hostname1, HOST_NAME_MAX);
48 	SAFE_MUNMAP(hostname2, HOST_NAME_MAX);
49 }
50 
51 static struct tst_test test = {
52 	.test_all = run,
53 	.setup = setup,
54 	.cleanup = cleanup,
55 	.forks_child = 1,
56 };
57