diff options
Diffstat (limited to 'debian/patches/tn-0001-kern-provide-notifications-about-new-tasks.patch')
-rw-r--r-- | debian/patches/tn-0001-kern-provide-notifications-about-new-tasks.patch | 187 |
1 files changed, 0 insertions, 187 deletions
diff --git a/debian/patches/tn-0001-kern-provide-notifications-about-new-tasks.patch b/debian/patches/tn-0001-kern-provide-notifications-about-new-tasks.patch deleted file mode 100644 index dec19b7..0000000 --- a/debian/patches/tn-0001-kern-provide-notifications-about-new-tasks.patch +++ /dev/null @@ -1,187 +0,0 @@ -From 19c34e37ddc72850b097fbb46823d108dbb984bb Mon Sep 17 00:00:00 2001 -From: Justus Winter <4winter@informatik.uni-hamburg.de> -Date: Tue, 4 Nov 2014 18:46:42 +0100 -Subject: [PATCH gnumach 1/2] kern: provide notifications about new tasks - -These notifications are sent to the port registered via -`register_new_task_notification' and provide a robust parental -relation between tasks to a userspace server. - -* Makefrag.am: Add task_notify.defs. -* include/mach/gnumach.defs: Add register_new_task_notification. -* include/mach/task_notify.defs: New file. -* kern/task.c (new_task_notification): New variable. -(task_create): Send new task notifications. -(register_new_task_notification): Add server function. -* kern/task_notify.cli: New file. ---- - Makefrag.am | 8 ++++++++ - include/mach/gnumach.defs | 8 ++++++++ - include/mach/task_notify.defs | 36 ++++++++++++++++++++++++++++++++++++ - kern/task.c | 33 +++++++++++++++++++++++++++++++++ - kern/task_notify.cli | 7 +++++++ - 5 files changed, 92 insertions(+) - create mode 100644 include/mach/task_notify.defs - create mode 100644 kern/task_notify.cli - -diff --git a/Makefrag.am b/Makefrag.am -index 5e98b21..410f56d 100644 ---- a/Makefrag.am -+++ b/Makefrag.am -@@ -364,6 +364,7 @@ include_mach_HEADERS = \ - include/mach/mach.defs \ - include/mach/mach4.defs \ - include/mach/gnumach.defs \ -+ include/mach/task_notify.defs \ - include/mach/mach_host.defs \ - include/mach/mach_port.defs \ - include/mach/mach_types.defs \ -@@ -488,6 +489,13 @@ nodist_libkernel_a_SOURCES += \ - # device/device_reply.user.defs - # device/memory_object_reply.user.defs - -+nodist_lib_dep_tr_for_defs_a_SOURCES += \ -+ kern/task_notify.user.defs.c -+nodist_libkernel_a_SOURCES += \ -+ kern/task_notify.user.h \ -+ kern/task_notify.user.c \ -+ kern/task_notify.user.msgids -+ - # Server stubs. - nodist_lib_dep_tr_for_defs_a_SOURCES += \ - device/device.server.defs.c \ -diff --git a/include/mach/gnumach.defs b/include/mach/gnumach.defs -index 6cfbb0d..bac3b09 100644 ---- a/include/mach/gnumach.defs -+++ b/include/mach/gnumach.defs -@@ -72,3 +72,11 @@ simpleroutine thread_terminate_release( - simpleroutine task_set_name( - task : task_t; - name : kernel_debug_name_t); -+ -+/* -+ * Register a port to which a notification about newly created tasks -+ * are sent. -+ */ -+routine register_new_task_notification( -+ host_priv : host_priv_t; -+ notification : mach_port_send_t); -diff --git a/include/mach/task_notify.defs b/include/mach/task_notify.defs -new file mode 100644 -index 0000000..5485d4e ---- /dev/null -+++ b/include/mach/task_notify.defs -@@ -0,0 +1,36 @@ -+/* -+ * Copyright (C) 2014 Free Software Foundation -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program. If not, see <http://www.gnu.org/licenses/>. -+ */ -+ -+subsystem -+#if KERNEL_SERVER -+ KernelServer -+#endif /* KERNEL_SERVER */ -+#if KERNEL_USER -+ KernelUser -+#endif /* KERNEL_USER */ -+ task_notify 4400; -+ -+#include <mach/std_types.defs> -+#include <mach/mach_types.defs> -+ -+/* These notifications are sent to the port registered via -+ `register_new_task_notification' and provide a robust parental -+ relation between tasks. */ -+simpleroutine mach_notify_new_task( -+ notify : mach_port_t; -+ task : task_t; -+ parent : task_t); -diff --git a/kern/task.c b/kern/task.c -index 20acc6a..bcc2a4e 100644 ---- a/kern/task.c -+++ b/kern/task.c -@@ -50,12 +50,16 @@ - #include <kern/sched_prim.h> /* for thread_wakeup */ - #include <kern/ipc_tt.h> - #include <kern/syscall_emulation.h> -+#include <kern/task_notify.user.h> - #include <vm/vm_kern.h> /* for kernel_map, ipc_kernel_map */ - #include <machine/machspl.h> /* for splsched */ - - task_t kernel_task = TASK_NULL; - struct kmem_cache task_cache; - -+/* Where to send notifications about newly created tasks. */ -+ipc_port_t new_task_notification = NULL; -+ - void task_init(void) - { - kmem_cache_init(&task_cache, "task", sizeof(struct task), 0, -@@ -169,6 +173,14 @@ kern_return_t task_create( - - snprintf (new_task->name, sizeof new_task->name, "%p", new_task); - -+ if (new_task_notification != NULL) { -+ task_reference (new_task); -+ task_reference (parent_task); -+ mach_notify_new_task (new_task_notification, -+ convert_task_to_port (new_task), -+ convert_task_to_port (parent_task)); -+ } -+ - ipc_task_enable(new_task); - - *child_task = new_task; -@@ -1230,3 +1242,24 @@ task_ras_control( - #endif /* FAST_TAS */ - return ret; - } -+ -+/* -+ * register_new_task_notification -+ * -+ * Register a port to which a notification about newly created -+ * tasks are sent. -+ */ -+kern_return_t -+register_new_task_notification( -+ const host_t host, -+ ipc_port_t notification) -+{ -+ if (host == HOST_NULL) -+ return KERN_INVALID_HOST; -+ -+ if (new_task_notification != NULL) -+ return KERN_NO_ACCESS; -+ -+ new_task_notification = notification; -+ return KERN_SUCCESS; -+} -diff --git a/kern/task_notify.cli b/kern/task_notify.cli -new file mode 100644 -index 0000000..c6c85d9 ---- /dev/null -+++ b/kern/task_notify.cli -@@ -0,0 +1,7 @@ -+/* XXX */ -+ -+/* This is a client presentation file. */ -+ -+#define KERNEL_USER 1 -+ -+#include <mach/task_notify.defs> --- -2.1.1 - |