diff options
author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2014-02-24 18:24:44 +0100 |
---|---|---|
committer | Justus Winter <4winter@informatik.uni-hamburg.de> | 2014-02-24 18:24:44 +0100 |
commit | fa6b34e3548859531b3928ea301ccb6444a15422 (patch) | |
tree | 00831c3fda815e3d724c82c58e0933c25fa01dfc /debian/patches/protected_payload.patch | |
parent | 796ff2ca000fa6a6e37df45875ba109ff26a003d (diff) |
update protected_payload.patch
Diffstat (limited to 'debian/patches/protected_payload.patch')
-rw-r--r-- | debian/patches/protected_payload.patch | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/debian/patches/protected_payload.patch b/debian/patches/protected_payload.patch index 2a03e23..85e464e 100644 --- a/debian/patches/protected_payload.patch +++ b/debian/patches/protected_payload.patch @@ -450,6 +450,87 @@ index 41fe3de..dbeacff 100644 assert((bits & MACH_PORT_TYPE_RECEIVE) == 0); if (bits & MACH_PORT_TYPE_SEND) { +diff --git a/ipc/mach_msg.c b/ipc/mach_msg.c +index 78247a4..783b2b4 100644 +--- a/ipc/mach_msg.c ++++ b/ipc/mach_msg.c +@@ -1132,11 +1132,19 @@ mach_msg_trap(msg, option, send_size, rcv_size, rcv_name, time_out, notify) + } else + ip_unlock(dest_port); + +- kmsg->ikm_header.msgh_bits = +- MACH_MSGH_BITS(MACH_MSG_TYPE_PORT_SEND_ONCE, +- MACH_MSG_TYPE_PORT_SEND); ++ if (! ipc_port_flag_protected_payload(dest_port)) { ++ kmsg->ikm_header.msgh_bits = MACH_MSGH_BITS( ++ MACH_MSG_TYPE_PORT_SEND_ONCE, ++ MACH_MSG_TYPE_PORT_SEND); ++ kmsg->ikm_header.msgh_local_port = dest_name; ++ } else { ++ kmsg->ikm_header.msgh_bits = MACH_MSGH_BITS( ++ MACH_MSG_TYPE_PORT_SEND_ONCE, ++ MACH_MSG_TYPE_PROTECTED_PAYLOAD); ++ kmsg->ikm_header.msgh_protected_payload = ++ dest_port->ip_protected_payload; ++ } + kmsg->ikm_header.msgh_remote_port = reply_name; +- kmsg->ikm_header.msgh_local_port = dest_name; + goto fast_put; + + abort_request_copyout: +@@ -1170,11 +1178,19 @@ mach_msg_trap(msg, option, send_size, rcv_size, rcv_name, time_out, notify) + dest_name = MACH_PORT_NULL; + } + +- kmsg->ikm_header.msgh_bits = +- MACH_MSGH_BITS(0, +- MACH_MSG_TYPE_PORT_SEND_ONCE); ++ if (! ipc_port_flag_protected_payload(dest_port)) { ++ kmsg->ikm_header.msgh_bits = MACH_MSGH_BITS( ++ 0, ++ MACH_MSG_TYPE_PORT_SEND_ONCE); ++ kmsg->ikm_header.msgh_local_port = dest_name; ++ } else { ++ kmsg->ikm_header.msgh_bits = MACH_MSGH_BITS( ++ 0, ++ MACH_MSG_TYPE_PROTECTED_PAYLOAD); ++ kmsg->ikm_header.msgh_protected_payload = ++ dest_port->ip_protected_payload; ++ } + kmsg->ikm_header.msgh_remote_port = MACH_PORT_NULL; +- kmsg->ikm_header.msgh_local_port = dest_name; + goto fast_put; + } + +@@ -1204,12 +1220,23 @@ mach_msg_trap(msg, option, send_size, rcv_size, rcv_name, time_out, notify) + dest_name = MACH_PORT_NULL; + } + +- kmsg->ikm_header.msgh_bits = +- MACH_MSGH_BITS_COMPLEX | +- MACH_MSGH_BITS(0, +- MACH_MSG_TYPE_PORT_SEND_ONCE); ++ if (! ipc_port_flag_protected_payload(dest_port)) { ++ kmsg->ikm_header.msgh_bits = ++ MACH_MSGH_BITS_COMPLEX ++ | MACH_MSGH_BITS( ++ 0, ++ MACH_MSG_TYPE_PORT_SEND_ONCE); ++ kmsg->ikm_header.msgh_local_port = dest_name; ++ } else { ++ kmsg->ikm_header.msgh_bits = ++ MACH_MSGH_BITS_COMPLEX ++ | MACH_MSGH_BITS( ++ 0, ++ MACH_MSG_TYPE_PROTECTED_PAYLOAD); ++ kmsg->ikm_header.msgh_protected_payload = ++ dest_port->ip_protected_payload; ++ } + kmsg->ikm_header.msgh_remote_port = MACH_PORT_NULL; +- kmsg->ikm_header.msgh_local_port = dest_name; + + mr = ipc_kmsg_copyout_body( + (vm_offset_t) (&kmsg->ikm_header + 1), diff --git a/ipc/mach_port.c b/ipc/mach_port.c index 13572a1..057278b 100644 --- a/ipc/mach_port.c |