[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 10/11] ipc: clear the payload when moving a receive port
From: |
Justus Winter |
Subject: |
[PATCH 10/11] ipc: clear the payload when moving a receive port |
Date: |
Mon, 17 Feb 2014 18:21:00 +0100 |
Clear the protected payload when a receive port is moved from one ipc
space to another. This is done to retain the old behavior of
mach_msg, so that a port name is sent in the msgh_local_port field.
If the new owner of that receive right wishes to use the protected
payload mechanism, it has to be explicitly set with
mach_port_set_protected_payload.
* ipc/ipc_right.c (ipc_right_copyin): Clear the payload when moving a
receive port.
(ipc_right_copyout): Likewise.
* ipc/ipc_port.c (ipc_port_destroy): Likewise.
* ipc/ipc_object.c (ipc_object_copyin_from_kernel): Likewise.
---
ipc/ipc_object.c | 1 +
ipc/ipc_port.c | 1 +
ipc/ipc_right.c | 12 ++++++++++++
3 files changed, 14 insertions(+)
diff --git a/ipc/ipc_object.c b/ipc/ipc_object.c
index 982bd4e..59f5a67 100644
--- a/ipc/ipc_object.c
+++ b/ipc/ipc_object.c
@@ -481,6 +481,7 @@ ipc_object_copyin_from_kernel(
port->ip_receiver_name = MACH_PORT_NULL;
port->ip_destination = IP_NULL;
+ port->ip_protected_payload = 0;
ip_unlock(port);
break;
}
diff --git a/ipc/ipc_port.c b/ipc/ipc_port.c
index 4e6d598..4051746 100644
--- a/ipc/ipc_port.c
+++ b/ipc/ipc_port.c
@@ -635,6 +635,7 @@ ipc_port_destroy(
/* make port be in limbo */
port->ip_receiver_name = MACH_PORT_NULL;
port->ip_destination = IP_NULL;
+ port->ip_protected_payload = 0;
ip_unlock(port);
if (!ipc_port_check_circularity(port, pdrequest)) {
diff --git a/ipc/ipc_right.c b/ipc/ipc_right.c
index 41fe3de..1edbb47 100644
--- a/ipc/ipc_right.c
+++ b/ipc/ipc_right.c
@@ -1432,6 +1432,12 @@ ipc_right_copyin(
port->ip_receiver_name = MACH_PORT_NULL;
port->ip_destination = IP_NULL;
+
+ /*
+ * Clear the protected payload field to retain
+ * the behavior of mach_msg.
+ */
+ port->ip_protected_payload = 0;
ip_unlock(port);
*objectp = (ipc_object_t) port;
@@ -1932,6 +1938,12 @@ ipc_right_copyout(
port->ip_receiver_name = name;
port->ip_receiver = space;
+ /*
+ * Clear the protected payload field to retain
+ * the behavior of mach_msg.
+ */
+ port->ip_protected_payload = 0;
+
assert((bits & MACH_PORT_TYPE_RECEIVE) == 0);
if (bits & MACH_PORT_TYPE_SEND) {
--
1.8.5.2
- [PATCH 01/11] include: skip routines related to migrating threads, (continued)
- [PATCH 01/11] include: skip routines related to migrating threads, Justus Winter, 2014/02/17
- [PATCH 04/11] doc: document mach_port_set_protected_payload, Justus Winter, 2014/02/17
- [PATCH 02/11] ipc: add protected payload, Justus Winter, 2014/02/17
- [PATCH 03/11] ipc: implement mach_port_set_protected_payload, Justus Winter, 2014/02/17
- [PATCH 07/11] include: define MACH_MSG_TYPE_PROTECTED_PAYLOAD, Justus Winter, 2014/02/17
- [PATCH 08/11] doc: document MACH_MSG_TYPE_PROTECTED_PAYLOAD, Justus Winter, 2014/02/17
- [PATCH 06/11] doc: document msgh_protected_payload, Justus Winter, 2014/02/17
- [PATCH 10/11] ipc: clear the payload when moving a receive port,
Justus Winter <=
- [PATCH 05/11] include: add msgh_protected_payload to mach_msg_header_t, Justus Winter, 2014/02/17
- [PATCH 11/11] doc: document message semantics with protected payloads, Justus Winter, 2014/02/17
- [PATCH 09/11] ipc: provide the protected payload in ipc_kmsg_copyout_header, Justus Winter, 2014/02/17
- Re: protected payloads for GNU Mach, Samuel Thibault, 2014/02/19