summaryrefslogtreecommitdiff
path: root/debian
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2014-11-12 16:34:22 +0100
committerJustus Winter <4winter@informatik.uni-hamburg.de>2014-11-12 16:34:22 +0100
commit48329b96fbca1f0398717b3b444fe40456b28287 (patch)
treed3fae3447d2c9b551e9deeb4a6296682b5e592f0 /debian
parent5f135815002e23e77f9735139193304d5cb5deb2 (diff)
add patch series
Diffstat (limited to 'debian')
-rw-r--r--debian/patches/0001-kern-provide-notifications-about-new-tasks.patch187
-rw-r--r--debian/patches/0002-include-add-X_IMPORTS-to-ipc-definitions.patch64
-rw-r--r--debian/patches/series2
3 files changed, 253 insertions, 0 deletions
diff --git a/debian/patches/0001-kern-provide-notifications-about-new-tasks.patch b/debian/patches/0001-kern-provide-notifications-about-new-tasks.patch
new file mode 100644
index 0000000..dec19b7
--- /dev/null
+++ b/debian/patches/0001-kern-provide-notifications-about-new-tasks.patch
@@ -0,0 +1,187 @@
+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
+
diff --git a/debian/patches/0002-include-add-X_IMPORTS-to-ipc-definitions.patch b/debian/patches/0002-include-add-X_IMPORTS-to-ipc-definitions.patch
new file mode 100644
index 0000000..e79ac54
--- /dev/null
+++ b/debian/patches/0002-include-add-X_IMPORTS-to-ipc-definitions.patch
@@ -0,0 +1,64 @@
+From 1f60234ceb8c3fa90333658528f24ae887ece6f8 Mon Sep 17 00:00:00 2001
+From: Justus Winter <4winter@informatik.uni-hamburg.de>
+Date: Thu, 6 Nov 2014 16:57:35 +0100
+Subject: [PATCH gnumach 2/2] include: add X_IMPORTS to ipc definitions
+
+This makes it possible to inject imports.
+
+* include/mach/gnumach.defs: Make it possible to inject imports.
+* include/mach/mach.defs: Likewise.
+* include/mach/mach_host.defs: Likewise.
+---
+ include/mach/gnumach.defs | 4 ++++
+ include/mach/mach.defs | 4 ++++
+ include/mach/mach_host.defs | 4 ++++
+ 3 files changed, 12 insertions(+)
+
+diff --git a/include/mach/gnumach.defs b/include/mach/gnumach.defs
+index bac3b09..dd4da87 100644
+--- a/include/mach/gnumach.defs
++++ b/include/mach/gnumach.defs
+@@ -29,6 +29,10 @@ subsystem
+ #include <mach/mach_types.defs>
+ #include <mach_debug/mach_debug_types.defs>
+
++#ifdef GNUMACH_IMPORTS
++GNUMACH_IMPORTS
++#endif
++
+ type vm_cache_statistics_data_t = struct[11] of integer_t;
+
+ /*
+diff --git a/include/mach/mach.defs b/include/mach/mach.defs
+index 5851080..3786f65 100644
+--- a/include/mach/mach.defs
++++ b/include/mach/mach.defs
+@@ -46,6 +46,10 @@ userprefix r_;
+ #include <mach/std_types.defs>
+ #include <mach/mach_types.defs>
+
++#ifdef MACH_IMPORTS
++MACH_IMPORTS
++#endif
++
+ skip; /* old port_allocate */
+ skip; /* old port_deallocate */
+ skip; /* old port_enable */
+diff --git a/include/mach/mach_host.defs b/include/mach/mach_host.defs
+index 2644146..6699a50 100644
+--- a/include/mach/mach_host.defs
++++ b/include/mach/mach_host.defs
+@@ -47,6 +47,10 @@ subsystem
+ #include <mach/std_types.defs>
+ #include <mach/mach_types.defs>
+
++#ifdef MACH_HOST_IMPORTS
++MACH_HOST_IMPORTS
++#endif
++
+ /*
+ * Get list of processors on this host.
+ */
+--
+2.1.1
+
diff --git a/debian/patches/series b/debian/patches/series
index 52021c2..1b8569a 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -6,3 +6,5 @@
Add-some-padding-to-make-objects-fit-a-single-cache-.patch
vm_cache_policy.patch
+0001-kern-provide-notifications-about-new-tasks.patch
+0002-include-add-X_IMPORTS-to-ipc-definitions.patch