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