Commit f8ee27f6 authored by Alexander Viro's avatar Alexander Viro Committed by Linus Torvalds

[PATCH] sparse: tty_ioctl annotation

tty_ioctl.c annotation
parent 1b27246b
......@@ -140,7 +140,7 @@ static void change_termios(struct tty_struct * tty, struct termios * new_termios
(*tty->ldisc.set_termios)(tty, &old_termios);
}
static int set_termios(struct tty_struct * tty, unsigned long arg, int opt)
static int set_termios(struct tty_struct * tty, void __user *arg, int opt)
{
struct termios tmp_termios;
int retval = tty_check_change(tty);
......@@ -151,11 +151,11 @@ static int set_termios(struct tty_struct * tty, unsigned long arg, int opt)
if (opt & TERMIOS_TERMIO) {
memcpy(&tmp_termios, tty->termios, sizeof(struct termios));
if (user_termio_to_kernel_termios(&tmp_termios,
(struct termio *) arg))
(struct termio __user *)arg))
return -EFAULT;
} else {
if (user_termios_to_kernel_termios(&tmp_termios,
(struct termios *) arg))
(struct termios __user *)arg))
return -EFAULT;
}
......@@ -172,7 +172,7 @@ static int set_termios(struct tty_struct * tty, unsigned long arg, int opt)
return 0;
}
static int get_termio(struct tty_struct * tty, struct termio * termio)
static int get_termio(struct tty_struct * tty, struct termio __user * termio)
{
if (kernel_termios_to_user_termio(termio, tty->termios))
return -EFAULT;
......@@ -222,7 +222,7 @@ static int get_sgflags(struct tty_struct * tty)
return flags;
}
static int get_sgttyb(struct tty_struct * tty, struct sgttyb * sgttyb)
static int get_sgttyb(struct tty_struct * tty, struct sgttyb __user * sgttyb)
{
struct sgttyb tmp;
......@@ -260,7 +260,7 @@ static void set_sgflags(struct termios * termios, int flags)
}
}
static int set_sgttyb(struct tty_struct * tty, struct sgttyb * sgttyb)
static int set_sgttyb(struct tty_struct * tty, struct sgttyb __user * sgttyb)
{
int retval;
struct sgttyb tmp;
......@@ -281,7 +281,7 @@ static int set_sgttyb(struct tty_struct * tty, struct sgttyb * sgttyb)
#endif
#ifdef TIOCGETC
static int get_tchars(struct tty_struct * tty, struct tchars * tchars)
static int get_tchars(struct tty_struct * tty, struct tchars __user * tchars)
{
struct tchars tmp;
......@@ -294,7 +294,7 @@ static int get_tchars(struct tty_struct * tty, struct tchars * tchars)
return copy_to_user(tchars, &tmp, sizeof(tmp)) ? -EFAULT : 0;
}
static int set_tchars(struct tty_struct * tty, struct tchars * tchars)
static int set_tchars(struct tty_struct * tty, struct tchars __user * tchars)
{
struct tchars tmp;
......@@ -311,7 +311,7 @@ static int set_tchars(struct tty_struct * tty, struct tchars * tchars)
#endif
#ifdef TIOCGLTC
static int get_ltchars(struct tty_struct * tty, struct ltchars * ltchars)
static int get_ltchars(struct tty_struct * tty, struct ltchars __user * ltchars)
{
struct ltchars tmp;
......@@ -324,7 +324,7 @@ static int get_ltchars(struct tty_struct * tty, struct ltchars * ltchars)
return copy_to_user(ltchars, &tmp, sizeof(tmp)) ? -EFAULT : 0;
}
static int set_ltchars(struct tty_struct * tty, struct ltchars * ltchars)
static int set_ltchars(struct tty_struct * tty, struct ltchars __user * ltchars)
{
struct ltchars tmp;
......@@ -363,6 +363,7 @@ int n_tty_ioctl(struct tty_struct * tty, struct file * file,
unsigned int cmd, unsigned long arg)
{
struct tty_struct * real_tty;
void __user *p = (void __user *)arg;
int retval;
if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
......@@ -374,41 +375,41 @@ int n_tty_ioctl(struct tty_struct * tty, struct file * file,
switch (cmd) {
#ifdef TIOCGETP
case TIOCGETP:
return get_sgttyb(real_tty, (struct sgttyb *) arg);
return get_sgttyb(real_tty, (struct sgttyb __user *) arg);
case TIOCSETP:
case TIOCSETN:
return set_sgttyb(real_tty, (struct sgttyb *) arg);
return set_sgttyb(real_tty, (struct sgttyb __user *) arg);
#endif
#ifdef TIOCGETC
case TIOCGETC:
return get_tchars(real_tty, (struct tchars *) arg);
return get_tchars(real_tty, p);
case TIOCSETC:
return set_tchars(real_tty, (struct tchars *) arg);
return set_tchars(real_tty, p);
#endif
#ifdef TIOCGLTC
case TIOCGLTC:
return get_ltchars(real_tty, (struct ltchars *) arg);
return get_ltchars(real_tty, p);
case TIOCSLTC:
return set_ltchars(real_tty, (struct ltchars *) arg);
return set_ltchars(real_tty, p);
#endif
case TCGETS:
if (kernel_termios_to_user_termios((struct termios *)arg, real_tty->termios))
if (kernel_termios_to_user_termios((struct termios __user *)arg, real_tty->termios))
return -EFAULT;
return 0;
case TCSETSF:
return set_termios(real_tty, arg, TERMIOS_FLUSH | TERMIOS_WAIT);
return set_termios(real_tty, p, TERMIOS_FLUSH | TERMIOS_WAIT);
case TCSETSW:
return set_termios(real_tty, arg, TERMIOS_WAIT);
return set_termios(real_tty, p, TERMIOS_WAIT);
case TCSETS:
return set_termios(real_tty, arg, 0);
return set_termios(real_tty, p, 0);
case TCGETA:
return get_termio(real_tty,(struct termio *) arg);
return get_termio(real_tty, p);
case TCSETAF:
return set_termios(real_tty, arg, TERMIOS_FLUSH | TERMIOS_WAIT | TERMIOS_TERMIO);
return set_termios(real_tty, p, TERMIOS_FLUSH | TERMIOS_WAIT | TERMIOS_TERMIO);
case TCSETAW:
return set_termios(real_tty, arg, TERMIOS_WAIT | TERMIOS_TERMIO);
return set_termios(real_tty, p, TERMIOS_WAIT | TERMIOS_TERMIO);
case TCSETA:
return set_termios(real_tty, arg, TERMIOS_TERMIO);
return set_termios(real_tty, p, TERMIOS_TERMIO);
case TCXONC:
retval = tty_check_change(tty);
if (retval)
......@@ -462,21 +463,21 @@ int n_tty_ioctl(struct tty_struct * tty, struct file * file,
case TIOCOUTQ:
return put_user(tty->driver->chars_in_buffer ?
tty->driver->chars_in_buffer(tty) : 0,
(int *) arg);
(int __user *) arg);
case TIOCINQ:
retval = tty->read_cnt;
if (L_ICANON(tty))
retval = inq_canon(tty);
return put_user(retval, (unsigned int *) arg);
return put_user(retval, (unsigned int __user *) arg);
case TIOCGLCKTRMIOS:
if (kernel_termios_to_user_termios((struct termios *)arg, real_tty->termios_locked))
if (kernel_termios_to_user_termios((struct termios __user *)arg, real_tty->termios_locked))
return -EFAULT;
return 0;
case TIOCSLCKTRMIOS:
if (!capable(CAP_SYS_ADMIN))
return -EPERM;
if (user_termios_to_kernel_termios(real_tty->termios_locked, (struct termios *) arg))
if (user_termios_to_kernel_termios(real_tty->termios_locked, (struct termios __user *) arg))
return -EFAULT;
return 0;
......@@ -487,7 +488,7 @@ int n_tty_ioctl(struct tty_struct * tty, struct file * file,
if (tty->driver->type != TTY_DRIVER_TYPE_PTY ||
tty->driver->subtype != PTY_TYPE_MASTER)
return -ENOTTY;
if (get_user(pktmode, (int *) arg))
if (get_user(pktmode, (int __user *) arg))
return -EFAULT;
if (pktmode) {
if (!tty->packet) {
......@@ -499,9 +500,9 @@ int n_tty_ioctl(struct tty_struct * tty, struct file * file,
return 0;
}
case TIOCGSOFTCAR:
return put_user(C_CLOCAL(tty) ? 1 : 0, (int *) arg);
return put_user(C_CLOCAL(tty) ? 1 : 0, (int __user *)arg);
case TIOCSSOFTCAR:
if (get_user(arg, (unsigned int *) arg))
if (get_user(arg, (unsigned int __user *) arg))
return -EFAULT;
tty->termios->c_cflag =
((tty->termios->c_cflag & ~CLOCAL) |
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment