From c1477f9b38c88cc57d01faf8269f567045f6ae3e Mon Sep 17 00:00:00 2001 From: Henrik Brix Andersen Date: Thu, 31 Mar 2022 20:40:19 +0200 Subject: [PATCH] drivers: can: handlers: do not verify void pointer Do not attempt to verify that the current thread has access to the void *user_data argument to z_vrfy_can_send(). The size of the data is not known and no driver code will try to dereference it (it may not even be a valid pointer). Remove unnecessary typecasts from z_vrfy_can_send(). Signed-off-by: Henrik Brix Andersen --- drivers/can/can_handlers.c | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/drivers/can/can_handlers.c b/drivers/can/can_handlers.c index f9b476e152a..37cb70f6393 100644 --- a/drivers/can/can_handlers.c +++ b/drivers/can/can_handlers.c @@ -115,20 +115,11 @@ static inline int z_vrfy_can_send(const struct device *dev, { Z_OOPS(Z_SYSCALL_DRIVER_CAN(dev, send)); - Z_OOPS(Z_SYSCALL_MEMORY_READ((const struct zcan_frame *)frame, - sizeof(struct zcan_frame))); - Z_OOPS(Z_SYSCALL_MEMORY_READ(((struct zcan_frame *)frame)->data, - sizeof((struct zcan_frame *)frame)->data)); - Z_OOPS(Z_SYSCALL_VERIFY_MSG(callback == 0, - "callbacks may not be set from user mode")); + Z_OOPS(Z_SYSCALL_MEMORY_READ(frame, sizeof(*frame))); + Z_OOPS(Z_SYSCALL_MEMORY_READ(frame->data, sizeof(frame->data))); + Z_OOPS(Z_SYSCALL_VERIFY_MSG(callback == NULL, "callbacks may not be set from user mode")); - Z_OOPS(Z_SYSCALL_MEMORY_READ((void *)user_data, sizeof(void *))); - - return z_impl_can_send((const struct device *)dev, - (const struct zcan_frame *)frame, - (k_timeout_t)timeout, - (can_tx_callback_t) callback, - (void *)user_data); + return z_impl_can_send(dev, frame, timeout, callback, user_data); } #include