summaryrefslogtreecommitdiff
path: root/debian/patches/corefiles0001-trans-crash-fix-resource-leaks.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/corefiles0001-trans-crash-fix-resource-leaks.patch')
-rw-r--r--debian/patches/corefiles0001-trans-crash-fix-resource-leaks.patch52
1 files changed, 52 insertions, 0 deletions
diff --git a/debian/patches/corefiles0001-trans-crash-fix-resource-leaks.patch b/debian/patches/corefiles0001-trans-crash-fix-resource-leaks.patch
new file mode 100644
index 00000000..f9c9d1ee
--- /dev/null
+++ b/debian/patches/corefiles0001-trans-crash-fix-resource-leaks.patch
@@ -0,0 +1,52 @@
+From 105d7bc17ff8ec01c27f3e9c3dca1468bde79b8d Mon Sep 17 00:00:00 2001
+From: Justus Winter <justus@gnupg.org>
+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 | 14 ++++++++------
+ 1 file changed, 8 insertions(+), 6 deletions(-)
+
+diff --git a/trans/crash.c b/trans/crash.c
+index 5db9974..a541af7 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,17 @@ 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 && MACH_PORT_VALID (task))
++ mach_port_deallocate (mach_task_self (), task);
++ if (! err && MACH_PORT_VALID (core_file))
++ mach_port_deallocate (mach_task_self (), core_file);
++ if (! err && MACH_PORT_VALID (ctty_id))
++ mach_port_deallocate (mach_task_self (), ctty_id);
+
+ ports_port_deref (cred);
+ return err;
+--
+2.1.4
+