1 2#include <stdlib.h> 3#include <sys/types.h> 4#include <unistd.h> 5#include <assert.h> 6 7void do_child_badness ( char* p ) 8{ 9 /* Free it a second time */ 10 free(p); 11} 12 13void do_parent_badness ( char* p ) 14{ 15 /* Do a write off the end */ 16 p[10] = 42; 17} 18 19 20int main ( void ) 21{ 22 pid_t child; 23 char* p = malloc(10); assert(p); 24 free(p); 25 26 /* parent does something bad */ 27 p[5] = 22; 28 29 child = fork(); 30 assert(child != -1); /* assert fork did not fail */ 31 32 if (child == 0) { 33 /* I am the child */ 34 do_child_badness(p); 35 } else { 36 /* I am the parent */ 37 do_parent_badness(p); 38 } 39 40 return 0; 41 42} 43