Commit 81152d0a authored by Henrik Brix Andersen's avatar Henrik Brix Andersen Committed by Martí Bolívar
Browse files

drivers: can: handlers: verify timing parameter access



Verify read access to the timing and timing_data parameters in
z_vrfy_can_set_timing() and pass a copy of these structs to the
implementation as recommended for Zephyr system calls.

Remove unnecessary typecasts.

Signed-off-by: default avatarHenrik Brix Andersen <hebad@vestas.com>
parent c389594e
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -27,11 +27,18 @@ static inline int z_vrfy_can_set_timing(const struct device *dev,
					const struct can_timing *timing,
					const struct can_timing *timing_data)
{
	struct can_timing timing_copy;
	struct can_timing timing_data_copy;

	Z_OOPS(Z_SYSCALL_DRIVER_CAN(dev, set_timing));
	Z_OOPS(z_user_from_copy(&timing_copy, timing, sizeof(timing_copy)));

	if (timing_data != NULL) {
		Z_OOPS(z_user_from_copy(&timing_data_copy, timing_data, sizeof(timing_data_copy)));
		return z_impl_can_set_timing(dev, &timing_copy, &timing_data_copy);
	}

	return z_impl_can_set_timing((const struct device *)dev,
				     (const struct can_timing *)timing,
				     (const struct can_timing *)timing_data);
	return z_impl_can_set_timing(dev, &timing_copy, NULL);
}
#include <syscalls/can_set_timing_mrsh.c>