From 385f2ba64efbeb0dff3afba2439dca85d474b8c7 Mon Sep 17 00:00:00 2001 From: Bjarne von Horn Date: Wed, 31 Jan 2024 11:38:34 +0100 Subject: [PATCH] Use rtdm_safe_copy_{from,to}_user --- master/Kbuild.in | 4 +++- master/ioctl.c | 10 +++++++--- master/rtdm_details.h | 9 ++++++++- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/master/Kbuild.in b/master/Kbuild.in index f03519e3..75eff6ff 100644 --- a/master/Kbuild.in +++ b/master/Kbuild.in @@ -86,14 +86,16 @@ endif ifeq (@ENABLE_XENOMAI@, 1) CFLAGS_rtdm.o := @XENOMAI_RTDM_CFLAGS@ +CFLAGS_rtdm-ioctl.o := @XENOMAI_RTDM_CFLAGS@ endif ifeq (@ENABLE_RTAI@, 1) CFLAGS_rtdm.o := -I@RTAI_DIR@/include +CFLAGS_rtdm-ioctl.o := -I@RTAI_DIR@/include endif ec_master-objs += rtdm-ioctl.o -CFLAGS_rtdm-ioctl.o := -DEC_IOCTL_RTDM +CFLAGS_rtdm-ioctl.o += -DEC_IOCTL_RTDM endif # ENABLE_RTDM diff --git a/master/ioctl.c b/master/ioctl.c index 21c32083..367442d9 100644 --- a/master/ioctl.c +++ b/master/ioctl.c @@ -49,21 +49,25 @@ #endif #ifdef EC_IOCTL_RTDM +# include "rtdm_details.h" /* RTDM does not support locking yet, * therefore no send/receive callbacks are set too. */ # define ec_ioctl_lock(lock) do {} while(0) # define ec_ioctl_unlock(lock) do {} while(0) # define ec_ioctl_lock_interruptible(lock) (0) +# define ec_copy_to_user(to, from, n, ctx) \ + rtdm_safe_copy_to_user(ec_ioctl_to_rtdm(ctx), to, from, n) +# define ec_copy_from_user(to, from, n, ctx) \ + rtdm_safe_copy_from_user(ec_ioctl_to_rtdm(ctx), to, from, n) #else # define ec_ioctl_lock(lock) rt_mutex_lock(lock) # define ec_ioctl_unlock(lock) rt_mutex_unlock(lock) # define ec_ioctl_lock_interruptible(lock) \ rt_mutex_lock_interruptible(lock) +# define ec_copy_to_user(to, from, n, ctx) copy_to_user(to, from, n) +# define ec_copy_from_user(to, from, n, ctx) copy_from_user(to, from, n) #endif // EC_IOCTL_RTDM -#define ec_copy_to_user(to, from, n, ctx) copy_to_user(to, from, n) -#define ec_copy_from_user(to, from, n, ctx) copy_from_user(to, from, n) - /****************************************************************************/ /** Copies a string to an ioctl structure. diff --git a/master/rtdm_details.h b/master/rtdm_details.h index 8b8c0f3c..9bea0636 100644 --- a/master/rtdm_details.h +++ b/master/rtdm_details.h @@ -27,6 +27,7 @@ #define __EC_RTDM_DETAILS_H__ #include "../config.h" +#include "ioctl.h" #include @@ -41,7 +42,7 @@ #define EC_RTDM_USERFD_T rtdm_user_info_t -#endif +#endif // EC_RTDM_XENOMAI_V3 /****************************************************************************/ @@ -54,4 +55,10 @@ typedef struct ec_rtdm_context { /****************************************************************************/ +static inline EC_RTDM_USERFD_T *ec_ioctl_to_rtdm(ec_ioctl_context_t *ctx) +{ + return container_of(ctx, ec_rtdm_context_t, ioctl_ctx)->user_fd; +} + + #endif // __EC_RTDM_DETAILS_H__