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