bug-hurd
[Top][All Lists]
Advanced

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

Re: [PATCH] Use rpc_uintptr_t for protected payloads.


From: Samuel Thibault
Subject: Re: [PATCH] Use rpc_uintptr_t for protected payloads.
Date: Fri, 13 Jan 2023 00:58:54 +0100
User-agent: NeoMutt/20170609 (1.8.3)

Applied, thanks!

Flavio Cruz, le mer. 11 janv. 2023 23:22:53 -0500, a ecrit:
> Not only is uintptr_t more accurate for what protected payloads are but
> we also provide compatibility for 64 + 32 bits. Also the use of
> natural_t in the RPC definition is wrong since it is always 32 bits.
> ---
>  i386/include/mach/i386/vm_types.h | 2 ++
>  include/mach/mach_port.defs       | 2 +-
>  include/mach/mach_types.defs      | 2 ++
>  include/mach/message.h            | 2 +-
>  ipc/ipc_kmsg.c                    | 8 ++++----
>  ipc/ipc_port.c                    | 2 +-
>  ipc/ipc_port.h                    | 4 ++--
>  ipc/mach_msg.c                    | 6 +++---
>  ipc/mach_port.c                   | 2 +-
>  ipc/mach_port.h                   | 2 +-
>  10 files changed, 18 insertions(+), 14 deletions(-)
> 
> diff --git a/i386/include/mach/i386/vm_types.h 
> b/i386/include/mach/i386/vm_types.h
> index 4522f48b..670ad4c2 100644
> --- a/i386/include/mach/i386/vm_types.h
> +++ b/i386/include/mach/i386/vm_types.h
> @@ -110,6 +110,7 @@ typedef   vm_size_t *     vm_size_array_t;
>   * functions.
>   */
>  #if defined(MACH_KERNEL) && defined(USER32)
> +typedef uint32_t    rpc_uintptr_t;
>  typedef uint32_t     rpc_vm_address_t;
>  typedef uint32_t     rpc_vm_offset_t;
>  typedef uint32_t     rpc_vm_size_t;
> @@ -139,6 +140,7 @@ static inline int32_t 
> convert_long_integer_to_user(int64_t i)
>  typedef uint32_t rpc_long_natural_t;
>  typedef int32_t rpc_long_integer_t;
>  #else /* MACH_KERNEL */
> +typedef uintptr_t   rpc_uintptr_t;
>  typedef vm_offset_t  rpc_vm_address_t;
>  typedef vm_offset_t  rpc_vm_offset_t;
>  typedef vm_size_t    rpc_vm_size_t;
> diff --git a/include/mach/mach_port.defs b/include/mach/mach_port.defs
> index 7cb8a659..3823bb14 100644
> --- a/include/mach/mach_port.defs
> +++ b/include/mach/mach_port.defs
> @@ -348,7 +348,7 @@ skip; /* mach_port_create_act */
>  routine mach_port_set_protected_payload(
>               task            : ipc_space_t;
>               name            : mach_port_name_t;
> -             payload         : natural_t);
> +             payload         : rpc_uintptr_t);
>  
>  /*
>   *   Only valid for receive rights.
> diff --git a/include/mach/mach_types.defs b/include/mach/mach_types.defs
> index 5e5d0f2f..a98e5c67 100644
> --- a/include/mach/mach_types.defs
> +++ b/include/mach/mach_types.defs
> @@ -121,8 +121,10 @@ type ipc_space_t = mach_port_t
>               ;
>  
>  #if defined(KERNEL) && defined(USER32)
> +type rpc_uintptr_t = uint32_t;
>  type rpc_vm_size_t = uint32_t;
>  #else /* KERNEL and USER32 */
> +type rpc_uintptr_t = uintptr_t;
>  type rpc_vm_size_t = uintptr_t;
>  #endif /* KERNEL_SERVER and USER32 */
>  
> diff --git a/include/mach/message.h b/include/mach/message.h
> index e6d26f58..af7988ed 100644
> --- a/include/mach/message.h
> +++ b/include/mach/message.h
> @@ -138,7 +138,7 @@ typedef   struct mach_msg_header {
>      mach_port_t              msgh_remote_port;
>      union {
>          mach_port_t  msgh_local_port;
> -        unsigned long        msgh_protected_payload;
> +        rpc_uintptr_t msgh_protected_payload;
>      };
>      mach_port_seqno_t        msgh_seqno;
>      mach_msg_id_t    msgh_id;
> diff --git a/ipc/ipc_kmsg.c b/ipc/ipc_kmsg.c
> index 73041703..62e138c7 100644
> --- a/ipc/ipc_kmsg.c
> +++ b/ipc/ipc_kmsg.c
> @@ -1727,7 +1727,7 @@ ipc_kmsg_copyout_header(
>           case MACH_MSGH_BITS(MACH_MSG_TYPE_PORT_SEND, 0): {
>               mach_port_name_t dest_name;
>               ipc_port_t nsrequest;
> -             unsigned long payload;
> +             rpc_uintptr_t payload;
>  
>               /* receiving an asynchronous message */
>  
> @@ -1780,7 +1780,7 @@ ipc_kmsg_copyout_header(
>               ipc_port_t reply = (ipc_port_t) msg->msgh_local_port;
>               mach_port_name_t dest_name, reply_name;
>               ipc_port_t nsrequest;
> -             unsigned long payload;
> +             rpc_uintptr_t payload;
>  
>               /* receiving a request message */
>  
> @@ -1882,7 +1882,7 @@ ipc_kmsg_copyout_header(
>  
>           case MACH_MSGH_BITS(MACH_MSG_TYPE_PORT_SEND_ONCE, 0): {
>               mach_port_name_t dest_name;
> -             unsigned long payload;
> +             rpc_uintptr_t payload;
>  
>               /* receiving a reply message */
>  
> @@ -1936,7 +1936,7 @@ ipc_kmsg_copyout_header(
>       mach_msg_type_name_t reply_type = MACH_MSGH_BITS_LOCAL(mbits);
>       ipc_port_t reply = (ipc_port_t) msg->msgh_local_port;
>       mach_port_name_t dest_name, reply_name;
> -     unsigned long payload;
> +     rpc_uintptr_t payload;
>  
>       if (IP_VALID(reply)) {
>               ipc_port_t notify_port;
> diff --git a/ipc/ipc_port.c b/ipc/ipc_port.c
> index a0006cf4..c593e8b3 100644
> --- a/ipc/ipc_port.c
> +++ b/ipc/ipc_port.c
> @@ -431,7 +431,7 @@ ipc_port_set_seqno(
>   */
>  
>  void
> -ipc_port_set_protected_payload(ipc_port_t port, unsigned long payload)
> +ipc_port_set_protected_payload(ipc_port_t port, rpc_uintptr_t payload)
>  {
>       ipc_mqueue_t mqueue;
>  
> diff --git a/ipc/ipc_port.h b/ipc/ipc_port.h
> index b0433876..022921f7 100644
> --- a/ipc/ipc_port.h
> +++ b/ipc/ipc_port.h
> @@ -97,7 +97,7 @@ struct ipc_port {
>       mach_port_msgcount_t ip_msgcount;
>       mach_port_msgcount_t ip_qlimit;
>       struct ipc_thread_queue ip_blocked;
> -     unsigned long ip_protected_payload;
> +     rpc_uintptr_t ip_protected_payload;
>  };
>  
>  #define ip_object            ip_target.ipt_object
> @@ -264,7 +264,7 @@ extern void
>  ipc_port_set_seqno(ipc_port_t, mach_port_seqno_t);
>  
>  extern void
> -ipc_port_set_protected_payload(ipc_port_t, unsigned long);
> +ipc_port_set_protected_payload(ipc_port_t, rpc_uintptr_t);
>  
>  extern void
>  ipc_port_clear_protected_payload(ipc_port_t);
> diff --git a/ipc/mach_msg.c b/ipc/mach_msg.c
> index 420e2a26..f15164a3 100644
> --- a/ipc/mach_msg.c
> +++ b/ipc/mach_msg.c
> @@ -951,7 +951,7 @@ mach_msg_trap(
>                       ipc_port_t reply_port =
>                               (ipc_port_t) kmsg->ikm_header.msgh_local_port;
>                       mach_port_name_t dest_name, reply_name;
> -                     unsigned long payload;
> +                     rpc_uintptr_t payload;
>  
>                       /* receiving a request message */
>  
> @@ -1056,7 +1056,7 @@ mach_msg_trap(
>  
>                   case MACH_MSGH_BITS(MACH_MSG_TYPE_PORT_SEND_ONCE, 0): {
>                       mach_port_name_t dest_name;
> -                     unsigned long payload;
> +                     rpc_uintptr_t payload;
>  
>                       /* receiving a reply message */
>  
> @@ -1101,7 +1101,7 @@ mach_msg_trap(
>                   case MACH_MSGH_BITS_COMPLEX|
>                        MACH_MSGH_BITS(MACH_MSG_TYPE_PORT_SEND_ONCE, 0): {
>                       mach_port_name_t dest_name;
> -                     unsigned long payload;
> +                     rpc_uintptr_t payload;
>  
>                       /* receiving a complex reply message */
>  
> diff --git a/ipc/mach_port.c b/ipc/mach_port.c
> index 1c9cdc97..6edf9f88 100644
> --- a/ipc/mach_port.c
> +++ b/ipc/mach_port.c
> @@ -1511,7 +1511,7 @@ kern_return_t
>  mach_port_set_protected_payload(
>       ipc_space_t             space,
>       mach_port_name_t        name,
> -     unsigned long           payload)
> +     rpc_uintptr_t           payload)
>  {
>       ipc_port_t port;
>       kern_return_t kr;
> diff --git a/ipc/mach_port.h b/ipc/mach_port.h
> index c93c48df..70b6cc7f 100644
> --- a/ipc/mach_port.h
> +++ b/ipc/mach_port.h
> @@ -157,7 +157,7 @@ kern_return_t
>  mach_port_set_protected_payload(
>       ipc_space_t             space,
>       mach_port_name_t        name,
> -     unsigned long           payload);
> +     rpc_uintptr_t payload);
>  
>  kern_return_t
>  mach_port_clear_protected_payload(
> -- 
> 2.39.0
> 
> 

-- 
Samuel
---
Pour une évaluation indépendante, transparente et rigoureuse !
Je soutiens la Commission d'Évaluation de l'Inria.



reply via email to

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