diff options
-rw-r--r-- | drivers/char/amiserial.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/drivers/char/amiserial.c b/drivers/char/amiserial.c index aabb368db935..667a21c72edb 100644 --- a/drivers/char/amiserial.c +++ b/drivers/char/amiserial.c | |||
@@ -1089,7 +1089,7 @@ static void rs_unthrottle(struct tty_struct * tty) | |||
1089 | */ | 1089 | */ |
1090 | 1090 | ||
1091 | static int get_serial_info(struct async_struct * info, | 1091 | static int get_serial_info(struct async_struct * info, |
1092 | struct serial_struct * retinfo) | 1092 | struct serial_struct __user * retinfo) |
1093 | { | 1093 | { |
1094 | struct serial_struct tmp; | 1094 | struct serial_struct tmp; |
1095 | struct serial_state *state = info->state; | 1095 | struct serial_state *state = info->state; |
@@ -1113,7 +1113,7 @@ static int get_serial_info(struct async_struct * info, | |||
1113 | } | 1113 | } |
1114 | 1114 | ||
1115 | static int set_serial_info(struct async_struct * info, | 1115 | static int set_serial_info(struct async_struct * info, |
1116 | struct serial_struct * new_info) | 1116 | struct serial_struct __user * new_info) |
1117 | { | 1117 | { |
1118 | struct serial_struct new_serial; | 1118 | struct serial_struct new_serial; |
1119 | struct serial_state old_state, *state; | 1119 | struct serial_state old_state, *state; |
@@ -1194,7 +1194,7 @@ check_and_exit: | |||
1194 | * transmit holding register is empty. This functionality | 1194 | * transmit holding register is empty. This functionality |
1195 | * allows an RS485 driver to be written in user space. | 1195 | * allows an RS485 driver to be written in user space. |
1196 | */ | 1196 | */ |
1197 | static int get_lsr_info(struct async_struct * info, unsigned int *value) | 1197 | static int get_lsr_info(struct async_struct * info, unsigned int __user *value) |
1198 | { | 1198 | { |
1199 | unsigned char status; | 1199 | unsigned char status; |
1200 | unsigned int result; | 1200 | unsigned int result; |
@@ -1285,6 +1285,7 @@ static int rs_ioctl(struct tty_struct *tty, struct file * file, | |||
1285 | struct async_struct * info = (struct async_struct *)tty->driver_data; | 1285 | struct async_struct * info = (struct async_struct *)tty->driver_data; |
1286 | struct async_icount cprev, cnow; /* kernel counter temps */ | 1286 | struct async_icount cprev, cnow; /* kernel counter temps */ |
1287 | struct serial_icounter_struct icount; | 1287 | struct serial_icounter_struct icount; |
1288 | void __user *argp = (void __user *)arg; | ||
1288 | unsigned long flags; | 1289 | unsigned long flags; |
1289 | 1290 | ||
1290 | if (serial_paranoia_check(info, tty->name, "rs_ioctl")) | 1291 | if (serial_paranoia_check(info, tty->name, "rs_ioctl")) |
@@ -1299,19 +1300,17 @@ static int rs_ioctl(struct tty_struct *tty, struct file * file, | |||
1299 | 1300 | ||
1300 | switch (cmd) { | 1301 | switch (cmd) { |
1301 | case TIOCGSERIAL: | 1302 | case TIOCGSERIAL: |
1302 | return get_serial_info(info, | 1303 | return get_serial_info(info, argp); |
1303 | (struct serial_struct *) arg); | ||
1304 | case TIOCSSERIAL: | 1304 | case TIOCSSERIAL: |
1305 | return set_serial_info(info, | 1305 | return set_serial_info(info, argp); |
1306 | (struct serial_struct *) arg); | ||
1307 | case TIOCSERCONFIG: | 1306 | case TIOCSERCONFIG: |
1308 | return 0; | 1307 | return 0; |
1309 | 1308 | ||
1310 | case TIOCSERGETLSR: /* Get line status register */ | 1309 | case TIOCSERGETLSR: /* Get line status register */ |
1311 | return get_lsr_info(info, (unsigned int *) arg); | 1310 | return get_lsr_info(info, argp); |
1312 | 1311 | ||
1313 | case TIOCSERGSTRUCT: | 1312 | case TIOCSERGSTRUCT: |
1314 | if (copy_to_user((struct async_struct *) arg, | 1313 | if (copy_to_user(argp, |
1315 | info, sizeof(struct async_struct))) | 1314 | info, sizeof(struct async_struct))) |
1316 | return -EFAULT; | 1315 | return -EFAULT; |
1317 | return 0; | 1316 | return 0; |
@@ -1370,7 +1369,7 @@ static int rs_ioctl(struct tty_struct *tty, struct file * file, | |||
1370 | icount.brk = cnow.brk; | 1369 | icount.brk = cnow.brk; |
1371 | icount.buf_overrun = cnow.buf_overrun; | 1370 | icount.buf_overrun = cnow.buf_overrun; |
1372 | 1371 | ||
1373 | if (copy_to_user((void *)arg, &icount, sizeof(icount))) | 1372 | if (copy_to_user(argp, &icount, sizeof(icount))) |
1374 | return -EFAULT; | 1373 | return -EFAULT; |
1375 | return 0; | 1374 | return 0; |
1376 | case TIOCSERGWILD: | 1375 | case TIOCSERGWILD: |