bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 09/11] ipc: provide the protected payload in ipc_kmsg_copyout_hea


From: Justus Winter
Subject: [PATCH 09/11] ipc: provide the protected payload in ipc_kmsg_copyout_header
Date: Mon, 17 Feb 2014 18:20:59 +0100

* ipc/ipc_kmsg.c (ipc_kmsg_copyout_header): If a protected payload is
  set for the destination port, provide it in msgh_protected_payload.
---
 ipc/ipc_kmsg.c | 58 +++++++++++++++++++++++++++++++++++++++++++++-------------
 1 file changed, 45 insertions(+), 13 deletions(-)

diff --git a/ipc/ipc_kmsg.c b/ipc/ipc_kmsg.c
index 0e43410..aa51100 100644
--- a/ipc/ipc_kmsg.c
+++ b/ipc/ipc_kmsg.c
@@ -1802,9 +1802,17 @@ ipc_kmsg_copyout_header(msg, space, notify)
                } else
                        ip_unlock(dest);
 
-               msg->msgh_bits = (MACH_MSGH_BITS_OTHER(mbits) |
-                                 MACH_MSGH_BITS(0, MACH_MSG_TYPE_PORT_SEND));
-               msg->msgh_local_port = dest_name;
+               if (dest->ip_protected_payload == 0) {
+                       msg->msgh_bits = (MACH_MSGH_BITS_OTHER(mbits) |
+                               MACH_MSGH_BITS(0, MACH_MSG_TYPE_PORT_SEND));
+                       msg->msgh_local_port = dest_name;
+               } else {
+                       msg->msgh_bits = (MACH_MSGH_BITS_OTHER(mbits) |
+                               MACH_MSGH_BITS(
+                                       0, MACH_MSG_TYPE_PROTECTED_PAYLOAD));
+                       msg->msgh_protected_payload = \
+                               dest->ip_protected_payload;
+               }
                msg->msgh_remote_port = MACH_PORT_NULL;
                return MACH_MSG_SUCCESS;
            }
@@ -1900,10 +1908,18 @@ ipc_kmsg_copyout_header(msg, space, notify)
                } else
                        ip_unlock(dest);
 
-               msg->msgh_bits = (MACH_MSGH_BITS_OTHER(mbits) |
-                                 MACH_MSGH_BITS(MACH_MSG_TYPE_PORT_SEND_ONCE,
-                                                MACH_MSG_TYPE_PORT_SEND));
-               msg->msgh_local_port = dest_name;
+               if (dest->ip_protected_payload == 0) {
+                       msg->msgh_bits = (MACH_MSGH_BITS_OTHER(mbits) |
+                               MACH_MSGH_BITS(MACH_MSG_TYPE_PORT_SEND_ONCE,
+                                              MACH_MSG_TYPE_PORT_SEND));
+                       msg->msgh_local_port = dest_name;
+               } else {
+                       msg->msgh_bits = (MACH_MSGH_BITS_OTHER(mbits) |
+                               MACH_MSGH_BITS(MACH_MSG_TYPE_PORT_SEND_ONCE,
+                                       MACH_MSG_TYPE_PROTECTED_PAYLOAD));
+                       msg->msgh_protected_payload = \
+                               dest->ip_protected_payload;
+               }
                msg->msgh_remote_port = reply_name;
                return MACH_MSG_SUCCESS;
            }
@@ -1935,9 +1951,18 @@ ipc_kmsg_copyout_header(msg, space, notify)
                        dest_name = MACH_PORT_NULL;
                }
 
-               msg->msgh_bits = (MACH_MSGH_BITS_OTHER(mbits) |
-                       MACH_MSGH_BITS(0, MACH_MSG_TYPE_PORT_SEND_ONCE));
-               msg->msgh_local_port = dest_name;
+               if (dest->ip_protected_payload == 0) {
+                       msg->msgh_bits = (MACH_MSGH_BITS_OTHER(mbits) |
+                               MACH_MSGH_BITS(0,
+                                       MACH_MSG_TYPE_PORT_SEND_ONCE));
+                       msg->msgh_local_port = dest_name;
+               } else {
+                       msg->msgh_bits = (MACH_MSGH_BITS_OTHER(mbits) |
+                               MACH_MSGH_BITS(0,
+                                       MACH_MSG_TYPE_PROTECTED_PAYLOAD));
+                       msg->msgh_protected_payload = \
+                               dest->ip_protected_payload;
+               }
                msg->msgh_remote_port = MACH_PORT_NULL;
                return MACH_MSG_SUCCESS;
            }
@@ -2227,9 +2252,16 @@ ipc_kmsg_copyout_header(msg, space, notify)
        if (IP_VALID(reply))
                ipc_port_release(reply);
 
-       msg->msgh_bits = (MACH_MSGH_BITS_OTHER(mbits) |
-                         MACH_MSGH_BITS(reply_type, dest_type));
-       msg->msgh_local_port = dest_name;
+       if (dest->ip_protected_payload == 0) {
+               msg->msgh_bits = (MACH_MSGH_BITS_OTHER(mbits) |
+                                 MACH_MSGH_BITS(reply_type, dest_type));
+               msg->msgh_local_port = dest_name;
+       } else {
+               msg->msgh_bits = (MACH_MSGH_BITS_OTHER(mbits) |
+                                 MACH_MSGH_BITS(reply_type,
+                                       MACH_MSG_TYPE_PROTECTED_PAYLOAD));
+               msg->msgh_protected_payload = dest->ip_protected_payload;
+       }
        msg->msgh_remote_port = reply_name;
     }
 
-- 
1.8.5.2




reply via email to

[Prev in Thread] Current Thread [Next in Thread]