[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 1/7] add msg_user_header_t for user-side msg structure
From: |
Samuel Thibault |
Subject: |
Re: [PATCH 1/7] add msg_user_header_t for user-side msg structure |
Date: |
Wed, 18 Jan 2023 02:12:08 +0100 |
User-agent: |
NeoMutt/20170609 (1.8.3) |
Applied, thanks!
Luca Dariz, le lun. 16 janv. 2023 11:58:51 +0100, a ecrit:
> * include/mach/message.h: use mach_msg_user_header_t only in KERNEL,
> and define it as mach_msh_header_t for user space
> * ipc/ipc_kmsg.c: use mach_msg_user_header_t where appropriate
> * ipc/ipc_kmsg.h: Likewise
> * ipc/mach_msg.c: Likewise
> * ipc/mach_msg.h: Likewise
> * kern/thread.h: Likewise
> ---
> include/mach/message.h | 17 ++++++++++++++++-
> ipc/ipc_kmsg.c | 6 +++---
> ipc/ipc_kmsg.h | 4 ++--
> ipc/mach_msg.c | 10 +++++-----
> ipc/mach_msg.h | 4 ++--
> kern/thread.h | 2 +-
> 6 files changed, 29 insertions(+), 14 deletions(-)
>
> diff --git a/include/mach/message.h b/include/mach/message.h
> index 798b47b4..c3081e66 100644
> --- a/include/mach/message.h
> +++ b/include/mach/message.h
> @@ -132,6 +132,7 @@ typedef unsigned int mach_msg_size_t;
> typedef natural_t mach_msg_seqno_t;
> typedef integer_t mach_msg_id_t;
>
> +/* full header structure, may have different size in user/kernel spaces */
> typedef struct mach_msg_header {
> mach_msg_bits_t msgh_bits;
> mach_msg_size_t msgh_size;
> @@ -144,6 +145,20 @@ typedef struct mach_msg_header {
> mach_msg_id_t msgh_id;
> } mach_msg_header_t;
>
> +#ifdef KERNEL
> +/* user-side header format, needed in the kernel */
> +typedef struct {
> + mach_msg_bits_t msgh_bits;
> + mach_msg_size_t msgh_size;
> + mach_port_name_t msgh_remote_port;
> + mach_port_name_t msgh_local_port;
> + mach_port_seqno_t msgh_seqno;
> + mach_msg_id_t msgh_id;
> +} mach_msg_user_header_t;
> +#else
> +typedef mach_msg_header_t mach_msg_user_header_t;
> +#endif
> +
> /*
> * There is no fixed upper bound to the size of Mach messages.
> */
> @@ -389,7 +404,7 @@ typedef kern_return_t mach_msg_return_t;
>
> extern mach_msg_return_t
> mach_msg_trap
> - (mach_msg_header_t *msg,
> + (mach_msg_user_header_t *msg,
> mach_msg_option_t option,
> mach_msg_size_t send_size,
> mach_msg_size_t rcv_size,
> diff --git a/ipc/ipc_kmsg.c b/ipc/ipc_kmsg.c
> index 62e138c7..d00c67d4 100644
> --- a/ipc/ipc_kmsg.c
> +++ b/ipc/ipc_kmsg.c
> @@ -499,13 +499,13 @@ ipc_kmsg_free(ipc_kmsg_t kmsg)
>
> mach_msg_return_t
> ipc_kmsg_get(
> - mach_msg_header_t *msg,
> + mach_msg_user_header_t *msg,
> mach_msg_size_t size,
> ipc_kmsg_t *kmsgp)
> {
> ipc_kmsg_t kmsg;
>
> - if ((size < sizeof(mach_msg_header_t)) || (size & 3))
> + if ((size < sizeof(mach_msg_user_header_t)) || (size & 3))
> return MACH_SEND_MSG_TOO_SMALL;
>
> if (size <= IKM_SAVED_MSG_SIZE) {
> @@ -587,7 +587,7 @@ ipc_kmsg_get_from_kernel(
>
> mach_msg_return_t
> ipc_kmsg_put(
> - mach_msg_header_t *msg,
> + mach_msg_user_header_t *msg,
> ipc_kmsg_t kmsg,
> mach_msg_size_t size)
> {
> diff --git a/ipc/ipc_kmsg.h b/ipc/ipc_kmsg.h
> index ffda9b5e..16df31f5 100644
> --- a/ipc/ipc_kmsg.h
> +++ b/ipc/ipc_kmsg.h
> @@ -242,13 +242,13 @@ extern void
> ipc_kmsg_free(ipc_kmsg_t);
>
> extern mach_msg_return_t
> -ipc_kmsg_get(mach_msg_header_t *, mach_msg_size_t, ipc_kmsg_t *);
> +ipc_kmsg_get(mach_msg_user_header_t *, mach_msg_size_t, ipc_kmsg_t *);
>
> extern mach_msg_return_t
> ipc_kmsg_get_from_kernel(mach_msg_header_t *, mach_msg_size_t, ipc_kmsg_t *);
>
> extern mach_msg_return_t
> -ipc_kmsg_put(mach_msg_header_t *, ipc_kmsg_t, mach_msg_size_t);
> +ipc_kmsg_put(mach_msg_user_header_t *, ipc_kmsg_t, mach_msg_size_t);
>
> extern void
> ipc_kmsg_put_to_kernel(mach_msg_header_t *, ipc_kmsg_t, mach_msg_size_t);
> diff --git a/ipc/mach_msg.c b/ipc/mach_msg.c
> index f15164a3..221ea975 100644
> --- a/ipc/mach_msg.c
> +++ b/ipc/mach_msg.c
> @@ -89,7 +89,7 @@
>
> mach_msg_return_t
> mach_msg_send(
> - mach_msg_header_t *msg,
> + mach_msg_user_header_t *msg,
> mach_msg_option_t option,
> mach_msg_size_t send_size,
> mach_msg_timeout_t time_out,
> @@ -171,7 +171,7 @@ mach_msg_send(
>
> mach_msg_return_t
> mach_msg_receive(
> - mach_msg_header_t *msg,
> + mach_msg_user_header_t *msg,
> mach_msg_option_t option,
> mach_msg_size_t rcv_size,
> mach_port_name_t rcv_name,
> @@ -286,7 +286,7 @@ mach_msg_receive_continue(void)
> ipc_thread_t self = current_thread();
> ipc_space_t space = current_space();
> vm_map_t map = current_map();
> - mach_msg_header_t *msg = self->ith_msg;
> + mach_msg_user_header_t *msg = self->ith_msg;
> mach_msg_option_t option = self->ith_option;
> mach_msg_size_t rcv_size = self->ith_rcv_size;
> mach_msg_timeout_t time_out = self->ith_timeout;
> @@ -380,7 +380,7 @@ mach_msg_receive_continue(void)
>
> mach_msg_return_t
> mach_msg_trap(
> - mach_msg_header_t *msg,
> + mach_msg_user_header_t *msg,
> mach_msg_option_t option,
> mach_msg_size_t send_size,
> mach_msg_size_t rcv_size,
> @@ -1609,7 +1609,7 @@ mach_msg_continue(void)
> task_t task = thread->task;
> ipc_space_t space = task->itk_space;
> vm_map_t map = task->map;
> - mach_msg_header_t *msg = thread->ith_msg;
> + mach_msg_user_header_t *msg = thread->ith_msg;
> mach_msg_size_t rcv_size = thread->ith_rcv_size;
> ipc_object_t object = thread->ith_object;
> ipc_mqueue_t mqueue = thread->ith_mqueue;
> diff --git a/ipc/mach_msg.h b/ipc/mach_msg.h
> index ee093f8d..2951bcea 100644
> --- a/ipc/mach_msg.h
> +++ b/ipc/mach_msg.h
> @@ -40,11 +40,11 @@
> #include <mach/message.h>
>
> extern mach_msg_return_t
> -mach_msg_send(mach_msg_header_t *, mach_msg_option_t,
> +mach_msg_send(mach_msg_user_header_t *, mach_msg_option_t,
> mach_msg_size_t, mach_msg_timeout_t, mach_port_name_t);
>
> extern mach_msg_return_t
> -mach_msg_receive(mach_msg_header_t *, mach_msg_option_t,
> +mach_msg_receive(mach_msg_user_header_t *, mach_msg_option_t,
> mach_msg_size_t, mach_port_name_t,
> mach_msg_timeout_t, mach_port_name_t);
>
> diff --git a/kern/thread.h b/kern/thread.h
> index da8bd2ed..ebbbd11c 100644
> --- a/kern/thread.h
> +++ b/kern/thread.h
> @@ -178,7 +178,7 @@ struct thread {
> /* State saved when thread's stack is discarded */
> union {
> struct {
> - mach_msg_header_t *msg;
> + mach_msg_user_header_t *msg;
> mach_msg_option_t option;
> mach_msg_size_t rcv_size;
> mach_msg_timeout_t timeout;
> --
> 2.30.2
>
>
--
Samuel
---
Pour une évaluation indépendante, transparente et rigoureuse !
Je soutiens la Commission d'Évaluation de l'Inria.
- [PATCH 0/7] update rpc for x86_64, Luca Dariz, 2023/01/16
- [PATCH 1/7] add msg_user_header_t for user-side msg structure, Luca Dariz, 2023/01/16
- Re: [PATCH 1/7] add msg_user_header_t for user-side msg structure,
Samuel Thibault <=
- [PATCH 3/7] update syscall signature with rpc_vm_* and mach_port_name_t, Luca Dariz, 2023/01/16
- [PATCH 4/7] update writev syscall signature with rpc types, Luca Dariz, 2023/01/16
- [PATCH 7/7] replace mach_port_t with mach_port_name_t, Luca Dariz, 2023/01/16
- [PATCH 5/7] adjust rdxtree key to the correct size, Luca Dariz, 2023/01/16
- [PATCH 2/7] x86_64: expand and shrink messages in copy{in, out}msg routines, Luca Dariz, 2023/01/16