#include #include #include #define MAX 2 int main () { char *p[MAX]; int sz[MAX] = {0x2000, 0x1000}; int keep = 0x1000; int offset = 0x42; int magic = 0x33; int i; int pid; int rv; for(i=0; i segv */ rv = munmap (p[0]+keep, sz[0]-keep); #else /* keep upper chunk -> ok */ rv = munmap (p[0], keep); #endif printf ("munmap() = %d\n",rv); i = 1; p[i][offset] = magic; pid = fork (); switch (pid) { case (-1): printf ("fork() failed\n"); break; case (0): printf ("child touching %p\n", &(p[i][offset])); printf ("child M[%p] = 0x%x\n", &(p[i][offset]), p[i][offset]); break; default: printf ("parent touching %p\n", &(p[i][offset])); printf ("parent M[%p] = 0x%x\n", &(p[i][offset]), p[i][offset]); break; } return 0; }