[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 4/7] update writev syscall signature with rpc types
From: |
Samuel Thibault |
Subject: |
Re: [PATCH 4/7] update writev syscall signature with rpc types |
Date: |
Wed, 18 Jan 2023 02:26:04 +0100 |
User-agent: |
NeoMutt/20170609 (1.8.3) |
Applied, thanks!
Luca Dariz, le lun. 16 janv. 2023 11:58:54 +0100, a ecrit:
> * device/device_emul.h: write/writev: update trap argument types
> * device/ds_routines.c: update argument types and adjust copyin
> * device/ds_routines.h: write/writev: update trap argument type
> * include/device/device_types.h: add rpc_io_buf_vec_t type
> * kern/ipc_mig.c: write/writev: update trap argument type
> * kern/ipc_mig.h: Likewise
> ---
> device/device_emul.h | 4 ++--
> device/ds_routines.c | 22 +++++++++++++---------
> device/ds_routines.h | 12 ++++++------
> include/device/device_types.h | 4 ++++
> kern/ipc_mig.c | 6 +++---
> kern/ipc_mig.h | 6 +++---
> 6 files changed, 31 insertions(+), 23 deletions(-)
>
> diff --git a/device/device_emul.h b/device/device_emul.h
> index 957bd505..683fc802 100644
> --- a/device/device_emul.h
> +++ b/device/device_emul.h
> @@ -56,9 +56,9 @@ struct device_emulation_ops
> vm_size_t, ipc_port_t *, boolean_t);
> void (*no_senders) (mach_no_senders_notification_t *);
> io_return_t (*write_trap) (void *, dev_mode_t,
> - recnum_t, vm_offset_t, vm_size_t);
> + rpc_recnum_t, rpc_vm_offset_t, rpc_vm_size_t);
> io_return_t (*writev_trap) (void *, dev_mode_t,
> - recnum_t, io_buf_vec_t *, vm_size_t);
> + rpc_recnum_t, rpc_io_buf_vec_t *, rpc_vm_size_t);
> };
>
> #endif /* _I386AT_DEVICE_EMUL_H_ */
> diff --git a/device/ds_routines.c b/device/ds_routines.c
> index 11589d63..07cfd85b 100644
> --- a/device/ds_routines.c
> +++ b/device/ds_routines.c
> @@ -412,7 +412,7 @@ ds_notify (mach_msg_header_t *msg)
>
> io_return_t
> ds_device_write_trap (device_t dev, dev_mode_t mode,
> - recnum_t recnum, vm_offset_t data, vm_size_t count)
> + rpc_recnum_t recnum, rpc_vm_offset_t data, rpc_vm_size_t
> count)
> {
> /* Refuse if device is dead or not completely open. */
> if (dev == DEVICE_NULL)
> @@ -427,7 +427,7 @@ ds_device_write_trap (device_t dev, dev_mode_t mode,
>
> io_return_t
> ds_device_writev_trap (device_t dev, dev_mode_t mode,
> - recnum_t recnum, io_buf_vec_t *iovec, vm_size_t count)
> + rpc_recnum_t recnum, rpc_io_buf_vec_t *iovec,
> rpc_vm_size_t count)
> {
> /* Refuse if device is dead or not completely open. */
> if (dev == DEVICE_NULL)
> @@ -1713,7 +1713,7 @@ ds_trap_write_done(const io_req_t ior)
> */
> static io_return_t
> device_write_trap (mach_device_t device, dev_mode_t mode,
> - recnum_t recnum, vm_offset_t data, vm_size_t data_count)
> + rpc_recnum_t recnum, rpc_vm_offset_t data, rpc_vm_size_t
> data_count)
> {
> io_req_t ior;
> io_return_t result;
> @@ -1752,7 +1752,7 @@ device_write_trap (mach_device_t device, dev_mode_t
> mode,
> * Copy the data from user space.
> */
> if (data_count > 0)
> - copyin((void *)data, ior->io_data, data_count);
> + copyin((void*)(vm_offset_t)data, ior->io_data, data_count);
>
> /*
> * The ior keeps an extra reference for the device.
> @@ -1781,7 +1781,7 @@ device_write_trap (mach_device_t device, dev_mode_t
> mode,
>
> static io_return_t
> device_writev_trap (mach_device_t device, dev_mode_t mode,
> - recnum_t recnum, io_buf_vec_t *iovec, vm_size_t iocount)
> + rpc_recnum_t recnum, rpc_io_buf_vec_t *iovec, rpc_vm_size_t
> iocount)
> {
> io_req_t ior;
> io_return_t result;
> @@ -1799,11 +1799,15 @@ device_writev_trap (mach_device_t device, dev_mode_t
> mode,
> */
> if (iocount > 16)
> return KERN_INVALID_VALUE; /* lame */
> - copyin(iovec,
> - stack_iovec,
> - iocount * sizeof(io_buf_vec_t));
> - for (data_count = 0, i = 0; i < iocount; i++)
> +
> + for (data_count = 0, i=0; i<iocount; i++) {
> + rpc_io_buf_vec_t riov;
> + if (copyin(iovec + i, &riov, sizeof(riov)))
> + return KERN_INVALID_ARGUMENT;
> + stack_iovec[i].data = riov.data;
> + stack_iovec[i].count = riov.count;
> data_count += stack_iovec[i].count;
> + }
>
> /*
> * Get a buffer to hold the ioreq.
> diff --git a/device/ds_routines.h b/device/ds_routines.h
> index c0543cbc..48d85dd0 100644
> --- a/device/ds_routines.h
> +++ b/device/ds_routines.h
> @@ -72,15 +72,15 @@ extern void io_done_thread(void) __attribute__
> ((noreturn));
> io_return_t ds_device_write_trap(
> device_t dev,
> dev_mode_t mode,
> - recnum_t recnum,
> - vm_offset_t data,
> - vm_size_t count);
> + rpc_recnum_t recnum,
> + rpc_vm_offset_t data,
> + rpc_vm_size_t count);
>
> io_return_t ds_device_writev_trap(
> device_t dev,
> dev_mode_t mode,
> - recnum_t recnum,
> - io_buf_vec_t *iovec,
> - vm_size_t count);
> + rpc_recnum_t recnum,
> + rpc_io_buf_vec_t *iovec,
> + rpc_vm_size_t count);
>
> #endif /* DS_ROUTINES_H */
> diff --git a/include/device/device_types.h b/include/device/device_types.h
> index 7c533723..583d9e03 100644
> --- a/include/device/device_types.h
> +++ b/include/device/device_types.h
> @@ -85,6 +85,10 @@ typedef struct {
> vm_offset_t data;
> vm_size_t count;
> } io_buf_vec_t;
> +typedef struct {
> + rpc_vm_offset_t data;
> + rpc_vm_size_t count;
> +} rpc_io_buf_vec_t;
>
> /*
> * Record number for random-access devices
> diff --git a/kern/ipc_mig.c b/kern/ipc_mig.c
> index afda1016..aa433614 100644
> --- a/kern/ipc_mig.c
> +++ b/kern/ipc_mig.c
> @@ -875,7 +875,7 @@ io_return_t
> syscall_device_write_request(mach_port_name_t device_name,
> mach_port_name_t reply_name,
> dev_mode_t mode,
> - recnum_t recnum,
> + rpc_recnum_t recnum,
> rpc_vm_offset_t data,
> rpc_vm_size_t data_count)
> {
> @@ -926,8 +926,8 @@ io_return_t
> syscall_device_writev_request(mach_port_name_t device_name,
> mach_port_name_t reply_name,
> dev_mode_t mode,
> - recnum_t recnum,
> - io_buf_vec_t *iovec,
> + rpc_recnum_t recnum,
> + rpc_io_buf_vec_t *iovec,
> rpc_vm_size_t iocount)
> {
> device_t dev;
> diff --git a/kern/ipc_mig.h b/kern/ipc_mig.h
> index c96a00da..cd298efe 100644
> --- a/kern/ipc_mig.h
> +++ b/kern/ipc_mig.h
> @@ -127,7 +127,7 @@ extern io_return_t syscall_device_write_request(
> mach_port_name_t device_name,
> mach_port_name_t reply_name,
> dev_mode_t mode,
> - recnum_t recnum,
> + rpc_recnum_t recnum,
> rpc_vm_offset_t data,
> rpc_vm_size_t data_count);
>
> @@ -135,8 +135,8 @@ io_return_t syscall_device_writev_request(
> mach_port_name_t device_name,
> mach_port_name_t reply_name,
> dev_mode_t mode,
> - recnum_t recnum,
> - io_buf_vec_t *iovec,
> + rpc_recnum_t recnum,
> + rpc_io_buf_vec_t *iovec,
> rpc_vm_size_t iocount);
>
> mach_port_name_t mig_get_reply_port(void);
> --
> 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
- [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
- Re: [PATCH 4/7] update writev syscall signature with rpc types,
Samuel Thibault <=
- [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
- [PATCH 6/7] add conversion helpers for invalid mach port names, Luca Dariz, 2023/01/16