Hello,

I propose to add the following commonly used RTDM inline functions to
rtdm_driver.h:

   static inline int rtdm_safe_copy_from_user()
   static inline int rtdm_safe_copy_to_user()

The attached patch also fixes a bug in rtdm_strncpy_from_user(). I think
__xn_access_ok() returns a non-zero value if the access is safe. Has it
ever worked? I don't care about the real name.

Wolfgang.

+ diff -u xenomai/include/rtdm/rtdm_driver.h.ORIG xenomai/include/rtdm/rtdm_driver.h
--- xenomai/include/rtdm/rtdm_driver.h.ORIG	2006-04-23 09:40:39.000000000 +0200
+++ xenomai/include/rtdm/rtdm_driver.h	2006-05-19 10:38:20.654561392 +0200
@@ -1047,12 +1047,30 @@
     return __xn_copy_to_user(user_info, dst, src, size);
 }
 
+static inline int rtdm_safe_copy_from_user(rtdm_user_info_t *user_info,
+					   void *dst, const void __user *src,
+					   size_t size)
+{
+    if (unlikely(!__xn_access_ok(user_info, VERIFY_READ, src, 1)))
+        return -EFAULT;
+    return __xn_copy_from_user(user_info, dst, src, size);
+}
+
+static inline int rtdm_safe_copy_to_user(rtdm_user_info_t *user_info,
+					 void __user *dst, const void *src,
+					 size_t size)
+{
+    if (unlikely(!__xn_access_ok(user_info, VERIFY_WRITE, src, 1)))
+        return -EFAULT;
+    return __xn_copy_to_user(user_info, dst, src, size);
+}
+
 static inline int rtdm_strncpy_from_user(rtdm_user_info_t *user_info,
                                          char *dst,
                                          const char __user *src,
                                          size_t count)
 {
-    if (unlikely(__xn_access_ok(user_info, VERIFY_READ, src, 1)))
+    if (unlikely(!__xn_access_ok(user_info, VERIFY_READ, src, 1)))
         return -EFAULT;
     return __xn_strncpy_from_user(user_info, dst, src, count);
 }

_______________________________________________
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core

Reply via email to