summaryrefslogtreecommitdiff
path: root/debian/patches/0027-XXX-i-broke-rpctrace.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/0027-XXX-i-broke-rpctrace.patch')
-rw-r--r--debian/patches/0027-XXX-i-broke-rpctrace.patch45
1 files changed, 45 insertions, 0 deletions
diff --git a/debian/patches/0027-XXX-i-broke-rpctrace.patch b/debian/patches/0027-XXX-i-broke-rpctrace.patch
new file mode 100644
index 00000000..348d2075
--- /dev/null
+++ b/debian/patches/0027-XXX-i-broke-rpctrace.patch
@@ -0,0 +1,45 @@
+From d5931987def544622bec249de69d4c646fa705da Mon Sep 17 00:00:00 2001
+From: Justus Winter <4winter@informatik.uni-hamburg.de>
+Date: Thu, 28 Nov 2013 12:21:49 +0100
+Subject: [PATCH hurd 27/28] XXX i broke rpctrace
+
+If we cannot get this to work with protected payloads, we can always
+add a switch to libports to disable the optimization.
+---
+ utils/rpctrace.c | 20 +++++++++++++++++++-
+ 1 file changed, 19 insertions(+), 1 deletion(-)
+
+diff --git a/utils/rpctrace.c b/utils/rpctrace.c
+index b11fea4..2b11597 100644
+--- a/utils/rpctrace.c
++++ b/utils/rpctrace.c
+@@ -1219,7 +1219,25 @@ trace_and_forward (mach_msg_header_t *inp, mach_msg_header_t *outp)
+ /* Look up our record for the receiving port. There is no need to check
+ the class, because our port bucket only ever contains one class of
+ ports (traced_class). */
+- info = ports_lookup_port (traced_bucket, inp->msgh_local_port, 0);
++
++ if (MACH_MSGH_BITS_LOCAL (inp->msgh_bits) == MACH_MSG_TYPE_PROTECTED_PAYLOAD)
++ {
++ info = (struct traced_info *) inp->msgh_protected_payload;
++ if (info && info->pi.bucket == traced_bucket)
++ {
++ ports_port_ref (info);
++ /* Undo the protected payload optimization for our tracee. */
++ inp->msgh_bits = MACH_MSGH_BITS (
++ MACH_MSGH_BITS_REMOTE (inp->msgh_bits),
++ MACH_MSG_TYPE_PORT_SEND); /* XXX we cannot know the real type :( */
++ inp->msgh_local_port = ports_payload_get_name (info);
++ }
++ else
++ info = NULL;
++ }
++ else
++ info = ports_lookup_port (traced_bucket, inp->msgh_local_port, 0);
++
+ assert (info);
+
+ /* A notification message from the kernel appears to have been sent
+--
+2.1.3
+