diff options
author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2014-03-30 19:20:05 +0200 |
---|---|---|
committer | Justus Winter <4winter@informatik.uni-hamburg.de> | 2014-03-30 19:20:05 +0200 |
commit | 04fc869149c3ae10d3835049738818e68174d05d (patch) | |
tree | a65edd7f02ab50028d5d8de659620ded21ac8df3 /test/test.c | |
parent | bdc34d0383ffd80bc76b24619b26df29307243e0 (diff) |
Add portseal
Diffstat (limited to 'test/test.c')
-rw-r--r-- | test/test.c | 102 |
1 files changed, 102 insertions, 0 deletions
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 <errno.h> +#include <error.h> +#include <fcntl.h> +#include <hurd.h> +#include <mach.h> +#include <stdio.h> + +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; +} |