]> rtime.felk.cvut.cz Git - lincan.git/blobdiff - lincan/src/write.c
Added checking of values returned by copy_to/from_user
[lincan.git] / lincan / src / write.c
index dccade1edbfc1a0e5eb88ebadb8d668752669d0d..4b65a1462f04d5f57e5218eb96566a246a09227c 100644 (file)
@@ -20,7 +20,7 @@ ssize_t can_write(struct file *file, const char *buffer, size_t length, loff_t *
        struct canque_ends_t *qends;
        struct canque_edge_t *qedge;
        struct canque_slot_t *slot;
        struct canque_ends_t *qends;
        struct canque_edge_t *qedge;
        struct canque_slot_t *slot;
-       int ret = 0;
+       int ret;
        unsigned bytes_to_copy;
 
        if(!canuser || (canuser->magic != CAN_USER_MAGIC)){
        unsigned bytes_to_copy;
 
        if(!canuser || (canuser->magic != CAN_USER_MAGIC)){
@@ -53,7 +53,8 @@ ssize_t can_write(struct file *file, const char *buffer, size_t length, loff_t *
 
 
        /* Prepare first message */
 
 
        /* Prepare first message */
-       copy_from_user(&msg_buff, buffer, sizeof(struct canmsg_t));
+       ret = copy_from_user(&msg_buff, buffer, sizeof(struct canmsg_t));
+       if(ret) return -EFAULT;
 
        /* Automatic selection of extended format if ID>2047 */
        if (msg_buff.id & ~0x7ffl & MSG_ID_MASK ) msg_buff.flags |= MSG_EXT;
 
        /* Automatic selection of extended format if ID>2047 */
        if (msg_buff.id & ~0x7ffl & MSG_ID_MASK ) msg_buff.flags |= MSG_EXT;
@@ -91,7 +92,8 @@ ssize_t can_write(struct file *file, const char *buffer, size_t length, loff_t *
        while (bytes_to_copy >= sizeof(struct canmsg_t)) {
                bytes_to_copy -= sizeof(struct canmsg_t);
                /* Prepare first message */
        while (bytes_to_copy >= sizeof(struct canmsg_t)) {
                bytes_to_copy -= sizeof(struct canmsg_t);
                /* Prepare first message */
-               copy_from_user(&msg_buff, buffer, sizeof(struct canmsg_t));
+               ret = copy_from_user(&msg_buff, buffer, sizeof(struct canmsg_t));
+               if(ret) return -EFAULT;
 
                /* Automatic selection of extended format if ID>2047 */
                if (msg_buff.id & ~0x7ffl & MSG_ID_MASK ) msg_buff.flags |= MSG_EXT;
 
                /* Automatic selection of extended format if ID>2047 */
                if (msg_buff.id & ~0x7ffl & MSG_ID_MASK ) msg_buff.flags |= MSG_EXT;