master
c 38 lines 818 Bytes
Raw
1 #include <sys/mman.h>
2 #include <sys/shm.h>
3 #include <unistd.h>
4 #include <stdio.h>
5
6 int main()
7 {
8 int psize = getpagesize();
9 int id;
10 void *p;
11
12 /*
13 * We need a shared mapping to enter CF_PARALLEL mode.
14 * The easiest way to get that is shmat.
15 */
16 id = shmget(IPC_PRIVATE, 2 * psize, IPC_CREAT | 0600);
17 if (id < 0) {
18 perror("shmget");
19 return 2;
20 }
21 p = shmat(id, NULL, 0);
22 if (p == MAP_FAILED) {
23 perror("shmat");
24 return 2;
25 }
26
27 /* Protect the second page. */
28 if (mprotect(p + psize, psize, PROT_NONE) < 0) {
29 perror("mprotect");
30 return 2;
31 }
32
33 /*
34 * Load 4 bytes, 6 bytes from the end of the page.
35 * On success this will load 0 from the newly allocated shm.
36 */
37 return *(int *)(p + psize - 6);
38 }