.. | .. |
---|
108 | 108 | |
---|
109 | 109 | #include <linux/kmod.h> |
---|
110 | 110 | #include <linux/nsproxy.h> |
---|
| 111 | +#include "tty.h" |
---|
111 | 112 | |
---|
112 | 113 | #undef TTY_DEBUG_HANGUP |
---|
113 | 114 | #ifdef TTY_DEBUG_HANGUP |
---|
.. | .. |
---|
941 | 942 | return i; |
---|
942 | 943 | } |
---|
943 | 944 | |
---|
944 | | -static void tty_write_unlock(struct tty_struct *tty) |
---|
| 945 | +void tty_write_unlock(struct tty_struct *tty) |
---|
945 | 946 | { |
---|
946 | 947 | mutex_unlock(&tty->atomic_write_lock); |
---|
947 | 948 | wake_up_interruptible_poll(&tty->write_wait, EPOLLOUT); |
---|
948 | 949 | } |
---|
949 | 950 | |
---|
950 | | -static int tty_write_lock(struct tty_struct *tty, int ndelay) |
---|
| 951 | +int tty_write_lock(struct tty_struct *tty, int ndelay) |
---|
951 | 952 | { |
---|
952 | 953 | if (!mutex_trylock(&tty->atomic_write_lock)) { |
---|
953 | 954 | if (ndelay) |
---|
.. | .. |
---|
1237 | 1238 | { |
---|
1238 | 1239 | struct tty_struct *tty; |
---|
1239 | 1240 | |
---|
1240 | | - if (driver->ops->lookup) |
---|
| 1241 | + if (driver->ops->lookup) { |
---|
1241 | 1242 | if (!file) |
---|
1242 | 1243 | tty = ERR_PTR(-EIO); |
---|
1243 | 1244 | else |
---|
1244 | 1245 | tty = driver->ops->lookup(driver, file, idx); |
---|
1245 | | - else |
---|
| 1246 | + } else { |
---|
| 1247 | + if (idx >= driver->num) |
---|
| 1248 | + return ERR_PTR(-EINVAL); |
---|
1246 | 1249 | tty = driver->ttys[idx]; |
---|
1247 | | - |
---|
| 1250 | + } |
---|
1248 | 1251 | if (!IS_ERR(tty)) |
---|
1249 | 1252 | tty_kref_get(tty); |
---|
1250 | 1253 | return tty; |
---|