bug-hurd
[Top][All Lists]
Advanced

[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.



reply via email to

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