[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 4/7] update writev syscall signature with rpc types
From: |
Luca Dariz |
Subject: |
[PATCH 4/7] update writev syscall signature with rpc types |
Date: |
Mon, 16 Jan 2023 11:58:54 +0100 |
* 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
- [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 <=
- [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