commit-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[hurd] 09/19: trans/crash: fix resource leaks


From: Samuel Thibault
Subject: [hurd] 09/19: trans/crash: fix resource leaks
Date: Wed, 10 Aug 2016 00:05:50 +0000

This is an automated email from the git hooks/post-receive script.

sthibault pushed a commit to branch upstream
in repository hurd.

commit a8b8ece4ff36fca27492f0a4e925e2f4453ee483
Author: Justus Winter <address@hidden>
Date:   Fri Jun 3 16:55:55 2016 +0200

    trans/crash: fix resource leaks
    
    Previously, 'task', 'core_file', and 'ctty_id' were not deallocated if
    crash was configured to write core files, and 'ctty_id' was leaked if
    the crashing task was suspended.  This lead to resources not being
    released in the kernel, the filesystem, and the terminal subsystem,
    and could very well be responsible for making the Debian/Hurd shutdown
    hang.
    
    * 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;

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-hurd/hurd.git



reply via email to

[Prev in Thread] Current Thread [Next in Thread]