summaryrefslogtreecommitdiff
path: root/ipc/ipc_object.c
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2013-11-21 16:50:49 +0100
committerJustus Winter <4winter@informatik.uni-hamburg.de>2014-10-01 09:03:51 +0200
commitd565bf2f784ce1203e77306d05eade03933bc523 (patch)
tree1c30bed601834acd886b9dc4abcecb706349d8b6 /ipc/ipc_object.c
parent3a0fae39873c9c7d73dc978888e45b87ad27d44e (diff)
ipc: add protected payload
Add a field ip_protected_payload and a flag ip_has_protected_payload to struct ipc_port. 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 again. * ipc/ipc_port.h (struct ipc_port): Add field ip_protected_payload. (ipc_port_set_protected_payload): Add function declaration. (ipc_port_clear_protected_payload): Likewise. (ipc_port_flag_protected_payload): Add accessor for the protected payload flag. (ipc_port_flag_protected_payload_set): Likewise. (ipc_port_flag_protected_payload_clear): Likewise. * ipc/ipc_port.c (ipc_port_init): Initialize protected payload. (ipc_port_print): Print protected_payload. (ipc_port_set_protected_payload): New function. (ipc_port_clear_protected_payload): Likewise. (ipc_port_destroy): Clear the payload when moving a receive port. * ipc/ipc_right.c (ipc_right_copyin): Likewise. (ipc_right_copyout): Likewise. * ipc/ipc_object.c (ipc_object_copyin_from_kernel): Likewise. * ipc/ipc_object.h (IO_BITS_PROTECTED_PAYLOAD): New bitmask. (IO_BITS_OTYPE): Adjust accordingly.
Diffstat (limited to 'ipc/ipc_object.c')
-rw-r--r--ipc/ipc_object.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/ipc/ipc_object.c b/ipc/ipc_object.c
index 982bd4e1..db6ef018 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;
+ ipc_port_flag_protected_payload_clear(port);
ip_unlock(port);
break;
}