1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3 * Copyright (c) International Business Machines Corp., 2001
4 */
5
6 /*\
7 * [Description]
8 *
9 * Tests basic error handing of the shmdt syscall.
10 *
11 * -EINVAL there is no shared memory segment attached at shmaddr.
12 * -EINVAL shmaddr is not aligned on a page boundary.
13 */
14
15 #include <sys/types.h>
16 #include <sys/shm.h>
17 #include "tst_test.h"
18 #include "libnewipc.h"
19
20 static void *non_attched_addr;
21 static void *unaligned_addr;
22
23 struct tcase {
24 void **addr;
25 char *des;
26 } tcases[] = {
27 {&non_attched_addr, "shmdt(non_attched_addr)"},
28 {&unaligned_addr, "shmdt(unaligned_addr)"}
29 };
30
verify_shmdt(unsigned int n)31 static void verify_shmdt(unsigned int n)
32 {
33 struct tcase *tc = &tcases[n];
34
35 TST_EXP_FAIL(shmdt(*tc->addr), EINVAL, "%s", tc->des);
36 }
37
setup(void)38 static void setup(void)
39 {
40 non_attched_addr = PROBE_FREE_ADDR();
41 unaligned_addr = non_attched_addr + SHMLBA - 1;
42 }
43
44 static struct tst_test test = {
45 .setup = setup,
46 .test = verify_shmdt,
47 .tcnt = ARRAY_SIZE(tcases),
48 };
49