From 04fc869149c3ae10d3835049738818e68174d05d Mon Sep 17 00:00:00 2001 From: Justus Winter <4winter@informatik.uni-hamburg.de> Date: Sun, 30 Mar 2014 19:20:05 +0200 Subject: Add portseal --- test/test.c | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 test/test.c (limited to 'test/test.c') diff --git a/test/test.c b/test/test.c new file mode 100644 index 0000000..b3012d7 --- /dev/null +++ b/test/test.c @@ -0,0 +1,102 @@ +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include + +void +dosth (void) +{ + mach_port_t foo; + mach_port_t bar = MACH_PORT_DEAD; + + foo = file_name_lookup ("/dev", O_NOTRANS, 0); + if (! MACH_PORT_VALID (foo)) + error (1, errno, "file_name_lookup"); + + fprintf (stderr, "dosth looked up %d\n", foo); +} + +void +donothing (mach_port_t *p) +{ +} + +void +dosthelse (mach_port_t *p) +{ + *p = file_name_lookup ("/bin", O_NOTRANS, 0); + if (! MACH_PORT_VALID (*p)) + error (1, errno, "file_name_lookup"); + + fprintf (stderr, "dosthelse looked up %d\n", *p); + donothing (p); +} + +mach_port_t some_port; +mach_port_t some_other_port; + +void +dosthglobal (void) +{ + some_port = file_name_lookup ("/sbin", O_NOTRANS, 0); + if (! MACH_PORT_VALID (some_port)) + error (1, errno, "file_name_lookup"); + + fprintf (stderr, "dosthglobal looked up %d\n", some_port); + + some_other_port = some_port; + some_port = MACH_PORT_NULL; +} + +void +doleakreceive (void) +{ + mach_port_t foo; + error_t err = mach_port_allocate (mach_task_self (), + MACH_PORT_RIGHT_RECEIVE, + &foo); + if (err) + error (1, errno, "mach_port_allocate"); + + fprintf (stderr, "allocated receive port %d\n", foo); +} + +void +dolookupcwd (void) +{ + mach_port_t foo; + foo = getcwdir (); + if (! MACH_PORT_VALID (foo)) + error (1, errno, "file_name_lookup"); + + fprintf (stderr, "dolookupcwd looked up %d\n", foo); +} + +void +gopinniped (void) +{ + mach_port_deallocate (mach_task_self (), 12345); + mach_port_destroy (mach_task_self (), 54321); +} + +int +main () +{ + dosth (); + + mach_port_t *p = malloc (sizeof *p); + dosthelse (p); + free (p); + + dosthglobal (); + some_other_port = MACH_PORT_NULL; + + doleakreceive (); + dolookupcwd (); + gopinniped (); + + return 0; +} -- cgit v1.2.3