aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/tty.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/tty.c')
-rw-r--r--sys/kern/tty.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/sys/kern/tty.c b/sys/kern/tty.c
index 09ed1c6d0c5d..f412205a3d2b 100644
--- a/sys/kern/tty.c
+++ b/sys/kern/tty.c
@@ -1890,7 +1890,12 @@ tty_generic_ioctl(struct tty *tp, u_long cmd, void *data, int fflag,
/* XXX: This looks awful. */
tty_unlock(tp);
sx_xlock(&proctree_lock);
- tty_lock(tp);
+ error = ttydev_enter(tp);
+ if (error != 0) {
+ sx_xunlock(&proctree_lock);
+ tty_lock(tp);
+ return (error);
+ }
if (!SESS_LEADER(p)) {
/* Only the session leader may do this. */
@@ -1954,7 +1959,12 @@ tty_generic_ioctl(struct tty *tp, u_long cmd, void *data, int fflag,
tty_lock(tp);
return (EPERM);
}
- tty_lock(tp);
+ error = ttydev_enter(tp);
+ if (error != 0) {
+ sx_sunlock(&proctree_lock);
+ tty_lock(tp);
+ return (error);
+ }
/*
* Determine if this TTY is the controlling TTY after