From 16b91e459e52b985d32ff3f6280fafe59dc3aa80 Mon Sep 17 00:00:00 2001 From: Justus Winter Date: Fri, 3 Jun 2016 16:55:55 +0200 Subject: [PATCH hurd 1/2] trans/crash: fix resource leaks * trans/crash.c (S_crash_dump_task): Properly deallocate 'task', 'core_file', and 'ctty_id'. --- trans/crash.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/trans/crash.c b/trans/crash.c index 5db9974..e60ce7e 100644 --- a/trans/crash.c +++ b/trans/crash.c @@ -217,7 +217,9 @@ S_crash_dump_task (mach_port_t port, proc_mark_stop (user_proc, signo, sigcode); c->task = task; + task = MACH_PORT_NULL; c->core_file = core_file; + core_file = MACH_PORT_NULL; c->core_limit = (off_t) -1; /* XXX should core limit in RPC */ c->signo = signo; c->sigcode = sigcode; @@ -251,17 +253,20 @@ S_crash_dump_task (mach_port_t port, if (!err) err = proc_mark_exit (user_proc, W_EXITCODE (0, signo), sigcode); err = task_terminate (task); - if (!err) - { - mach_port_deallocate (mach_task_self (), task); - mach_port_deallocate (mach_task_self (), core_file); - mach_port_deallocate (mach_task_self (), ctty_id); - } } } if (user_proc != MACH_PORT_NULL) mach_port_deallocate (mach_task_self (), user_proc); + if (err == 0 || err = MIG_NO_REPLY) + { + if (MACH_PORT_VALID (task)) + mach_port_deallocate (mach_task_self (), task); + if (MACH_PORT_VALID (core_file)) + mach_port_deallocate (mach_task_self (), core_file); + if (MACH_PORT_VALID (ctty_id)) + mach_port_deallocate (mach_task_self (), ctty_id); + } ports_port_deref (cred); return err; -- 2.1.4