Messages in this thread Patch in this message |  | | Date | Fri, 25 Aug 2000 08:45:18 -0300 | From | Arnaldo Carvalho de Melo <> | Subject | [PATCH] drivers/char/riscom8.c: get rid of verify_area and other cleanups |
| |
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/
|  |