bug-hurd
[Top][All Lists]
Advanced

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

Re: [PATCH 10/11] ipc: clear the payload when moving a receive port


From: Samuel Thibault
Subject: Re: [PATCH 10/11] ipc: clear the payload when moving a receive port
Date: Tue, 18 Feb 2014 21:47:20 -0800
User-agent: Mutt/1.5.21+34 (58baf7c9f32f) (2010-12-30)

Justus Winter, le Mon 17 Feb 2014 18:21:00 +0100, a écrit :
> 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.

Shouldn't this be commited along the definition of the
set_protected_payload RPC?

> * 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
> 

-- 
Samuel
 jr> J'ai fait.
 Ne bougez pas, l'aide soignante va venir nettoyer.
 -+- FF in GNU - Le vieil homme et la merde -+-



reply via email to

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