kill05.c revision 7d0a4a57fbcd47f72b67c08df532e8ef47f6fdae
1865695bbc89088b9526ea9045410e5afb70a985cplars/*
2865695bbc89088b9526ea9045410e5afb70a985cplars *
3865695bbc89088b9526ea9045410e5afb70a985cplars *   Copyright (c) International Business Machines  Corp., 2001
4865695bbc89088b9526ea9045410e5afb70a985cplars *
5865695bbc89088b9526ea9045410e5afb70a985cplars *   This program is free software;  you can redistribute it and/or modify
6865695bbc89088b9526ea9045410e5afb70a985cplars *   it under the terms of the GNU General Public License as published by
7865695bbc89088b9526ea9045410e5afb70a985cplars *   the Free Software Foundation; either version 2 of the License, or
8865695bbc89088b9526ea9045410e5afb70a985cplars *   (at your option) any later version.
9865695bbc89088b9526ea9045410e5afb70a985cplars *
10865695bbc89088b9526ea9045410e5afb70a985cplars *   This program is distributed in the hope that it will be useful,
11865695bbc89088b9526ea9045410e5afb70a985cplars *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
12865695bbc89088b9526ea9045410e5afb70a985cplars *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
13865695bbc89088b9526ea9045410e5afb70a985cplars *   the GNU General Public License for more details.
14865695bbc89088b9526ea9045410e5afb70a985cplars *
15865695bbc89088b9526ea9045410e5afb70a985cplars *   You should have received a copy of the GNU General Public License
16865695bbc89088b9526ea9045410e5afb70a985cplars *   along with this program;  if not, write to the Free Software
17865695bbc89088b9526ea9045410e5afb70a985cplars *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18865695bbc89088b9526ea9045410e5afb70a985cplars */
19865695bbc89088b9526ea9045410e5afb70a985cplars
20865695bbc89088b9526ea9045410e5afb70a985cplars/*
21865695bbc89088b9526ea9045410e5afb70a985cplars * NAME
22865695bbc89088b9526ea9045410e5afb70a985cplars *	kill05.c
23865695bbc89088b9526ea9045410e5afb70a985cplars *
24865695bbc89088b9526ea9045410e5afb70a985cplars * DESCRIPTION
25865695bbc89088b9526ea9045410e5afb70a985cplars *	Test case to check that kill() fails when passed a pid owned by another
26865695bbc89088b9526ea9045410e5afb70a985cplars *	user.
27865695bbc89088b9526ea9045410e5afb70a985cplars *
28865695bbc89088b9526ea9045410e5afb70a985cplars * ALGORITHM
29865695bbc89088b9526ea9045410e5afb70a985cplars *	call setup
30865695bbc89088b9526ea9045410e5afb70a985cplars *	loop if the -i option was given
31865695bbc89088b9526ea9045410e5afb70a985cplars *	setup a shared memory segment to for a flag which will notify
32865695bbc89088b9526ea9045410e5afb70a985cplars *	ltpuser1's process that life is not worth living in a continuous loop.
33865695bbc89088b9526ea9045410e5afb70a985cplars *	fork a child and set the euid to ltpuser1
34865695bbc89088b9526ea9045410e5afb70a985cplars *	set the parents euid to ltpuser2
35865695bbc89088b9526ea9045410e5afb70a985cplars *	execute the kill system call on ltpuser1's pid
36865695bbc89088b9526ea9045410e5afb70a985cplars *	check the return value
37865695bbc89088b9526ea9045410e5afb70a985cplars *	if return value is not -1
38865695bbc89088b9526ea9045410e5afb70a985cplars *		issue a FAIL message, break remaining tests and cleanup
39865695bbc89088b9526ea9045410e5afb70a985cplars *      if we are doing functional testing
40865695bbc89088b9526ea9045410e5afb70a985cplars *              if the errno was set to 1 (Operation not permitted)
41865695bbc89088b9526ea9045410e5afb70a985cplars *                      issue a PASS message
42865695bbc89088b9526ea9045410e5afb70a985cplars *              otherwise
43865695bbc89088b9526ea9045410e5afb70a985cplars *                      issue a FAIL message
44865695bbc89088b9526ea9045410e5afb70a985cplars *	call cleanup
45865695bbc89088b9526ea9045410e5afb70a985cplars *
46865695bbc89088b9526ea9045410e5afb70a985cplars * USAGE
47865695bbc89088b9526ea9045410e5afb70a985cplars *  kill05 [-c n] [-e] [-i n] [-I x] [-P x] [-t]
48865695bbc89088b9526ea9045410e5afb70a985cplars *     where,  -c n : Run n copies concurrently.
49865695bbc89088b9526ea9045410e5afb70a985cplars *             -e   : Turn on errno logging.
50865695bbc89088b9526ea9045410e5afb70a985cplars *             -i n : Execute test n times.
51865695bbc89088b9526ea9045410e5afb70a985cplars *             -I x : Execute test for x seconds.
52865695bbc89088b9526ea9045410e5afb70a985cplars *             -P x : Pause for x seconds between iterations.
53865695bbc89088b9526ea9045410e5afb70a985cplars *             -t   : Turn on syscall timing.
54865695bbc89088b9526ea9045410e5afb70a985cplars *
55865695bbc89088b9526ea9045410e5afb70a985cplars * HISTORY
56865695bbc89088b9526ea9045410e5afb70a985cplars *	07/2001 Ported by Wayne Boyer
57865695bbc89088b9526ea9045410e5afb70a985cplars *
58c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak *      26/02/2008 Renaud Lottiaux (Renaud.Lottiaux@kerlabs.com)
594bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak *      - Fix wrong return value check on shmat system call (leading to
60c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak *        segfault in case of error with this syscall).
61c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak *      - Fix deletion of IPC memory segment. Segment was not correctly
62c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak *        deleted due to the change of uid during the test.
63c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak *
64865695bbc89088b9526ea9045410e5afb70a985cplars * RESTRICTIONS
65865695bbc89088b9526ea9045410e5afb70a985cplars *	This test must be run as root.
66865695bbc89088b9526ea9045410e5afb70a985cplars *	Looping with the -i option does not work correctly.
67865695bbc89088b9526ea9045410e5afb70a985cplars */
68865695bbc89088b9526ea9045410e5afb70a985cplars
69865695bbc89088b9526ea9045410e5afb70a985cplars#include "test.h"
70865695bbc89088b9526ea9045410e5afb70a985cplars#include "usctest.h"
71865695bbc89088b9526ea9045410e5afb70a985cplars
72865695bbc89088b9526ea9045410e5afb70a985cplars#include <errno.h>
73865695bbc89088b9526ea9045410e5afb70a985cplars#include <malloc.h>
74865695bbc89088b9526ea9045410e5afb70a985cplars#include <pwd.h>
75865695bbc89088b9526ea9045410e5afb70a985cplars#include <signal.h>
76865695bbc89088b9526ea9045410e5afb70a985cplars#include <unistd.h>
77865695bbc89088b9526ea9045410e5afb70a985cplars#include <sys/ipc.h>
78865695bbc89088b9526ea9045410e5afb70a985cplars#include <sys/shm.h>
79865695bbc89088b9526ea9045410e5afb70a985cplars#include <sys/types.h>
80865695bbc89088b9526ea9045410e5afb70a985cplars#include <sys/wait.h>
81865695bbc89088b9526ea9045410e5afb70a985cplars
82b8360ee9a4b3e0ae1707116f48bfdbcee9ba2dberobbiewextern void rm_shm(int);
83b8360ee9a4b3e0ae1707116f48bfdbcee9ba2dberobbiew
84865695bbc89088b9526ea9045410e5afb70a985cplarsvoid cleanup(void);
85865695bbc89088b9526ea9045410e5afb70a985cplarsvoid setup(void);
86d34d581c6a320e356a6cda923c7aa399479e812crobbiewvoid do_child(void);
87cd5a7800406e972d01edbcc82f094b15b27e4aafsubrata_modakvoid do_master_child(char **av);
88865695bbc89088b9526ea9045410e5afb70a985cplars
8956207cec7732e09c216c751c0b5f88a242bacae6subrata_modakchar *TCID = "kill05";
90865695bbc89088b9526ea9045410e5afb70a985cplarsint TST_TOTAL = 1;
91865695bbc89088b9526ea9045410e5afb70a985cplarsint shmid1 = -1;
92104a4d9f38b7c9e4fda847f62f59f7ba2d18ccf4subrata_modakextern key_t semkey;
93865695bbc89088b9526ea9045410e5afb70a985cplarsint *flag;
94865695bbc89088b9526ea9045410e5afb70a985cplars
9556207cec7732e09c216c751c0b5f88a242bacae6subrata_modakint exp_enos[] = { EPERM, 0 };
96865695bbc89088b9526ea9045410e5afb70a985cplars
97865695bbc89088b9526ea9045410e5afb70a985cplarsextern int Tst_count;
98865695bbc89088b9526ea9045410e5afb70a985cplarsextern int getipckey();
99865695bbc89088b9526ea9045410e5afb70a985cplars
100865695bbc89088b9526ea9045410e5afb70a985cplars#define TEST_SIG SIGKILL
101865695bbc89088b9526ea9045410e5afb70a985cplars
102b8360ee9a4b3e0ae1707116f48bfdbcee9ba2dberobbiewint main(int ac, char **av)
103865695bbc89088b9526ea9045410e5afb70a985cplars{
10456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	char *msg;		/* message returned from parse_opts */
105c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak	pid_t pid;
106b8360ee9a4b3e0ae1707116f48bfdbcee9ba2dberobbiew	int status;
107865695bbc89088b9526ea9045410e5afb70a985cplars
108865695bbc89088b9526ea9045410e5afb70a985cplars	/* parse standard options */
10945e285d46ab47b0ff76c88acb5ba97b0bd5f753dGarrett Cooper	if ((msg = parse_opts(ac, av, NULL, NULL)) != NULL) {
11060fa8014af7534eaefa901200c8df4b74ce422e6Garrett Cooper		tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
111865695bbc89088b9526ea9045410e5afb70a985cplars	}
112d34d581c6a320e356a6cda923c7aa399479e812crobbiew#ifdef UCLINUX
113d34d581c6a320e356a6cda923c7aa399479e812crobbiew	maybe_run_child(&do_child, "");
114d34d581c6a320e356a6cda923c7aa399479e812crobbiew#endif
115d34d581c6a320e356a6cda923c7aa399479e812crobbiew
11656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	setup();		/* global setup */
117865695bbc89088b9526ea9045410e5afb70a985cplars
118c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak	pid = FORK_OR_VFORK();
119c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak	if (pid < 0)
120c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak		tst_brkm(TBROK, cleanup, "Fork failed");
121bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
122c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak	if (pid == 0) {
123cd5a7800406e972d01edbcc82f094b15b27e4aafsubrata_modak		do_master_child(av);
124c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak		return (0);
12556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	} else {
126c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak		waitpid(pid, &status, 0);
127c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak	}
128c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak
129c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak	cleanup();
1307d0a4a57fbcd47f72b67c08df532e8ef47f6fdaeGarrett Cooper	tst_exit();
131c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak}
132c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak
133c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak/*
134c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak * do_master_child()
135c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak */
13656207cec7732e09c216c751c0b5f88a242bacae6subrata_modakvoid do_master_child(char **av)
137c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak{
13856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	int lc;			/* loop counter */
139c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak
140c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak	pid_t pid1;
141c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak	int status;
142c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak
143c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak	char user1name[] = "nobody";
144c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak	char user2name[] = "bin";
145c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak
14656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	extern struct passwd *my_getpwnam(char *);
147c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak
148c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak	struct passwd *ltpuser1, *ltpuser2;
149c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak
150865695bbc89088b9526ea9045410e5afb70a985cplars	ltpuser1 = my_getpwnam(user1name);
151865695bbc89088b9526ea9045410e5afb70a985cplars	ltpuser2 = my_getpwnam(user2name);
152865695bbc89088b9526ea9045410e5afb70a985cplars
153865695bbc89088b9526ea9045410e5afb70a985cplars	TEST_EXP_ENOS(exp_enos);
154865695bbc89088b9526ea9045410e5afb70a985cplars
155865695bbc89088b9526ea9045410e5afb70a985cplars	/* The following loop checks looping state if -i option given */
156865695bbc89088b9526ea9045410e5afb70a985cplars	for (lc = 0; TEST_LOOPING(lc); lc++) {
157865695bbc89088b9526ea9045410e5afb70a985cplars
158865695bbc89088b9526ea9045410e5afb70a985cplars		/* reset Tst_count in case we are looping */
159865695bbc89088b9526ea9045410e5afb70a985cplars		Tst_count = 0;
160865695bbc89088b9526ea9045410e5afb70a985cplars
161865695bbc89088b9526ea9045410e5afb70a985cplars		*flag = 0;
162865695bbc89088b9526ea9045410e5afb70a985cplars
163865695bbc89088b9526ea9045410e5afb70a985cplars		/*
164865695bbc89088b9526ea9045410e5afb70a985cplars		 * Fork a process and set the euid so that it is
165865695bbc89088b9526ea9045410e5afb70a985cplars		 * different from this one.
166865695bbc89088b9526ea9045410e5afb70a985cplars		 */
167865695bbc89088b9526ea9045410e5afb70a985cplars
168d34d581c6a320e356a6cda923c7aa399479e812crobbiew		pid1 = FORK_OR_VFORK();
169865695bbc89088b9526ea9045410e5afb70a985cplars
170865695bbc89088b9526ea9045410e5afb70a985cplars		if (pid1 < 0) {
171865695bbc89088b9526ea9045410e5afb70a985cplars			tst_brkm(TBROK, cleanup, "Fork failed");
172865695bbc89088b9526ea9045410e5afb70a985cplars		}
173865695bbc89088b9526ea9045410e5afb70a985cplars
17456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		if (pid1 == 0) {	/* child */
17556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			if (setreuid(ltpuser1->pw_uid, ltpuser1->pw_uid) == -1) {
176865695bbc89088b9526ea9045410e5afb70a985cplars				tst_resm(TWARN, "setreuid failed in child");
177865695bbc89088b9526ea9045410e5afb70a985cplars			}
178d34d581c6a320e356a6cda923c7aa399479e812crobbiew#ifdef UCLINUX
179d34d581c6a320e356a6cda923c7aa399479e812crobbiew			if (self_exec(av[0], "") < 0) {
18056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak				tst_brkm(TBROK, cleanup,
18156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak					 "self_exec of child failed");
182865695bbc89088b9526ea9045410e5afb70a985cplars			}
183d34d581c6a320e356a6cda923c7aa399479e812crobbiew#else
184d34d581c6a320e356a6cda923c7aa399479e812crobbiew			do_child();
185d34d581c6a320e356a6cda923c7aa399479e812crobbiew#endif
18656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		} else {	/* parent */
18756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			if (setreuid(ltpuser2->pw_uid, ltpuser2->pw_uid) == -1) {
188865695bbc89088b9526ea9045410e5afb70a985cplars				tst_resm(TWARN, "seteuid failed in child");
189865695bbc89088b9526ea9045410e5afb70a985cplars			}
190865695bbc89088b9526ea9045410e5afb70a985cplars
191865695bbc89088b9526ea9045410e5afb70a985cplars			TEST(kill(pid1, TEST_SIG));
192865695bbc89088b9526ea9045410e5afb70a985cplars
193865695bbc89088b9526ea9045410e5afb70a985cplars			/* signal the child that we're done */
194865695bbc89088b9526ea9045410e5afb70a985cplars			*flag = 1;
195865695bbc89088b9526ea9045410e5afb70a985cplars
196865695bbc89088b9526ea9045410e5afb70a985cplars			waitpid(pid1, &status, 0);
197865695bbc89088b9526ea9045410e5afb70a985cplars
198865695bbc89088b9526ea9045410e5afb70a985cplars			if (TEST_RETURN != -1) {
199865695bbc89088b9526ea9045410e5afb70a985cplars				tst_resm(TFAIL, "%s failed - errno = "
20056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak					 "%d : %s Expected a return "
201ae54285103a88f835a9dc79b489474b550c3355dvapier					 "value of -1 got %ld", TCID, TEST_ERRNO,
20256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak					 strerror(TEST_ERRNO), TEST_RETURN);
203865695bbc89088b9526ea9045410e5afb70a985cplars
204865695bbc89088b9526ea9045410e5afb70a985cplars				continue;
205865695bbc89088b9526ea9045410e5afb70a985cplars			}
206865695bbc89088b9526ea9045410e5afb70a985cplars		}
207865695bbc89088b9526ea9045410e5afb70a985cplars
208865695bbc89088b9526ea9045410e5afb70a985cplars		/*
209865695bbc89088b9526ea9045410e5afb70a985cplars		 * Check to see if the errno was set to the expected
210865695bbc89088b9526ea9045410e5afb70a985cplars		 * value of 1 : EPERM
211865695bbc89088b9526ea9045410e5afb70a985cplars		 */
212865695bbc89088b9526ea9045410e5afb70a985cplars		TEST_ERROR_LOG(TEST_ERRNO);
213865695bbc89088b9526ea9045410e5afb70a985cplars
214865695bbc89088b9526ea9045410e5afb70a985cplars		if (TEST_ERRNO == EPERM) {
215865695bbc89088b9526ea9045410e5afb70a985cplars			tst_resm(TPASS, "errno set to %d : %s, as "
21656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak				 "expected", TEST_ERRNO, strerror(TEST_ERRNO));
217865695bbc89088b9526ea9045410e5afb70a985cplars		} else {
218865695bbc89088b9526ea9045410e5afb70a985cplars			tst_resm(TFAIL, "errno set to %d : %s expected "
21956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak				 "%d : %s", TEST_ERRNO,
22056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak				 strerror(TEST_ERRNO), 1, strerror(1));
221865695bbc89088b9526ea9045410e5afb70a985cplars		}
222865695bbc89088b9526ea9045410e5afb70a985cplars	}
223865695bbc89088b9526ea9045410e5afb70a985cplars}
224865695bbc89088b9526ea9045410e5afb70a985cplars
225d34d581c6a320e356a6cda923c7aa399479e812crobbiew/*
226d34d581c6a320e356a6cda923c7aa399479e812crobbiew * do_child()
227d34d581c6a320e356a6cda923c7aa399479e812crobbiew */
22856207cec7732e09c216c751c0b5f88a242bacae6subrata_modakvoid do_child()
229d34d581c6a320e356a6cda923c7aa399479e812crobbiew{
230d34d581c6a320e356a6cda923c7aa399479e812crobbiew	pid_t my_pid;
231d34d581c6a320e356a6cda923c7aa399479e812crobbiew
232d34d581c6a320e356a6cda923c7aa399479e812crobbiew	my_pid = getpid();
23356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	while (1) {
234d34d581c6a320e356a6cda923c7aa399479e812crobbiew		if (*flag == 1) {
235d34d581c6a320e356a6cda923c7aa399479e812crobbiew			exit(0);
236d34d581c6a320e356a6cda923c7aa399479e812crobbiew		} else {
23756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			sleep(1);
238d34d581c6a320e356a6cda923c7aa399479e812crobbiew		}
239d34d581c6a320e356a6cda923c7aa399479e812crobbiew	}
240d34d581c6a320e356a6cda923c7aa399479e812crobbiew}
241865695bbc89088b9526ea9045410e5afb70a985cplars
242865695bbc89088b9526ea9045410e5afb70a985cplars/*
243865695bbc89088b9526ea9045410e5afb70a985cplars * setup() - performs all ONE TIME setup for this test
244865695bbc89088b9526ea9045410e5afb70a985cplars */
24556207cec7732e09c216c751c0b5f88a242bacae6subrata_modakvoid setup(void)
246865695bbc89088b9526ea9045410e5afb70a985cplars{
247865695bbc89088b9526ea9045410e5afb70a985cplars	/* Check that the process is owned by root */
248865695bbc89088b9526ea9045410e5afb70a985cplars	if (geteuid() != 0) {
249865695bbc89088b9526ea9045410e5afb70a985cplars		tst_brkm(TBROK, cleanup, "Test must be run as root");
250865695bbc89088b9526ea9045410e5afb70a985cplars	}
251865695bbc89088b9526ea9045410e5afb70a985cplars
252865695bbc89088b9526ea9045410e5afb70a985cplars	TEST_PAUSE;
253865695bbc89088b9526ea9045410e5afb70a985cplars
254c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak	/* Make a temp directory and cd to it.
255c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak	 * Usefull to be sure getipckey generated different IPC keys.
256c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak	 */
257c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak	tst_tmpdir();
258c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak
25956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	/* get an IPC resource key */
26056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	semkey = getipckey();
261865695bbc89088b9526ea9045410e5afb70a985cplars
262865695bbc89088b9526ea9045410e5afb70a985cplars	if ((shmid1 = shmget(semkey, (int)getpagesize(),
26356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			     0666 | IPC_CREAT)) == -1) {
264865695bbc89088b9526ea9045410e5afb70a985cplars		tst_brkm(TBROK, cleanup, "Failed to setup shared memory");
265865695bbc89088b9526ea9045410e5afb70a985cplars	}
266865695bbc89088b9526ea9045410e5afb70a985cplars
26756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	/*flag = (int *)shmat(shmid1, 0, 0); */
268c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak	if ((flag = (int *)shmat(shmid1, 0, 0)) == (int *)-1) {
269ae54285103a88f835a9dc79b489474b550c3355dvapier		tst_brkm(TBROK|TERRNO, cleanup,
270ae54285103a88f835a9dc79b489474b550c3355dvapier			 "Failed to attatch shared memory:%d", shmid1);
271865695bbc89088b9526ea9045410e5afb70a985cplars	}
272865695bbc89088b9526ea9045410e5afb70a985cplars}
273865695bbc89088b9526ea9045410e5afb70a985cplars
274865695bbc89088b9526ea9045410e5afb70a985cplars/*
275865695bbc89088b9526ea9045410e5afb70a985cplars * cleanup() - performs all the ONE TIME cleanup for this test at completion
276865695bbc89088b9526ea9045410e5afb70a985cplars * or premature exit.
277865695bbc89088b9526ea9045410e5afb70a985cplars */
27856207cec7732e09c216c751c0b5f88a242bacae6subrata_modakvoid cleanup(void)
279865695bbc89088b9526ea9045410e5afb70a985cplars{
280865695bbc89088b9526ea9045410e5afb70a985cplars	/*
281865695bbc89088b9526ea9045410e5afb70a985cplars	 * print timing status if that option was specified.
282865695bbc89088b9526ea9045410e5afb70a985cplars	 * print errno log if that option was specified
283865695bbc89088b9526ea9045410e5afb70a985cplars	 */
284865695bbc89088b9526ea9045410e5afb70a985cplars	TEST_CLEANUP;
285865695bbc89088b9526ea9045410e5afb70a985cplars
286c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak	tst_rmdir();
287c185725bb81ffe7762e43275ad9212725157ebd3subrata_modak
288865695bbc89088b9526ea9045410e5afb70a985cplars	/*
289865695bbc89088b9526ea9045410e5afb70a985cplars	 * if it exists, remove the shared memory
290865695bbc89088b9526ea9045410e5afb70a985cplars	 */
291865695bbc89088b9526ea9045410e5afb70a985cplars	rm_shm(shmid1);
292865695bbc89088b9526ea9045410e5afb70a985cplars
2932c28215423293e443469a07ae7011135d058b671Garrett Cooper}