]> rtime.felk.cvut.cz Git - lincan.git/blobdiff - lincan/src/ioctl.c
Changes to prepare work area for C_CAN testing and rethinking
[lincan.git] / lincan / src / ioctl.c
index 63aaea10188e1495f1024a8787c60d916d82b38a..43535d08aa082daa25541a782587914eceeec8f5 100644 (file)
@@ -11,7 +11,6 @@
 #include "../include/can_sysdep.h"
 #include "../include/main.h"
 #include "../include/ioctl.h"
-#include "../include/i82527.h"
 
 int can_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
 {
@@ -78,7 +77,9 @@ int can_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned
                
                case CANQUE_FILTER: {
                        struct canfilt_t canfilt;
-                       copy_from_user(&canfilt, (void*)arg, sizeof(struct canfilt_t));
+                       int ret;
+                       ret = copy_from_user(&canfilt, (void*)arg, sizeof(struct canfilt_t));
+                       if(ret) return -EFAULT;
                        if(canuser->rx_edge0){
                                canque_set_filt(canuser->rx_edge0, canfilt.id, canfilt.mask, canfilt.flags);
                        }
@@ -89,10 +90,13 @@ int can_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned
                        int ret;
                        struct canmsg_t rtr_msg;
                        
-                       copy_from_user(&rtr_msg, (void*)arg, sizeof(struct canmsg_t));
+                       ret = copy_from_user(&rtr_msg, (void*)arg, sizeof(struct canmsg_t));
+                       if(ret) return -EFAULT;
                        ret = can_ioctl_remote_read(canuser, &rtr_msg, rtr_msg.id, 0);
                        if(ret<0) return ret;
-                       copy_to_user((void*)arg, &rtr_msg, sizeof(struct canmsg_t));
+                       ret = copy_to_user((void*)arg, &rtr_msg, sizeof(struct canmsg_t));
+                       if(ret) return -EFAULT;
+                       break;
                }
 
                case CONF_BAUD: {
@@ -109,7 +113,11 @@ int can_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned
                
                case CONF_BAUDPARAMS: {
                        struct can_baudparams_t params;
-                       copy_from_user(&params, (void*)arg, sizeof(struct can_baudparams_t));
+                       int ret;
+                       
+                       ret = copy_from_user(&params, (void*)arg, sizeof(struct can_baudparams_t));
+                       if(ret) return -EFAULT;
+
                        if(params.flags == -1) params.flags = 0;
                        if(params.baudrate == -1) params.baudrate = chip->baudrate;
                        if(params.sjw == -1) params.sjw = 0;