Messages in this thread Patch in this message | | | Date | Sat, 26 Aug 2000 19:53:10 -0300 | From | Arnaldo Carvalho de Melo <> | Subject | [PATCH] specialix.c: get rid of verify_area and 2.0 compat |
| |
Rogier,
Please take a look and consider applying.
- Arnaldo
--- linux-2.4.0-test7/drivers/char/specialix.c Wed Jul 5 14:56:13 2000 +++ linux-2.4.0-test7.acme/drivers/char/specialix.c Sat Aug 26 19:51:46 2000 @@ -63,10 +63,13 @@ * Revision 1.10: Oct 22 1999 / Jan 21 2000. * Added stuff for setserial. * Nicolas Mailhot (Nicolas.Mailhot@email.enst.fr) + * Revision 1.11: Aug/2000 + * get rid of verify_area and 2.0 compat + * Arnaldo Carvalho de Melo <acme@conectiva.com.br> * */ -#define VERSION "1.10" +#define VERSION "1.11" /* @@ -95,35 +98,6 @@ #include <linux/pci.h> -/* ************************************************************** */ -/* * This section can be removed when 2.0 becomes outdated.... * */ -/* ************************************************************** */ - -#if LINUX_VERSION_CODE < 131328 /* Less than 2.1.0 */ -#define TWO_ZERO -#else -#if LINUX_VERSION_CODE < 131371 /* less than 2.1.43 */ -/* This has not been extensively tested yet. Sorry. */ -#warning "You're on your own between 2.1.0 and 2.1.43.... " -#warning "Please use a recent kernel." -#endif -#endif - - -#ifdef TWO_ZERO -#define Get_user(a,b) a = get_user(b) -#define copy_from_user(a,b,c) memcpy_fromfs(a,b,c) -#define copy_to_user(a,b,c) memcpy_tofs(a,b,c) -#define queue_task queue_task_irq_off -#else -#define Get_user(a,b) get_user(a,b) -#endif - -/* ************************************************************** */ -/* * End of compatibility section.. * */ -/* ************************************************************** */ - - #ifndef TWO_ZERO #include <asm/uaccess.h> #endif @@ -1770,24 +1744,19 @@ |/* ((status & MSVR_DSR) ? */ TIOCM_DSR /* : 0) */ | ((status & MSVR_CTS) ? TIOCM_CTS : 0); } - put_user(result,(unsigned int *) value); - return 0; + return put_user(result,(unsigned int *) value); } static int sx_set_modem_info(struct specialix_port * port, unsigned int cmd, unsigned int *value) { - int error; unsigned int arg; unsigned long flags; struct specialix_board *bp = port_Board(port); - error = verify_area(VERIFY_READ, value, sizeof(int)); - if (error) - return error; - - Get_user(arg, (unsigned long *) value); + if (get_user(arg, (unsigned long *) value)) + return -EFAULT; switch (cmd) { case TIOCMBIS: /* if (arg & TIOCM_RTS) @@ -1868,12 +1837,7 @@ struct specialix_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; - if (copy_from_user(&tmp, newinfo, sizeof(tmp))) return -EFAULT; @@ -1922,12 +1886,7 @@ { struct serial_struct tmp; struct specialix_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; tmp.line = port - sx_port; @@ -1939,9 +1898,7 @@ tmp.closing_wait = port->closing_wait * HZ/100; tmp.custom_divisor = port->custom_divisor; tmp.xmit_fifo_size = CD186x_NFIFO; - if (copy_to_user(retinfo, &tmp, sizeof(tmp))) - return -EFAULT; - return 0; + return copy_to_user(retinfo, &tmp, sizeof(tmp)) ? -EFAULT : 0; } @@ -1949,7 +1906,6 @@ unsigned int cmd, unsigned long arg) { struct specialix_port *port = (struct specialix_port *)tty->driver_data; - int error; int retval; if (sx_paranoia_check(port, tty->device, "sx_ioctl")) @@ -1972,23 +1928,15 @@ sx_send_break(port, arg ? arg*(HZ/10) : HZ/4); return 0; case TIOCGSOFTCAR: - error = verify_area(VERIFY_WRITE, (void *) arg, sizeof(long)); - if (error) - return error; - put_user(C_CLOCAL(tty) ? 1 : 0, - (unsigned long *) arg); - return 0; + return put_user(C_CLOCAL(tty) ? 1 : 0, (unsigned long *) arg); case TIOCSSOFTCAR: - Get_user(arg, (unsigned long *) arg); + if (get_user(arg, (unsigned long *) 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 sx_get_modem_info(port, (unsigned int *) arg); case TIOCMBIS: case TIOCMBIC: @@ -2245,17 +2193,14 @@ specialix_callout_driver.subtype = SPECIALIX_TYPE_CALLOUT; if ((error = tty_register_driver(&specialix_driver))) { - free_page((unsigned long)tmp_buf); printk(KERN_ERR "sx: Couldn't register specialix IO8+ driver, error = %d\n", error); - return 1; + goto cleanup_tmp_buf; } if ((error = tty_register_driver(&specialix_callout_driver))) { - free_page((unsigned long)tmp_buf); - tty_unregister_driver(&specialix_driver); printk(KERN_ERR "sx: Couldn't register specialix IO8+ callout driver, error = %d\n", error); - return 1; + goto cleanup_tty_driver; } memset(sx_port, 0, sizeof(sx_port)); @@ -2274,14 +2219,22 @@ } return 0; +cleanup_tty_driver: + if (tty_unregister_driver(&specialix_driver)) + printk(KERN_ERR "specialix: unable to unregister serial driver\n"); +cleanup_tmp_buf: + free_page((unsigned long)tmp_buf); + return 1; } static void sx_release_drivers(void) { free_page((unsigned long)tmp_buf); - tty_unregister_driver(&specialix_driver); - tty_unregister_driver(&specialix_callout_driver); + if (tty_unregister_driver(&specialix_driver)) + printk(KERN_ERR "specialix: unable to unregister serial driver\n"); + if (tty_unregister_driver(&specialix_callout_driver)) + printk(KERN_ERR "specialix: unable to unregister callout driver\n"); } - 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/
| |