#include #include #include #include int main() { int psize = getpagesize(); int id; void *p; /* * We need a shared mapping to enter CF_PARALLEL mode. * The easiest way to get that is shmat. */ id = shmget(IPC_PRIVATE, 2 * psize, IPC_CREAT | 0600); if (id < 0) { perror("shmget"); return 2; } p = shmat(id, NULL, 0); if (p == MAP_FAILED) { perror("shmat"); return 2; } /* Protect the second page. */ if (mprotect(p + psize, psize, PROT_NONE) < 0) { perror("mprotect"); return 2; } /* * Load 4 bytes, 6 bytes from the end of the page. * On success this will load 0 from the newly allocated shm. */ return *(int *)(p + psize - 6); }