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