forked from luck/tmp_suning_uos_patched
tty: Remove dead termiox code
[ Upstream commit e0efb3168d34dc8c8c72718672b8902e40efff8f ]
set_termiox() and the TCGETX handler bail out with -EINVAL immediately
if ->termiox is NULL, but there are no code paths that can set
->termiox to a non-NULL pointer; and no such code paths seem to have
existed since the termiox mechanism was introduced back in
commit 1d65b4a088
("tty: Add termiox") in v2.6.28.
Similarly, no driver actually implements .set_termiox; and it looks like
no driver ever has.
Delete this dead code; but leave the definition of struct termiox in the
UAPI headers intact.
Signed-off-by: Jann Horn <jannh@google.com>
Link: https://lore.kernel.org/r/20201203020331.2394754-1-jannh@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
aa7f103da3
commit
eef2158b0c
|
@ -443,51 +443,6 @@ static int get_termio(struct tty_struct *tty, struct termio __user *termio)
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#ifdef TCGETX
|
||||
|
||||
/**
|
||||
* set_termiox - set termiox fields if possible
|
||||
* @tty: terminal
|
||||
* @arg: termiox structure from user
|
||||
* @opt: option flags for ioctl type
|
||||
*
|
||||
* Implement the device calling points for the SYS5 termiox ioctl
|
||||
* interface in Linux
|
||||
*/
|
||||
|
||||
static int set_termiox(struct tty_struct *tty, void __user *arg, int opt)
|
||||
{
|
||||
struct termiox tnew;
|
||||
struct tty_ldisc *ld;
|
||||
|
||||
if (tty->termiox == NULL)
|
||||
return -EINVAL;
|
||||
if (copy_from_user(&tnew, arg, sizeof(struct termiox)))
|
||||
return -EFAULT;
|
||||
|
||||
ld = tty_ldisc_ref(tty);
|
||||
if (ld != NULL) {
|
||||
if ((opt & TERMIOS_FLUSH) && ld->ops->flush_buffer)
|
||||
ld->ops->flush_buffer(tty);
|
||||
tty_ldisc_deref(ld);
|
||||
}
|
||||
if (opt & TERMIOS_WAIT) {
|
||||
tty_wait_until_sent(tty, 0);
|
||||
if (signal_pending(current))
|
||||
return -ERESTARTSYS;
|
||||
}
|
||||
|
||||
down_write(&tty->termios_rwsem);
|
||||
if (tty->ops->set_termiox)
|
||||
tty->ops->set_termiox(tty, &tnew);
|
||||
up_write(&tty->termios_rwsem);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef TIOCGETP
|
||||
/*
|
||||
* These are deprecated, but there is limited support..
|
||||
|
@ -815,23 +770,11 @@ int tty_mode_ioctl(struct tty_struct *tty, struct file *file,
|
|||
return ret;
|
||||
#endif
|
||||
#ifdef TCGETX
|
||||
case TCGETX: {
|
||||
struct termiox ktermx;
|
||||
if (real_tty->termiox == NULL)
|
||||
return -EINVAL;
|
||||
down_read(&real_tty->termios_rwsem);
|
||||
memcpy(&ktermx, real_tty->termiox, sizeof(struct termiox));
|
||||
up_read(&real_tty->termios_rwsem);
|
||||
if (copy_to_user(p, &ktermx, sizeof(struct termiox)))
|
||||
ret = -EFAULT;
|
||||
return ret;
|
||||
}
|
||||
case TCGETX:
|
||||
case TCSETX:
|
||||
return set_termiox(real_tty, p, 0);
|
||||
case TCSETXW:
|
||||
return set_termiox(real_tty, p, TERMIOS_WAIT);
|
||||
case TCSETXF:
|
||||
return set_termiox(real_tty, p, TERMIOS_FLUSH);
|
||||
return -EINVAL;
|
||||
#endif
|
||||
case TIOCGSOFTCAR:
|
||||
copy_termios(real_tty, &kterm);
|
||||
|
|
|
@ -303,7 +303,6 @@ struct tty_struct {
|
|||
spinlock_t flow_lock;
|
||||
/* Termios values are protected by the termios rwsem */
|
||||
struct ktermios termios, termios_locked;
|
||||
struct termiox *termiox; /* May be NULL for unsupported */
|
||||
char name[64];
|
||||
struct pid *pgrp; /* Protected by ctrl lock */
|
||||
/*
|
||||
|
|
|
@ -224,14 +224,6 @@
|
|||
* line). See tty_do_resize() if you need to wrap the standard method
|
||||
* in your own logic - the usual case.
|
||||
*
|
||||
* void (*set_termiox)(struct tty_struct *tty, struct termiox *new);
|
||||
*
|
||||
* Called when the device receives a termiox based ioctl. Passes down
|
||||
* the requested data from user space. This method will not be invoked
|
||||
* unless the tty also has a valid tty->termiox pointer.
|
||||
*
|
||||
* Optional: Called under the termios lock
|
||||
*
|
||||
* int (*get_icount)(struct tty_struct *tty, struct serial_icounter *icount);
|
||||
*
|
||||
* Called when the device receives a TIOCGICOUNT ioctl. Passed a kernel
|
||||
|
@ -285,7 +277,6 @@ struct tty_operations {
|
|||
int (*tiocmset)(struct tty_struct *tty,
|
||||
unsigned int set, unsigned int clear);
|
||||
int (*resize)(struct tty_struct *tty, struct winsize *ws);
|
||||
int (*set_termiox)(struct tty_struct *tty, struct termiox *tnew);
|
||||
int (*get_icount)(struct tty_struct *tty,
|
||||
struct serial_icounter_struct *icount);
|
||||
int (*get_serial)(struct tty_struct *tty, struct serial_struct *p);
|
||||
|
|
Loading…
Reference in New Issue
Block a user