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.