[PATCH] drivers/char/riscom8.c: get rid of verify_area and other cleanups

From: Arnaldo Carvalho de Melo (acme@conectiva.com.br)
Date: Fri Aug 25 2000 - 06:45:18 EST


Hi,

        Please take a look and consider applying.

                        - Arnaldo

--- linux-2.4.0-test7/drivers/char/riscom8.c Thu Oct 28 15:42:02 1999
+++ linux-2.4.0-test7.acme/drivers/char/riscom8.c Fri Aug 25 08:42:18 2000
@@ -25,6 +25,10 @@
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  * Revision 1.0
+ *
+ * Changes:
+ * Arnaldo Carvalho de Melo <acme@conectiva.com.br> 2000/08/25
+ * - get rid of verify_area, check copy_*_user return, small cleanups
  */
 
 #include <linux/module.h>
@@ -1228,7 +1232,11 @@
                         break;
 
                 if (from_user) {
- copy_from_user(tmp_buf, buf, c);
+ if (copy_from_user(tmp_buf, buf, c)) {
+ restore_flags(flags);
+ up(&tmp_buf_sem);
+ return 0;
+ }
                         c = MIN(c, MIN(SERIAL_XMIT_SIZE - port->xmit_cnt - 1,
                                        SERIAL_XMIT_SIZE - port->xmit_head));
                         memcpy(port->xmit_buf + port->xmit_head, tmp_buf, c);
@@ -1356,8 +1364,7 @@
                 | ((status & MSVR_CD) ? TIOCM_CAR : 0)
                 | ((status & MSVR_DSR) ? TIOCM_DSR : 0)
                 | ((status & MSVR_CTS) ? TIOCM_CTS : 0);
- put_user(result, value);
- return 0;
+ return put_user(result, value);
 }
 
 static int rc_set_modem_info(struct riscom_port * port, unsigned int cmd,
@@ -1426,13 +1433,8 @@
         struct riscom_board *bp = port_Board(port);
         int change_speed;
         unsigned long flags;
- int error;
-
- error = verify_area(VERIFY_READ, (void *) newinfo, sizeof(tmp));
- if (error)
- return error;
- copy_from_user(&tmp, newinfo, sizeof(tmp));
         
+ copy_from_user_ret(&tmp, newinfo, sizeof(tmp), -EFAULT);
 #if 0
         if ((tmp.irq != bp->irq) ||
             (tmp.port != bp->base) ||
@@ -1474,11 +1476,6 @@
 {
         struct serial_struct tmp;
         struct riscom_board *bp = port_Board(port);
- int error;
-
- error = verify_area(VERIFY_WRITE, (void *) retinfo, sizeof(tmp));
- if (error)
- return error;
         
         memset(&tmp, 0, sizeof(tmp));
         tmp.type = PORT_CIRRUS;
@@ -1490,7 +1487,7 @@
         tmp.close_delay = port->close_delay * HZ/100;
         tmp.closing_wait = port->closing_wait * HZ/100;
         tmp.xmit_fifo_size = CD180_NFIFO;
- copy_to_user(retinfo, &tmp, sizeof(tmp));
+ copy_to_user_ret(retinfo, &tmp, sizeof(tmp), -EFAULT);
         return 0;
 }
 
@@ -1524,18 +1521,13 @@
          case TIOCGSOFTCAR:
                 return put_user(C_CLOCAL(tty) ? 1 : 0, (unsigned int *) arg);
          case TIOCSSOFTCAR:
- retval = get_user(arg,(unsigned int *) arg);
- if (retval)
- return retval;
+ if (get_user(arg,(unsigned int *) arg))
+ return -EFAULT;
                 tty->termios->c_cflag =
                         ((tty->termios->c_cflag & ~CLOCAL) |
                         (arg ? CLOCAL : 0));
                 return 0;
          case TIOCMGET:
- error = verify_area(VERIFY_WRITE, (void *) arg,
- sizeof(unsigned int));
- if (error)
- return error;
                 return rc_get_modem_info(port, (unsigned int *) arg);
          case TIOCMBIS:
          case TIOCMBIC:
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Thu Aug 31 2000 - 21:00:16 EST