0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068 #include <linux/types.h>
0069 #include <linux/major.h>
0070 #include <linux/errno.h>
0071 #include <linux/signal.h>
0072 #include <linux/fcntl.h>
0073 #include <linux/sched/signal.h>
0074 #include <linux/sched/task.h>
0075 #include <linux/interrupt.h>
0076 #include <linux/tty.h>
0077 #include <linux/tty_driver.h>
0078 #include <linux/tty_flip.h>
0079 #include <linux/devpts_fs.h>
0080 #include <linux/file.h>
0081 #include <linux/fdtable.h>
0082 #include <linux/console.h>
0083 #include <linux/timer.h>
0084 #include <linux/ctype.h>
0085 #include <linux/kd.h>
0086 #include <linux/mm.h>
0087 #include <linux/string.h>
0088 #include <linux/slab.h>
0089 #include <linux/poll.h>
0090 #include <linux/ppp-ioctl.h>
0091 #include <linux/proc_fs.h>
0092 #include <linux/init.h>
0093 #include <linux/module.h>
0094 #include <linux/device.h>
0095 #include <linux/wait.h>
0096 #include <linux/bitops.h>
0097 #include <linux/delay.h>
0098 #include <linux/seq_file.h>
0099 #include <linux/serial.h>
0100 #include <linux/ratelimit.h>
0101 #include <linux/compat.h>
0102
0103 #include <linux/uaccess.h>
0104
0105 #include <linux/kbd_kern.h>
0106 #include <linux/vt_kern.h>
0107 #include <linux/selection.h>
0108
0109 #include <linux/kmod.h>
0110 #include <linux/nsproxy.h>
0111 #include "tty.h"
0112
0113 #undef TTY_DEBUG_HANGUP
0114 #ifdef TTY_DEBUG_HANGUP
0115 # define tty_debug_hangup(tty, f, args...) tty_debug(tty, f, ##args)
0116 #else
0117 # define tty_debug_hangup(tty, f, args...) do { } while (0)
0118 #endif
0119
0120 #define TTY_PARANOIA_CHECK 1
0121 #define CHECK_TTY_COUNT 1
0122
0123 struct ktermios tty_std_termios = {
0124 .c_iflag = ICRNL | IXON,
0125 .c_oflag = OPOST | ONLCR,
0126 .c_cflag = B38400 | CS8 | CREAD | HUPCL,
0127 .c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK |
0128 ECHOCTL | ECHOKE | IEXTEN,
0129 .c_cc = INIT_C_CC,
0130 .c_ispeed = 38400,
0131 .c_ospeed = 38400,
0132
0133 };
0134 EXPORT_SYMBOL(tty_std_termios);
0135
0136
0137
0138
0139
0140
0141 LIST_HEAD(tty_drivers);
0142
0143
0144 DEFINE_MUTEX(tty_mutex);
0145
0146 static ssize_t tty_read(struct kiocb *, struct iov_iter *);
0147 static ssize_t tty_write(struct kiocb *, struct iov_iter *);
0148 static __poll_t tty_poll(struct file *, poll_table *);
0149 static int tty_open(struct inode *, struct file *);
0150 #ifdef CONFIG_COMPAT
0151 static long tty_compat_ioctl(struct file *file, unsigned int cmd,
0152 unsigned long arg);
0153 #else
0154 #define tty_compat_ioctl NULL
0155 #endif
0156 static int __tty_fasync(int fd, struct file *filp, int on);
0157 static int tty_fasync(int fd, struct file *filp, int on);
0158 static void release_tty(struct tty_struct *tty, int idx);
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168 static void free_tty_struct(struct tty_struct *tty)
0169 {
0170 tty_ldisc_deinit(tty);
0171 put_device(tty->dev);
0172 kvfree(tty->write_buf);
0173 tty->magic = 0xDEADDEAD;
0174 kfree(tty);
0175 }
0176
0177 static inline struct tty_struct *file_tty(struct file *file)
0178 {
0179 return ((struct tty_file_private *)file->private_data)->tty;
0180 }
0181
0182 int tty_alloc_file(struct file *file)
0183 {
0184 struct tty_file_private *priv;
0185
0186 priv = kmalloc(sizeof(*priv), GFP_KERNEL);
0187 if (!priv)
0188 return -ENOMEM;
0189
0190 file->private_data = priv;
0191
0192 return 0;
0193 }
0194
0195
0196 void tty_add_file(struct tty_struct *tty, struct file *file)
0197 {
0198 struct tty_file_private *priv = file->private_data;
0199
0200 priv->tty = tty;
0201 priv->file = file;
0202
0203 spin_lock(&tty->files_lock);
0204 list_add(&priv->list, &tty->tty_files);
0205 spin_unlock(&tty->files_lock);
0206 }
0207
0208
0209
0210
0211
0212
0213
0214
0215 void tty_free_file(struct file *file)
0216 {
0217 struct tty_file_private *priv = file->private_data;
0218
0219 file->private_data = NULL;
0220 kfree(priv);
0221 }
0222
0223
0224 static void tty_del_file(struct file *file)
0225 {
0226 struct tty_file_private *priv = file->private_data;
0227 struct tty_struct *tty = priv->tty;
0228
0229 spin_lock(&tty->files_lock);
0230 list_del(&priv->list);
0231 spin_unlock(&tty->files_lock);
0232 tty_free_file(file);
0233 }
0234
0235
0236
0237
0238
0239
0240
0241
0242
0243
0244 const char *tty_name(const struct tty_struct *tty)
0245 {
0246 if (!tty)
0247 return "NULL tty";
0248 return tty->name;
0249 }
0250 EXPORT_SYMBOL(tty_name);
0251
0252 const char *tty_driver_name(const struct tty_struct *tty)
0253 {
0254 if (!tty || !tty->driver)
0255 return "";
0256 return tty->driver->name;
0257 }
0258
0259 static int tty_paranoia_check(struct tty_struct *tty, struct inode *inode,
0260 const char *routine)
0261 {
0262 #ifdef TTY_PARANOIA_CHECK
0263 if (!tty) {
0264 pr_warn("(%d:%d): %s: NULL tty\n",
0265 imajor(inode), iminor(inode), routine);
0266 return 1;
0267 }
0268 if (tty->magic != TTY_MAGIC) {
0269 pr_warn("(%d:%d): %s: bad magic number\n",
0270 imajor(inode), iminor(inode), routine);
0271 return 1;
0272 }
0273 #endif
0274 return 0;
0275 }
0276
0277
0278 static int check_tty_count(struct tty_struct *tty, const char *routine)
0279 {
0280 #ifdef CHECK_TTY_COUNT
0281 struct list_head *p;
0282 int count = 0, kopen_count = 0;
0283
0284 spin_lock(&tty->files_lock);
0285 list_for_each(p, &tty->tty_files) {
0286 count++;
0287 }
0288 spin_unlock(&tty->files_lock);
0289 if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
0290 tty->driver->subtype == PTY_TYPE_SLAVE &&
0291 tty->link && tty->link->count)
0292 count++;
0293 if (tty_port_kopened(tty->port))
0294 kopen_count++;
0295 if (tty->count != (count + kopen_count)) {
0296 tty_warn(tty, "%s: tty->count(%d) != (#fd's(%d) + #kopen's(%d))\n",
0297 routine, tty->count, count, kopen_count);
0298 return (count + kopen_count);
0299 }
0300 #endif
0301 return 0;
0302 }
0303
0304
0305
0306
0307
0308
0309
0310
0311
0312
0313
0314 static struct tty_driver *get_tty_driver(dev_t device, int *index)
0315 {
0316 struct tty_driver *p;
0317
0318 list_for_each_entry(p, &tty_drivers, tty_drivers) {
0319 dev_t base = MKDEV(p->major, p->minor_start);
0320
0321 if (device < base || device >= base + p->num)
0322 continue;
0323 *index = device - base;
0324 return tty_driver_kref_get(p);
0325 }
0326 return NULL;
0327 }
0328
0329
0330
0331
0332
0333
0334
0335
0336
0337
0338
0339
0340
0341
0342 int tty_dev_name_to_number(const char *name, dev_t *number)
0343 {
0344 struct tty_driver *p;
0345 int ret;
0346 int index, prefix_length = 0;
0347 const char *str;
0348
0349 for (str = name; *str && !isdigit(*str); str++)
0350 ;
0351
0352 if (!*str)
0353 return -EINVAL;
0354
0355 ret = kstrtoint(str, 10, &index);
0356 if (ret)
0357 return ret;
0358
0359 prefix_length = str - name;
0360 mutex_lock(&tty_mutex);
0361
0362 list_for_each_entry(p, &tty_drivers, tty_drivers)
0363 if (prefix_length == strlen(p->name) && strncmp(name,
0364 p->name, prefix_length) == 0) {
0365 if (index < p->num) {
0366 *number = MKDEV(p->major, p->minor_start + index);
0367 goto out;
0368 }
0369 }
0370
0371
0372 ret = -ENODEV;
0373 out:
0374 mutex_unlock(&tty_mutex);
0375 return ret;
0376 }
0377 EXPORT_SYMBOL_GPL(tty_dev_name_to_number);
0378
0379 #ifdef CONFIG_CONSOLE_POLL
0380
0381
0382
0383
0384
0385
0386
0387
0388
0389 struct tty_driver *tty_find_polling_driver(char *name, int *line)
0390 {
0391 struct tty_driver *p, *res = NULL;
0392 int tty_line = 0;
0393 int len;
0394 char *str, *stp;
0395
0396 for (str = name; *str; str++)
0397 if ((*str >= '0' && *str <= '9') || *str == ',')
0398 break;
0399 if (!*str)
0400 return NULL;
0401
0402 len = str - name;
0403 tty_line = simple_strtoul(str, &str, 10);
0404
0405 mutex_lock(&tty_mutex);
0406
0407 list_for_each_entry(p, &tty_drivers, tty_drivers) {
0408 if (!len || strncmp(name, p->name, len) != 0)
0409 continue;
0410 stp = str;
0411 if (*stp == ',')
0412 stp++;
0413 if (*stp == '\0')
0414 stp = NULL;
0415
0416 if (tty_line >= 0 && tty_line < p->num && p->ops &&
0417 p->ops->poll_init && !p->ops->poll_init(p, tty_line, stp)) {
0418 res = tty_driver_kref_get(p);
0419 *line = tty_line;
0420 break;
0421 }
0422 }
0423 mutex_unlock(&tty_mutex);
0424
0425 return res;
0426 }
0427 EXPORT_SYMBOL_GPL(tty_find_polling_driver);
0428 #endif
0429
0430 static ssize_t hung_up_tty_read(struct kiocb *iocb, struct iov_iter *to)
0431 {
0432 return 0;
0433 }
0434
0435 static ssize_t hung_up_tty_write(struct kiocb *iocb, struct iov_iter *from)
0436 {
0437 return -EIO;
0438 }
0439
0440
0441 static __poll_t hung_up_tty_poll(struct file *filp, poll_table *wait)
0442 {
0443 return EPOLLIN | EPOLLOUT | EPOLLERR | EPOLLHUP | EPOLLRDNORM | EPOLLWRNORM;
0444 }
0445
0446 static long hung_up_tty_ioctl(struct file *file, unsigned int cmd,
0447 unsigned long arg)
0448 {
0449 return cmd == TIOCSPGRP ? -ENOTTY : -EIO;
0450 }
0451
0452 static long hung_up_tty_compat_ioctl(struct file *file,
0453 unsigned int cmd, unsigned long arg)
0454 {
0455 return cmd == TIOCSPGRP ? -ENOTTY : -EIO;
0456 }
0457
0458 static int hung_up_tty_fasync(int fd, struct file *file, int on)
0459 {
0460 return -ENOTTY;
0461 }
0462
0463 static void tty_show_fdinfo(struct seq_file *m, struct file *file)
0464 {
0465 struct tty_struct *tty = file_tty(file);
0466
0467 if (tty && tty->ops && tty->ops->show_fdinfo)
0468 tty->ops->show_fdinfo(tty, m);
0469 }
0470
0471 static const struct file_operations tty_fops = {
0472 .llseek = no_llseek,
0473 .read_iter = tty_read,
0474 .write_iter = tty_write,
0475 .splice_read = generic_file_splice_read,
0476 .splice_write = iter_file_splice_write,
0477 .poll = tty_poll,
0478 .unlocked_ioctl = tty_ioctl,
0479 .compat_ioctl = tty_compat_ioctl,
0480 .open = tty_open,
0481 .release = tty_release,
0482 .fasync = tty_fasync,
0483 .show_fdinfo = tty_show_fdinfo,
0484 };
0485
0486 static const struct file_operations console_fops = {
0487 .llseek = no_llseek,
0488 .read_iter = tty_read,
0489 .write_iter = redirected_tty_write,
0490 .splice_read = generic_file_splice_read,
0491 .splice_write = iter_file_splice_write,
0492 .poll = tty_poll,
0493 .unlocked_ioctl = tty_ioctl,
0494 .compat_ioctl = tty_compat_ioctl,
0495 .open = tty_open,
0496 .release = tty_release,
0497 .fasync = tty_fasync,
0498 };
0499
0500 static const struct file_operations hung_up_tty_fops = {
0501 .llseek = no_llseek,
0502 .read_iter = hung_up_tty_read,
0503 .write_iter = hung_up_tty_write,
0504 .poll = hung_up_tty_poll,
0505 .unlocked_ioctl = hung_up_tty_ioctl,
0506 .compat_ioctl = hung_up_tty_compat_ioctl,
0507 .release = tty_release,
0508 .fasync = hung_up_tty_fasync,
0509 };
0510
0511 static DEFINE_SPINLOCK(redirect_lock);
0512 static struct file *redirect;
0513
0514
0515
0516
0517
0518
0519
0520
0521
0522 void tty_wakeup(struct tty_struct *tty)
0523 {
0524 struct tty_ldisc *ld;
0525
0526 if (test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) {
0527 ld = tty_ldisc_ref(tty);
0528 if (ld) {
0529 if (ld->ops->write_wakeup)
0530 ld->ops->write_wakeup(tty);
0531 tty_ldisc_deref(ld);
0532 }
0533 }
0534 wake_up_interruptible_poll(&tty->write_wait, EPOLLOUT);
0535 }
0536 EXPORT_SYMBOL_GPL(tty_wakeup);
0537
0538
0539
0540
0541
0542
0543
0544
0545 static struct file *tty_release_redirect(struct tty_struct *tty)
0546 {
0547 struct file *f = NULL;
0548
0549 spin_lock(&redirect_lock);
0550 if (redirect && file_tty(redirect) == tty) {
0551 f = redirect;
0552 redirect = NULL;
0553 }
0554 spin_unlock(&redirect_lock);
0555
0556 return f;
0557 }
0558
0559
0560
0561
0562
0563
0564
0565
0566
0567
0568
0569
0570
0571
0572
0573
0574
0575
0576
0577
0578
0579
0580
0581
0582
0583
0584 static void __tty_hangup(struct tty_struct *tty, int exit_session)
0585 {
0586 struct file *cons_filp = NULL;
0587 struct file *filp, *f;
0588 struct tty_file_private *priv;
0589 int closecount = 0, n;
0590 int refs;
0591
0592 if (!tty)
0593 return;
0594
0595 f = tty_release_redirect(tty);
0596
0597 tty_lock(tty);
0598
0599 if (test_bit(TTY_HUPPED, &tty->flags)) {
0600 tty_unlock(tty);
0601 return;
0602 }
0603
0604
0605
0606
0607
0608
0609
0610 set_bit(TTY_HUPPING, &tty->flags);
0611
0612
0613
0614
0615
0616 check_tty_count(tty, "tty_hangup");
0617
0618 spin_lock(&tty->files_lock);
0619
0620 list_for_each_entry(priv, &tty->tty_files, list) {
0621 filp = priv->file;
0622 if (filp->f_op->write_iter == redirected_tty_write)
0623 cons_filp = filp;
0624 if (filp->f_op->write_iter != tty_write)
0625 continue;
0626 closecount++;
0627 __tty_fasync(-1, filp, 0);
0628 filp->f_op = &hung_up_tty_fops;
0629 }
0630 spin_unlock(&tty->files_lock);
0631
0632 refs = tty_signal_session_leader(tty, exit_session);
0633
0634 while (refs--)
0635 tty_kref_put(tty);
0636
0637 tty_ldisc_hangup(tty, cons_filp != NULL);
0638
0639 spin_lock_irq(&tty->ctrl.lock);
0640 clear_bit(TTY_THROTTLED, &tty->flags);
0641 clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
0642 put_pid(tty->ctrl.session);
0643 put_pid(tty->ctrl.pgrp);
0644 tty->ctrl.session = NULL;
0645 tty->ctrl.pgrp = NULL;
0646 tty->ctrl.pktstatus = 0;
0647 spin_unlock_irq(&tty->ctrl.lock);
0648
0649
0650
0651
0652
0653
0654
0655 if (cons_filp) {
0656 if (tty->ops->close)
0657 for (n = 0; n < closecount; n++)
0658 tty->ops->close(tty, cons_filp);
0659 } else if (tty->ops->hangup)
0660 tty->ops->hangup(tty);
0661
0662
0663
0664
0665
0666 set_bit(TTY_HUPPED, &tty->flags);
0667 clear_bit(TTY_HUPPING, &tty->flags);
0668 tty_unlock(tty);
0669
0670 if (f)
0671 fput(f);
0672 }
0673
0674 static void do_tty_hangup(struct work_struct *work)
0675 {
0676 struct tty_struct *tty =
0677 container_of(work, struct tty_struct, hangup_work);
0678
0679 __tty_hangup(tty, 0);
0680 }
0681
0682
0683
0684
0685
0686
0687
0688
0689 void tty_hangup(struct tty_struct *tty)
0690 {
0691 tty_debug_hangup(tty, "hangup\n");
0692 schedule_work(&tty->hangup_work);
0693 }
0694 EXPORT_SYMBOL(tty_hangup);
0695
0696
0697
0698
0699
0700
0701
0702
0703
0704 void tty_vhangup(struct tty_struct *tty)
0705 {
0706 tty_debug_hangup(tty, "vhangup\n");
0707 __tty_hangup(tty, 0);
0708 }
0709 EXPORT_SYMBOL(tty_vhangup);
0710
0711
0712
0713
0714
0715
0716
0717 void tty_vhangup_self(void)
0718 {
0719 struct tty_struct *tty;
0720
0721 tty = get_current_tty();
0722 if (tty) {
0723 tty_vhangup(tty);
0724 tty_kref_put(tty);
0725 }
0726 }
0727
0728
0729
0730
0731
0732
0733
0734
0735
0736
0737
0738 void tty_vhangup_session(struct tty_struct *tty)
0739 {
0740 tty_debug_hangup(tty, "session hangup\n");
0741 __tty_hangup(tty, 1);
0742 }
0743
0744
0745
0746
0747
0748
0749
0750 int tty_hung_up_p(struct file *filp)
0751 {
0752 return (filp && filp->f_op == &hung_up_tty_fops);
0753 }
0754 EXPORT_SYMBOL(tty_hung_up_p);
0755
0756 void __stop_tty(struct tty_struct *tty)
0757 {
0758 if (tty->flow.stopped)
0759 return;
0760 tty->flow.stopped = true;
0761 if (tty->ops->stop)
0762 tty->ops->stop(tty);
0763 }
0764
0765
0766
0767
0768
0769
0770
0771
0772
0773
0774
0775
0776
0777
0778
0779 void stop_tty(struct tty_struct *tty)
0780 {
0781 unsigned long flags;
0782
0783 spin_lock_irqsave(&tty->flow.lock, flags);
0784 __stop_tty(tty);
0785 spin_unlock_irqrestore(&tty->flow.lock, flags);
0786 }
0787 EXPORT_SYMBOL(stop_tty);
0788
0789 void __start_tty(struct tty_struct *tty)
0790 {
0791 if (!tty->flow.stopped || tty->flow.tco_stopped)
0792 return;
0793 tty->flow.stopped = false;
0794 if (tty->ops->start)
0795 tty->ops->start(tty);
0796 tty_wakeup(tty);
0797 }
0798
0799
0800
0801
0802
0803
0804
0805
0806
0807
0808
0809
0810 void start_tty(struct tty_struct *tty)
0811 {
0812 unsigned long flags;
0813
0814 spin_lock_irqsave(&tty->flow.lock, flags);
0815 __start_tty(tty);
0816 spin_unlock_irqrestore(&tty->flow.lock, flags);
0817 }
0818 EXPORT_SYMBOL(start_tty);
0819
0820 static void tty_update_time(struct timespec64 *time)
0821 {
0822 time64_t sec = ktime_get_real_seconds();
0823
0824
0825
0826
0827
0828
0829
0830 if ((sec ^ time->tv_sec) & ~7)
0831 time->tv_sec = sec;
0832 }
0833
0834
0835
0836
0837
0838
0839
0840
0841
0842
0843
0844
0845 static int iterate_tty_read(struct tty_ldisc *ld, struct tty_struct *tty,
0846 struct file *file, struct iov_iter *to)
0847 {
0848 int retval = 0;
0849 void *cookie = NULL;
0850 unsigned long offset = 0;
0851 char kernel_buf[64];
0852 size_t count = iov_iter_count(to);
0853
0854 do {
0855 int size, copied;
0856
0857 size = count > sizeof(kernel_buf) ? sizeof(kernel_buf) : count;
0858 size = ld->ops->read(tty, file, kernel_buf, size, &cookie, offset);
0859 if (!size)
0860 break;
0861
0862 if (size < 0) {
0863
0864 if (retval)
0865 break;
0866 retval = size;
0867
0868
0869
0870
0871
0872
0873 if (retval == -EOVERFLOW)
0874 offset = 0;
0875 break;
0876 }
0877
0878 copied = copy_to_iter(kernel_buf, size, to);
0879 offset += copied;
0880 count -= copied;
0881
0882
0883
0884
0885
0886
0887
0888 if (unlikely(copied != size)) {
0889 count = 0;
0890 retval = -EFAULT;
0891 }
0892 } while (cookie);
0893
0894
0895 memzero_explicit(kernel_buf, sizeof(kernel_buf));
0896 return offset ? offset : retval;
0897 }
0898
0899
0900
0901
0902
0903
0904
0905
0906
0907
0908
0909
0910
0911
0912 static ssize_t tty_read(struct kiocb *iocb, struct iov_iter *to)
0913 {
0914 int i;
0915 struct file *file = iocb->ki_filp;
0916 struct inode *inode = file_inode(file);
0917 struct tty_struct *tty = file_tty(file);
0918 struct tty_ldisc *ld;
0919
0920 if (tty_paranoia_check(tty, inode, "tty_read"))
0921 return -EIO;
0922 if (!tty || tty_io_error(tty))
0923 return -EIO;
0924
0925
0926
0927
0928 ld = tty_ldisc_ref_wait(tty);
0929 if (!ld)
0930 return hung_up_tty_read(iocb, to);
0931 i = -EIO;
0932 if (ld->ops->read)
0933 i = iterate_tty_read(ld, tty, file, to);
0934 tty_ldisc_deref(ld);
0935
0936 if (i > 0)
0937 tty_update_time(&inode->i_atime);
0938
0939 return i;
0940 }
0941
0942 static void tty_write_unlock(struct tty_struct *tty)
0943 {
0944 mutex_unlock(&tty->atomic_write_lock);
0945 wake_up_interruptible_poll(&tty->write_wait, EPOLLOUT);
0946 }
0947
0948 static int tty_write_lock(struct tty_struct *tty, int ndelay)
0949 {
0950 if (!mutex_trylock(&tty->atomic_write_lock)) {
0951 if (ndelay)
0952 return -EAGAIN;
0953 if (mutex_lock_interruptible(&tty->atomic_write_lock))
0954 return -ERESTARTSYS;
0955 }
0956 return 0;
0957 }
0958
0959
0960
0961
0962
0963 static inline ssize_t do_tty_write(
0964 ssize_t (*write)(struct tty_struct *, struct file *, const unsigned char *, size_t),
0965 struct tty_struct *tty,
0966 struct file *file,
0967 struct iov_iter *from)
0968 {
0969 size_t count = iov_iter_count(from);
0970 ssize_t ret, written = 0;
0971 unsigned int chunk;
0972
0973 ret = tty_write_lock(tty, file->f_flags & O_NDELAY);
0974 if (ret < 0)
0975 return ret;
0976
0977
0978
0979
0980
0981
0982
0983
0984
0985
0986
0987
0988
0989
0990 chunk = 2048;
0991 if (test_bit(TTY_NO_WRITE_SPLIT, &tty->flags))
0992 chunk = 65536;
0993 if (count < chunk)
0994 chunk = count;
0995
0996
0997 if (tty->write_cnt < chunk) {
0998 unsigned char *buf_chunk;
0999
1000 if (chunk < 1024)
1001 chunk = 1024;
1002
1003 buf_chunk = kvmalloc(chunk, GFP_KERNEL | __GFP_RETRY_MAYFAIL);
1004 if (!buf_chunk) {
1005 ret = -ENOMEM;
1006 goto out;
1007 }
1008 kvfree(tty->write_buf);
1009 tty->write_cnt = chunk;
1010 tty->write_buf = buf_chunk;
1011 }
1012
1013
1014 for (;;) {
1015 size_t size = count;
1016
1017 if (size > chunk)
1018 size = chunk;
1019
1020 ret = -EFAULT;
1021 if (copy_from_iter(tty->write_buf, size, from) != size)
1022 break;
1023
1024 ret = write(tty, file, tty->write_buf, size);
1025 if (ret <= 0)
1026 break;
1027
1028 written += ret;
1029 if (ret > size)
1030 break;
1031
1032
1033 if (ret != size)
1034 iov_iter_revert(from, size-ret);
1035
1036 count -= ret;
1037 if (!count)
1038 break;
1039 ret = -ERESTARTSYS;
1040 if (signal_pending(current))
1041 break;
1042 cond_resched();
1043 }
1044 if (written) {
1045 tty_update_time(&file_inode(file)->i_mtime);
1046 ret = written;
1047 }
1048 out:
1049 tty_write_unlock(tty);
1050 return ret;
1051 }
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064 void tty_write_message(struct tty_struct *tty, char *msg)
1065 {
1066 if (tty) {
1067 mutex_lock(&tty->atomic_write_lock);
1068 tty_lock(tty);
1069 if (tty->ops->write && tty->count > 0)
1070 tty->ops->write(tty, msg, strlen(msg));
1071 tty_unlock(tty);
1072 tty_write_unlock(tty);
1073 }
1074 }
1075
1076 static ssize_t file_tty_write(struct file *file, struct kiocb *iocb, struct iov_iter *from)
1077 {
1078 struct tty_struct *tty = file_tty(file);
1079 struct tty_ldisc *ld;
1080 ssize_t ret;
1081
1082 if (tty_paranoia_check(tty, file_inode(file), "tty_write"))
1083 return -EIO;
1084 if (!tty || !tty->ops->write || tty_io_error(tty))
1085 return -EIO;
1086
1087 if (tty->ops->write_room == NULL)
1088 tty_err(tty, "missing write_room method\n");
1089 ld = tty_ldisc_ref_wait(tty);
1090 if (!ld)
1091 return hung_up_tty_write(iocb, from);
1092 if (!ld->ops->write)
1093 ret = -EIO;
1094 else
1095 ret = do_tty_write(ld->ops->write, tty, file, from);
1096 tty_ldisc_deref(ld);
1097 return ret;
1098 }
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114 static ssize_t tty_write(struct kiocb *iocb, struct iov_iter *from)
1115 {
1116 return file_tty_write(iocb->ki_filp, iocb, from);
1117 }
1118
1119 ssize_t redirected_tty_write(struct kiocb *iocb, struct iov_iter *iter)
1120 {
1121 struct file *p = NULL;
1122
1123 spin_lock(&redirect_lock);
1124 if (redirect)
1125 p = get_file(redirect);
1126 spin_unlock(&redirect_lock);
1127
1128
1129
1130
1131
1132 if (p) {
1133 ssize_t res;
1134
1135 res = file_tty_write(p, iocb, iter);
1136 fput(p);
1137 return res;
1138 }
1139 return tty_write(iocb, iter);
1140 }
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151 int tty_send_xchar(struct tty_struct *tty, char ch)
1152 {
1153 bool was_stopped = tty->flow.stopped;
1154
1155 if (tty->ops->send_xchar) {
1156 down_read(&tty->termios_rwsem);
1157 tty->ops->send_xchar(tty, ch);
1158 up_read(&tty->termios_rwsem);
1159 return 0;
1160 }
1161
1162 if (tty_write_lock(tty, 0) < 0)
1163 return -ERESTARTSYS;
1164
1165 down_read(&tty->termios_rwsem);
1166 if (was_stopped)
1167 start_tty(tty);
1168 tty->ops->write(tty, &ch, 1);
1169 if (was_stopped)
1170 stop_tty(tty);
1171 up_read(&tty->termios_rwsem);
1172 tty_write_unlock(tty);
1173 return 0;
1174 }
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187 static void pty_line_name(struct tty_driver *driver, int index, char *p)
1188 {
1189 static const char ptychar[] = "pqrstuvwxyzabcde";
1190 int i = index + driver->name_base;
1191
1192 sprintf(p, "%s%c%x",
1193 driver->subtype == PTY_TYPE_SLAVE ? "tty" : driver->name,
1194 ptychar[i >> 4 & 0xf], i & 0xf);
1195 }
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208 static ssize_t tty_line_name(struct tty_driver *driver, int index, char *p)
1209 {
1210 if (driver->flags & TTY_DRIVER_UNNUMBERED_NODE)
1211 return sprintf(p, "%s", driver->name);
1212 else
1213 return sprintf(p, "%s%d", driver->name,
1214 index + driver->name_base);
1215 }
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228 static struct tty_struct *tty_driver_lookup_tty(struct tty_driver *driver,
1229 struct file *file, int idx)
1230 {
1231 struct tty_struct *tty;
1232
1233 if (driver->ops->lookup)
1234 if (!file)
1235 tty = ERR_PTR(-EIO);
1236 else
1237 tty = driver->ops->lookup(driver, file, idx);
1238 else
1239 tty = driver->ttys[idx];
1240
1241 if (!IS_ERR(tty))
1242 tty_kref_get(tty);
1243 return tty;
1244 }
1245
1246
1247
1248
1249
1250
1251
1252
1253 void tty_init_termios(struct tty_struct *tty)
1254 {
1255 struct ktermios *tp;
1256 int idx = tty->index;
1257
1258 if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS)
1259 tty->termios = tty->driver->init_termios;
1260 else {
1261
1262 tp = tty->driver->termios[idx];
1263 if (tp != NULL) {
1264 tty->termios = *tp;
1265 tty->termios.c_line = tty->driver->init_termios.c_line;
1266 } else
1267 tty->termios = tty->driver->init_termios;
1268 }
1269
1270 tty->termios.c_ispeed = tty_termios_input_baud_rate(&tty->termios);
1271 tty->termios.c_ospeed = tty_termios_baud_rate(&tty->termios);
1272 }
1273 EXPORT_SYMBOL_GPL(tty_init_termios);
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283 int tty_standard_install(struct tty_driver *driver, struct tty_struct *tty)
1284 {
1285 tty_init_termios(tty);
1286 tty_driver_kref_get(driver);
1287 tty->count++;
1288 driver->ttys[tty->index] = tty;
1289 return 0;
1290 }
1291 EXPORT_SYMBOL_GPL(tty_standard_install);
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304 static int tty_driver_install_tty(struct tty_driver *driver,
1305 struct tty_struct *tty)
1306 {
1307 return driver->ops->install ? driver->ops->install(driver, tty) :
1308 tty_standard_install(driver, tty);
1309 }
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321 static void tty_driver_remove_tty(struct tty_driver *driver, struct tty_struct *tty)
1322 {
1323 if (driver->ops->remove)
1324 driver->ops->remove(driver, tty);
1325 else
1326 driver->ttys[tty->index] = NULL;
1327 }
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338 static int tty_reopen(struct tty_struct *tty)
1339 {
1340 struct tty_driver *driver = tty->driver;
1341 struct tty_ldisc *ld;
1342 int retval = 0;
1343
1344 if (driver->type == TTY_DRIVER_TYPE_PTY &&
1345 driver->subtype == PTY_TYPE_MASTER)
1346 return -EIO;
1347
1348 if (!tty->count)
1349 return -EAGAIN;
1350
1351 if (test_bit(TTY_EXCLUSIVE, &tty->flags) && !capable(CAP_SYS_ADMIN))
1352 return -EBUSY;
1353
1354 ld = tty_ldisc_ref_wait(tty);
1355 if (ld) {
1356 tty_ldisc_deref(ld);
1357 } else {
1358 retval = tty_ldisc_lock(tty, 5 * HZ);
1359 if (retval)
1360 return retval;
1361
1362 if (!tty->ldisc)
1363 retval = tty_ldisc_reinit(tty, tty->termios.c_line);
1364 tty_ldisc_unlock(tty);
1365 }
1366
1367 if (retval == 0)
1368 tty->count++;
1369
1370 return retval;
1371 }
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396 struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx)
1397 {
1398 struct tty_struct *tty;
1399 int retval;
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409 if (!try_module_get(driver->owner))
1410 return ERR_PTR(-ENODEV);
1411
1412 tty = alloc_tty_struct(driver, idx);
1413 if (!tty) {
1414 retval = -ENOMEM;
1415 goto err_module_put;
1416 }
1417
1418 tty_lock(tty);
1419 retval = tty_driver_install_tty(driver, tty);
1420 if (retval < 0)
1421 goto err_free_tty;
1422
1423 if (!tty->port)
1424 tty->port = driver->ports[idx];
1425
1426 if (WARN_RATELIMIT(!tty->port,
1427 "%s: %s driver does not set tty->port. This would crash the kernel. Fix the driver!\n",
1428 __func__, tty->driver->name)) {
1429 retval = -EINVAL;
1430 goto err_release_lock;
1431 }
1432
1433 retval = tty_ldisc_lock(tty, 5 * HZ);
1434 if (retval)
1435 goto err_release_lock;
1436 tty->port->itty = tty;
1437
1438
1439
1440
1441
1442
1443 retval = tty_ldisc_setup(tty, tty->link);
1444 if (retval)
1445 goto err_release_tty;
1446 tty_ldisc_unlock(tty);
1447
1448 return tty;
1449
1450 err_free_tty:
1451 tty_unlock(tty);
1452 free_tty_struct(tty);
1453 err_module_put:
1454 module_put(driver->owner);
1455 return ERR_PTR(retval);
1456
1457
1458 err_release_tty:
1459 tty_ldisc_unlock(tty);
1460 tty_info_ratelimited(tty, "ldisc open failed (%d), clearing slot %d\n",
1461 retval, idx);
1462 err_release_lock:
1463 tty_unlock(tty);
1464 release_tty(tty, idx);
1465 return ERR_PTR(retval);
1466 }
1467
1468
1469
1470
1471
1472
1473
1474 void tty_save_termios(struct tty_struct *tty)
1475 {
1476 struct ktermios *tp;
1477 int idx = tty->index;
1478
1479
1480 if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS)
1481 return;
1482
1483
1484 tp = tty->driver->termios[idx];
1485 if (tp == NULL) {
1486 tp = kmalloc(sizeof(*tp), GFP_KERNEL);
1487 if (tp == NULL)
1488 return;
1489 tty->driver->termios[idx] = tp;
1490 }
1491 *tp = tty->termios;
1492 }
1493 EXPORT_SYMBOL_GPL(tty_save_termios);
1494
1495
1496
1497
1498
1499
1500
1501 static void tty_flush_works(struct tty_struct *tty)
1502 {
1503 flush_work(&tty->SAK_work);
1504 flush_work(&tty->hangup_work);
1505 if (tty->link) {
1506 flush_work(&tty->link->SAK_work);
1507 flush_work(&tty->link->hangup_work);
1508 }
1509 }
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526 static void release_one_tty(struct work_struct *work)
1527 {
1528 struct tty_struct *tty =
1529 container_of(work, struct tty_struct, hangup_work);
1530 struct tty_driver *driver = tty->driver;
1531 struct module *owner = driver->owner;
1532
1533 if (tty->ops->cleanup)
1534 tty->ops->cleanup(tty);
1535
1536 tty->magic = 0;
1537 tty_driver_kref_put(driver);
1538 module_put(owner);
1539
1540 spin_lock(&tty->files_lock);
1541 list_del_init(&tty->tty_files);
1542 spin_unlock(&tty->files_lock);
1543
1544 put_pid(tty->ctrl.pgrp);
1545 put_pid(tty->ctrl.session);
1546 free_tty_struct(tty);
1547 }
1548
1549 static void queue_release_one_tty(struct kref *kref)
1550 {
1551 struct tty_struct *tty = container_of(kref, struct tty_struct, kref);
1552
1553
1554
1555
1556 INIT_WORK(&tty->hangup_work, release_one_tty);
1557 schedule_work(&tty->hangup_work);
1558 }
1559
1560
1561
1562
1563
1564
1565
1566
1567 void tty_kref_put(struct tty_struct *tty)
1568 {
1569 if (tty)
1570 kref_put(&tty->kref, queue_release_one_tty);
1571 }
1572 EXPORT_SYMBOL(tty_kref_put);
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587 static void release_tty(struct tty_struct *tty, int idx)
1588 {
1589
1590 WARN_ON(tty->index != idx);
1591 WARN_ON(!mutex_is_locked(&tty_mutex));
1592 if (tty->ops->shutdown)
1593 tty->ops->shutdown(tty);
1594 tty_save_termios(tty);
1595 tty_driver_remove_tty(tty->driver, tty);
1596 if (tty->port)
1597 tty->port->itty = NULL;
1598 if (tty->link)
1599 tty->link->port->itty = NULL;
1600 if (tty->port)
1601 tty_buffer_cancel_work(tty->port);
1602 if (tty->link)
1603 tty_buffer_cancel_work(tty->link->port);
1604
1605 tty_kref_put(tty->link);
1606 tty_kref_put(tty);
1607 }
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617 static int tty_release_checks(struct tty_struct *tty, int idx)
1618 {
1619 #ifdef TTY_PARANOIA_CHECK
1620 if (idx < 0 || idx >= tty->driver->num) {
1621 tty_debug(tty, "bad idx %d\n", idx);
1622 return -1;
1623 }
1624
1625
1626 if (tty->driver->flags & TTY_DRIVER_DEVPTS_MEM)
1627 return 0;
1628
1629 if (tty != tty->driver->ttys[idx]) {
1630 tty_debug(tty, "bad driver table[%d] = %p\n",
1631 idx, tty->driver->ttys[idx]);
1632 return -1;
1633 }
1634 if (tty->driver->other) {
1635 struct tty_struct *o_tty = tty->link;
1636
1637 if (o_tty != tty->driver->other->ttys[idx]) {
1638 tty_debug(tty, "bad other table[%d] = %p\n",
1639 idx, tty->driver->other->ttys[idx]);
1640 return -1;
1641 }
1642 if (o_tty->link != tty) {
1643 tty_debug(tty, "bad link = %p\n", o_tty->link);
1644 return -1;
1645 }
1646 }
1647 #endif
1648 return 0;
1649 }
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659 void tty_kclose(struct tty_struct *tty)
1660 {
1661
1662
1663
1664 tty_ldisc_release(tty);
1665
1666
1667 tty_flush_works(tty);
1668
1669 tty_debug_hangup(tty, "freeing structure\n");
1670
1671
1672
1673
1674 mutex_lock(&tty_mutex);
1675 tty_port_set_kopened(tty->port, 0);
1676 release_tty(tty, tty->index);
1677 mutex_unlock(&tty_mutex);
1678 }
1679 EXPORT_SYMBOL_GPL(tty_kclose);
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689 void tty_release_struct(struct tty_struct *tty, int idx)
1690 {
1691
1692
1693
1694 tty_ldisc_release(tty);
1695
1696
1697 tty_flush_works(tty);
1698
1699 tty_debug_hangup(tty, "freeing structure\n");
1700
1701
1702
1703
1704 mutex_lock(&tty_mutex);
1705 release_tty(tty, idx);
1706 mutex_unlock(&tty_mutex);
1707 }
1708 EXPORT_SYMBOL_GPL(tty_release_struct);
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728 int tty_release(struct inode *inode, struct file *filp)
1729 {
1730 struct tty_struct *tty = file_tty(filp);
1731 struct tty_struct *o_tty = NULL;
1732 int do_sleep, final;
1733 int idx;
1734 long timeout = 0;
1735 int once = 1;
1736
1737 if (tty_paranoia_check(tty, inode, __func__))
1738 return 0;
1739
1740 tty_lock(tty);
1741 check_tty_count(tty, __func__);
1742
1743 __tty_fasync(-1, filp, 0);
1744
1745 idx = tty->index;
1746 if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
1747 tty->driver->subtype == PTY_TYPE_MASTER)
1748 o_tty = tty->link;
1749
1750 if (tty_release_checks(tty, idx)) {
1751 tty_unlock(tty);
1752 return 0;
1753 }
1754
1755 tty_debug_hangup(tty, "releasing (count=%d)\n", tty->count);
1756
1757 if (tty->ops->close)
1758 tty->ops->close(tty, filp);
1759
1760
1761 tty_lock_slave(o_tty);
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776 while (1) {
1777 do_sleep = 0;
1778
1779 if (tty->count <= 1) {
1780 if (waitqueue_active(&tty->read_wait)) {
1781 wake_up_poll(&tty->read_wait, EPOLLIN);
1782 do_sleep++;
1783 }
1784 if (waitqueue_active(&tty->write_wait)) {
1785 wake_up_poll(&tty->write_wait, EPOLLOUT);
1786 do_sleep++;
1787 }
1788 }
1789 if (o_tty && o_tty->count <= 1) {
1790 if (waitqueue_active(&o_tty->read_wait)) {
1791 wake_up_poll(&o_tty->read_wait, EPOLLIN);
1792 do_sleep++;
1793 }
1794 if (waitqueue_active(&o_tty->write_wait)) {
1795 wake_up_poll(&o_tty->write_wait, EPOLLOUT);
1796 do_sleep++;
1797 }
1798 }
1799 if (!do_sleep)
1800 break;
1801
1802 if (once) {
1803 once = 0;
1804 tty_warn(tty, "read/write wait queue active!\n");
1805 }
1806 schedule_timeout_killable(timeout);
1807 if (timeout < 120 * HZ)
1808 timeout = 2 * timeout + 1;
1809 else
1810 timeout = MAX_SCHEDULE_TIMEOUT;
1811 }
1812
1813 if (o_tty) {
1814 if (--o_tty->count < 0) {
1815 tty_warn(tty, "bad slave count (%d)\n", o_tty->count);
1816 o_tty->count = 0;
1817 }
1818 }
1819 if (--tty->count < 0) {
1820 tty_warn(tty, "bad tty->count (%d)\n", tty->count);
1821 tty->count = 0;
1822 }
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833 tty_del_file(filp);
1834
1835
1836
1837
1838
1839
1840
1841
1842 if (!tty->count) {
1843 read_lock(&tasklist_lock);
1844 session_clear_tty(tty->ctrl.session);
1845 if (o_tty)
1846 session_clear_tty(o_tty->ctrl.session);
1847 read_unlock(&tasklist_lock);
1848 }
1849
1850
1851 final = !tty->count && !(o_tty && o_tty->count);
1852
1853 tty_unlock_slave(o_tty);
1854 tty_unlock(tty);
1855
1856
1857
1858
1859
1860 if (!final)
1861 return 0;
1862
1863 tty_debug_hangup(tty, "final close\n");
1864
1865 tty_release_struct(tty, idx);
1866 return 0;
1867 }
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880 static struct tty_struct *tty_open_current_tty(dev_t device, struct file *filp)
1881 {
1882 struct tty_struct *tty;
1883 int retval;
1884
1885 if (device != MKDEV(TTYAUX_MAJOR, 0))
1886 return NULL;
1887
1888 tty = get_current_tty();
1889 if (!tty)
1890 return ERR_PTR(-ENXIO);
1891
1892 filp->f_flags |= O_NONBLOCK;
1893
1894 tty_lock(tty);
1895 tty_kref_put(tty);
1896
1897 retval = tty_reopen(tty);
1898 if (retval < 0) {
1899 tty_unlock(tty);
1900 tty = ERR_PTR(retval);
1901 }
1902 return tty;
1903 }
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918 static struct tty_driver *tty_lookup_driver(dev_t device, struct file *filp,
1919 int *index)
1920 {
1921 struct tty_driver *driver = NULL;
1922
1923 switch (device) {
1924 #ifdef CONFIG_VT
1925 case MKDEV(TTY_MAJOR, 0): {
1926 extern struct tty_driver *console_driver;
1927
1928 driver = tty_driver_kref_get(console_driver);
1929 *index = fg_console;
1930 break;
1931 }
1932 #endif
1933 case MKDEV(TTYAUX_MAJOR, 1): {
1934 struct tty_driver *console_driver = console_device(index);
1935
1936 if (console_driver) {
1937 driver = tty_driver_kref_get(console_driver);
1938 if (driver && filp) {
1939
1940 filp->f_flags |= O_NONBLOCK;
1941 break;
1942 }
1943 }
1944 if (driver)
1945 tty_driver_kref_put(driver);
1946 return ERR_PTR(-ENODEV);
1947 }
1948 default:
1949 driver = get_tty_driver(device, index);
1950 if (!driver)
1951 return ERR_PTR(-ENODEV);
1952 break;
1953 }
1954 return driver;
1955 }
1956
1957 static struct tty_struct *tty_kopen(dev_t device, int shared)
1958 {
1959 struct tty_struct *tty;
1960 struct tty_driver *driver;
1961 int index = -1;
1962
1963 mutex_lock(&tty_mutex);
1964 driver = tty_lookup_driver(device, NULL, &index);
1965 if (IS_ERR(driver)) {
1966 mutex_unlock(&tty_mutex);
1967 return ERR_CAST(driver);
1968 }
1969
1970
1971 tty = tty_driver_lookup_tty(driver, NULL, index);
1972 if (IS_ERR(tty) || shared)
1973 goto out;
1974
1975 if (tty) {
1976
1977 tty_kref_put(tty);
1978 tty = ERR_PTR(-EBUSY);
1979 } else {
1980 tty = tty_init_dev(driver, index);
1981 if (IS_ERR(tty))
1982 goto out;
1983 tty_port_set_kopened(tty->port, 1);
1984 }
1985 out:
1986 mutex_unlock(&tty_mutex);
1987 tty_driver_kref_put(driver);
1988 return tty;
1989 }
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005 struct tty_struct *tty_kopen_exclusive(dev_t device)
2006 {
2007 return tty_kopen(device, 0);
2008 }
2009 EXPORT_SYMBOL_GPL(tty_kopen_exclusive);
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020 struct tty_struct *tty_kopen_shared(dev_t device)
2021 {
2022 return tty_kopen(device, 1);
2023 }
2024 EXPORT_SYMBOL_GPL(tty_kopen_shared);
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042 static struct tty_struct *tty_open_by_driver(dev_t device,
2043 struct file *filp)
2044 {
2045 struct tty_struct *tty;
2046 struct tty_driver *driver = NULL;
2047 int index = -1;
2048 int retval;
2049
2050 mutex_lock(&tty_mutex);
2051 driver = tty_lookup_driver(device, filp, &index);
2052 if (IS_ERR(driver)) {
2053 mutex_unlock(&tty_mutex);
2054 return ERR_CAST(driver);
2055 }
2056
2057
2058 tty = tty_driver_lookup_tty(driver, filp, index);
2059 if (IS_ERR(tty)) {
2060 mutex_unlock(&tty_mutex);
2061 goto out;
2062 }
2063
2064 if (tty) {
2065 if (tty_port_kopened(tty->port)) {
2066 tty_kref_put(tty);
2067 mutex_unlock(&tty_mutex);
2068 tty = ERR_PTR(-EBUSY);
2069 goto out;
2070 }
2071 mutex_unlock(&tty_mutex);
2072 retval = tty_lock_interruptible(tty);
2073 tty_kref_put(tty);
2074 if (retval) {
2075 if (retval == -EINTR)
2076 retval = -ERESTARTSYS;
2077 tty = ERR_PTR(retval);
2078 goto out;
2079 }
2080 retval = tty_reopen(tty);
2081 if (retval < 0) {
2082 tty_unlock(tty);
2083 tty = ERR_PTR(retval);
2084 }
2085 } else {
2086 tty = tty_init_dev(driver, index);
2087 mutex_unlock(&tty_mutex);
2088 }
2089 out:
2090 tty_driver_kref_put(driver);
2091 return tty;
2092 }
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117 static int tty_open(struct inode *inode, struct file *filp)
2118 {
2119 struct tty_struct *tty;
2120 int noctty, retval;
2121 dev_t device = inode->i_rdev;
2122 unsigned saved_flags = filp->f_flags;
2123
2124 nonseekable_open(inode, filp);
2125
2126 retry_open:
2127 retval = tty_alloc_file(filp);
2128 if (retval)
2129 return -ENOMEM;
2130
2131 tty = tty_open_current_tty(device, filp);
2132 if (!tty)
2133 tty = tty_open_by_driver(device, filp);
2134
2135 if (IS_ERR(tty)) {
2136 tty_free_file(filp);
2137 retval = PTR_ERR(tty);
2138 if (retval != -EAGAIN || signal_pending(current))
2139 return retval;
2140 schedule();
2141 goto retry_open;
2142 }
2143
2144 tty_add_file(tty, filp);
2145
2146 check_tty_count(tty, __func__);
2147 tty_debug_hangup(tty, "opening (count=%d)\n", tty->count);
2148
2149 if (tty->ops->open)
2150 retval = tty->ops->open(tty, filp);
2151 else
2152 retval = -ENODEV;
2153 filp->f_flags = saved_flags;
2154
2155 if (retval) {
2156 tty_debug_hangup(tty, "open error %d, releasing\n", retval);
2157
2158 tty_unlock(tty);
2159 tty_release(inode, filp);
2160 if (retval != -ERESTARTSYS)
2161 return retval;
2162
2163 if (signal_pending(current))
2164 return retval;
2165
2166 schedule();
2167
2168
2169
2170 if (tty_hung_up_p(filp))
2171 filp->f_op = &tty_fops;
2172 goto retry_open;
2173 }
2174 clear_bit(TTY_HUPPED, &tty->flags);
2175
2176 noctty = (filp->f_flags & O_NOCTTY) ||
2177 (IS_ENABLED(CONFIG_VT) && device == MKDEV(TTY_MAJOR, 0)) ||
2178 device == MKDEV(TTYAUX_MAJOR, 1) ||
2179 (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
2180 tty->driver->subtype == PTY_TYPE_MASTER);
2181 if (!noctty)
2182 tty_open_proc_set_tty(filp, tty);
2183 tty_unlock(tty);
2184 return 0;
2185 }
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199 static __poll_t tty_poll(struct file *filp, poll_table *wait)
2200 {
2201 struct tty_struct *tty = file_tty(filp);
2202 struct tty_ldisc *ld;
2203 __poll_t ret = 0;
2204
2205 if (tty_paranoia_check(tty, file_inode(filp), "tty_poll"))
2206 return 0;
2207
2208 ld = tty_ldisc_ref_wait(tty);
2209 if (!ld)
2210 return hung_up_tty_poll(filp, wait);
2211 if (ld->ops->poll)
2212 ret = ld->ops->poll(tty, filp, wait);
2213 tty_ldisc_deref(ld);
2214 return ret;
2215 }
2216
2217 static int __tty_fasync(int fd, struct file *filp, int on)
2218 {
2219 struct tty_struct *tty = file_tty(filp);
2220 unsigned long flags;
2221 int retval = 0;
2222
2223 if (tty_paranoia_check(tty, file_inode(filp), "tty_fasync"))
2224 goto out;
2225
2226 retval = fasync_helper(fd, filp, on, &tty->fasync);
2227 if (retval <= 0)
2228 goto out;
2229
2230 if (on) {
2231 enum pid_type type;
2232 struct pid *pid;
2233
2234 spin_lock_irqsave(&tty->ctrl.lock, flags);
2235 if (tty->ctrl.pgrp) {
2236 pid = tty->ctrl.pgrp;
2237 type = PIDTYPE_PGID;
2238 } else {
2239 pid = task_pid(current);
2240 type = PIDTYPE_TGID;
2241 }
2242 get_pid(pid);
2243 spin_unlock_irqrestore(&tty->ctrl.lock, flags);
2244 __f_setown(filp, pid, type, 0);
2245 put_pid(pid);
2246 retval = 0;
2247 }
2248 out:
2249 return retval;
2250 }
2251
2252 static int tty_fasync(int fd, struct file *filp, int on)
2253 {
2254 struct tty_struct *tty = file_tty(filp);
2255 int retval = -ENOTTY;
2256
2257 tty_lock(tty);
2258 if (!tty_hung_up_p(filp))
2259 retval = __tty_fasync(fd, filp, on);
2260 tty_unlock(tty);
2261
2262 return retval;
2263 }
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278 static int tiocsti(struct tty_struct *tty, char __user *p)
2279 {
2280 char ch, mbz = 0;
2281 struct tty_ldisc *ld;
2282
2283 if ((current->signal->tty != tty) && !capable(CAP_SYS_ADMIN))
2284 return -EPERM;
2285 if (get_user(ch, p))
2286 return -EFAULT;
2287 tty_audit_tiocsti(tty, ch);
2288 ld = tty_ldisc_ref_wait(tty);
2289 if (!ld)
2290 return -EIO;
2291 tty_buffer_lock_exclusive(tty->port);
2292 if (ld->ops->receive_buf)
2293 ld->ops->receive_buf(tty, &ch, &mbz, 1);
2294 tty_buffer_unlock_exclusive(tty->port);
2295 tty_ldisc_deref(ld);
2296 return 0;
2297 }
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309 static int tiocgwinsz(struct tty_struct *tty, struct winsize __user *arg)
2310 {
2311 int err;
2312
2313 mutex_lock(&tty->winsize_mutex);
2314 err = copy_to_user(arg, &tty->winsize, sizeof(*arg));
2315 mutex_unlock(&tty->winsize_mutex);
2316
2317 return err ? -EFAULT : 0;
2318 }
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328 int tty_do_resize(struct tty_struct *tty, struct winsize *ws)
2329 {
2330 struct pid *pgrp;
2331
2332
2333 mutex_lock(&tty->winsize_mutex);
2334 if (!memcmp(ws, &tty->winsize, sizeof(*ws)))
2335 goto done;
2336
2337
2338 pgrp = tty_get_pgrp(tty);
2339 if (pgrp)
2340 kill_pgrp(pgrp, SIGWINCH, 1);
2341 put_pid(pgrp);
2342
2343 tty->winsize = *ws;
2344 done:
2345 mutex_unlock(&tty->winsize_mutex);
2346 return 0;
2347 }
2348 EXPORT_SYMBOL(tty_do_resize);
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364 static int tiocswinsz(struct tty_struct *tty, struct winsize __user *arg)
2365 {
2366 struct winsize tmp_ws;
2367
2368 if (copy_from_user(&tmp_ws, arg, sizeof(*arg)))
2369 return -EFAULT;
2370
2371 if (tty->ops->resize)
2372 return tty->ops->resize(tty, &tmp_ws);
2373 else
2374 return tty_do_resize(tty, &tmp_ws);
2375 }
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385 static int tioccons(struct file *file)
2386 {
2387 if (!capable(CAP_SYS_ADMIN))
2388 return -EPERM;
2389 if (file->f_op->write_iter == redirected_tty_write) {
2390 struct file *f;
2391
2392 spin_lock(&redirect_lock);
2393 f = redirect;
2394 redirect = NULL;
2395 spin_unlock(&redirect_lock);
2396 if (f)
2397 fput(f);
2398 return 0;
2399 }
2400 if (file->f_op->write_iter != tty_write)
2401 return -ENOTTY;
2402 if (!(file->f_mode & FMODE_WRITE))
2403 return -EBADF;
2404 if (!(file->f_mode & FMODE_CAN_WRITE))
2405 return -EINVAL;
2406 spin_lock(&redirect_lock);
2407 if (redirect) {
2408 spin_unlock(&redirect_lock);
2409 return -EBUSY;
2410 }
2411 redirect = get_file(file);
2412 spin_unlock(&redirect_lock);
2413 return 0;
2414 }
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425 static int tiocsetd(struct tty_struct *tty, int __user *p)
2426 {
2427 int disc;
2428 int ret;
2429
2430 if (get_user(disc, p))
2431 return -EFAULT;
2432
2433 ret = tty_set_ldisc(tty, disc);
2434
2435 return ret;
2436 }
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448 static int tiocgetd(struct tty_struct *tty, int __user *p)
2449 {
2450 struct tty_ldisc *ld;
2451 int ret;
2452
2453 ld = tty_ldisc_ref_wait(tty);
2454 if (!ld)
2455 return -EIO;
2456 ret = put_user(ld->ops->num, p);
2457 tty_ldisc_deref(ld);
2458 return ret;
2459 }
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472 static int send_break(struct tty_struct *tty, unsigned int duration)
2473 {
2474 int retval;
2475
2476 if (tty->ops->break_ctl == NULL)
2477 return 0;
2478
2479 if (tty->driver->flags & TTY_DRIVER_HARDWARE_BREAK)
2480 retval = tty->ops->break_ctl(tty, duration);
2481 else {
2482
2483 if (tty_write_lock(tty, 0) < 0)
2484 return -EINTR;
2485 retval = tty->ops->break_ctl(tty, -1);
2486 if (retval)
2487 goto out;
2488 if (!signal_pending(current))
2489 msleep_interruptible(duration);
2490 retval = tty->ops->break_ctl(tty, 0);
2491 out:
2492 tty_write_unlock(tty);
2493 if (signal_pending(current))
2494 retval = -EINTR;
2495 }
2496 return retval;
2497 }
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509 static int tty_tiocmget(struct tty_struct *tty, int __user *p)
2510 {
2511 int retval = -ENOTTY;
2512
2513 if (tty->ops->tiocmget) {
2514 retval = tty->ops->tiocmget(tty);
2515
2516 if (retval >= 0)
2517 retval = put_user(retval, p);
2518 }
2519 return retval;
2520 }
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533 static int tty_tiocmset(struct tty_struct *tty, unsigned int cmd,
2534 unsigned __user *p)
2535 {
2536 int retval;
2537 unsigned int set, clear, val;
2538
2539 if (tty->ops->tiocmset == NULL)
2540 return -ENOTTY;
2541
2542 retval = get_user(val, p);
2543 if (retval)
2544 return retval;
2545 set = clear = 0;
2546 switch (cmd) {
2547 case TIOCMBIS:
2548 set = val;
2549 break;
2550 case TIOCMBIC:
2551 clear = val;
2552 break;
2553 case TIOCMSET:
2554 set = val;
2555 clear = ~val;
2556 break;
2557 }
2558 set &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP;
2559 clear &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP;
2560 return tty->ops->tiocmset(tty, set, clear);
2561 }
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572 int tty_get_icount(struct tty_struct *tty,
2573 struct serial_icounter_struct *icount)
2574 {
2575 memset(icount, 0, sizeof(*icount));
2576
2577 if (tty->ops->get_icount)
2578 return tty->ops->get_icount(tty, icount);
2579 else
2580 return -ENOTTY;
2581 }
2582 EXPORT_SYMBOL_GPL(tty_get_icount);
2583
2584 static int tty_tiocgicount(struct tty_struct *tty, void __user *arg)
2585 {
2586 struct serial_icounter_struct icount;
2587 int retval;
2588
2589 retval = tty_get_icount(tty, &icount);
2590 if (retval != 0)
2591 return retval;
2592
2593 if (copy_to_user(arg, &icount, sizeof(icount)))
2594 return -EFAULT;
2595 return 0;
2596 }
2597
2598 static int tty_set_serial(struct tty_struct *tty, struct serial_struct *ss)
2599 {
2600 char comm[TASK_COMM_LEN];
2601 int flags;
2602
2603 flags = ss->flags & ASYNC_DEPRECATED;
2604
2605 if (flags)
2606 pr_warn_ratelimited("%s: '%s' is using deprecated serial flags (with no effect): %.8x\n",
2607 __func__, get_task_comm(comm, current), flags);
2608
2609 if (!tty->ops->set_serial)
2610 return -ENOTTY;
2611
2612 return tty->ops->set_serial(tty, ss);
2613 }
2614
2615 static int tty_tiocsserial(struct tty_struct *tty, struct serial_struct __user *ss)
2616 {
2617 struct serial_struct v;
2618
2619 if (copy_from_user(&v, ss, sizeof(*ss)))
2620 return -EFAULT;
2621
2622 return tty_set_serial(tty, &v);
2623 }
2624
2625 static int tty_tiocgserial(struct tty_struct *tty, struct serial_struct __user *ss)
2626 {
2627 struct serial_struct v;
2628 int err;
2629
2630 memset(&v, 0, sizeof(v));
2631 if (!tty->ops->get_serial)
2632 return -ENOTTY;
2633 err = tty->ops->get_serial(tty, &v);
2634 if (!err && copy_to_user(ss, &v, sizeof(v)))
2635 err = -EFAULT;
2636 return err;
2637 }
2638
2639
2640
2641
2642
2643 static struct tty_struct *tty_pair_get_tty(struct tty_struct *tty)
2644 {
2645 if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
2646 tty->driver->subtype == PTY_TYPE_MASTER)
2647 tty = tty->link;
2648 return tty;
2649 }
2650
2651
2652
2653
2654 long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
2655 {
2656 struct tty_struct *tty = file_tty(file);
2657 struct tty_struct *real_tty;
2658 void __user *p = (void __user *)arg;
2659 int retval;
2660 struct tty_ldisc *ld;
2661
2662 if (tty_paranoia_check(tty, file_inode(file), "tty_ioctl"))
2663 return -EINVAL;
2664
2665 real_tty = tty_pair_get_tty(tty);
2666
2667
2668
2669
2670 switch (cmd) {
2671 case TIOCSETD:
2672 case TIOCSBRK:
2673 case TIOCCBRK:
2674 case TCSBRK:
2675 case TCSBRKP:
2676 retval = tty_check_change(tty);
2677 if (retval)
2678 return retval;
2679 if (cmd != TIOCCBRK) {
2680 tty_wait_until_sent(tty, 0);
2681 if (signal_pending(current))
2682 return -EINTR;
2683 }
2684 break;
2685 }
2686
2687
2688
2689
2690 switch (cmd) {
2691 case TIOCSTI:
2692 return tiocsti(tty, p);
2693 case TIOCGWINSZ:
2694 return tiocgwinsz(real_tty, p);
2695 case TIOCSWINSZ:
2696 return tiocswinsz(real_tty, p);
2697 case TIOCCONS:
2698 return real_tty != tty ? -EINVAL : tioccons(file);
2699 case TIOCEXCL:
2700 set_bit(TTY_EXCLUSIVE, &tty->flags);
2701 return 0;
2702 case TIOCNXCL:
2703 clear_bit(TTY_EXCLUSIVE, &tty->flags);
2704 return 0;
2705 case TIOCGEXCL:
2706 {
2707 int excl = test_bit(TTY_EXCLUSIVE, &tty->flags);
2708
2709 return put_user(excl, (int __user *)p);
2710 }
2711 case TIOCGETD:
2712 return tiocgetd(tty, p);
2713 case TIOCSETD:
2714 return tiocsetd(tty, p);
2715 case TIOCVHANGUP:
2716 if (!capable(CAP_SYS_ADMIN))
2717 return -EPERM;
2718 tty_vhangup(tty);
2719 return 0;
2720 case TIOCGDEV:
2721 {
2722 unsigned int ret = new_encode_dev(tty_devnum(real_tty));
2723
2724 return put_user(ret, (unsigned int __user *)p);
2725 }
2726
2727
2728
2729 case TIOCSBRK:
2730 if (tty->ops->break_ctl)
2731 return tty->ops->break_ctl(tty, -1);
2732 return 0;
2733 case TIOCCBRK:
2734 if (tty->ops->break_ctl)
2735 return tty->ops->break_ctl(tty, 0);
2736 return 0;
2737 case TCSBRK:
2738
2739
2740
2741
2742 if (!arg)
2743 return send_break(tty, 250);
2744 return 0;
2745 case TCSBRKP:
2746 return send_break(tty, arg ? arg*100 : 250);
2747
2748 case TIOCMGET:
2749 return tty_tiocmget(tty, p);
2750 case TIOCMSET:
2751 case TIOCMBIC:
2752 case TIOCMBIS:
2753 return tty_tiocmset(tty, cmd, p);
2754 case TIOCGICOUNT:
2755 return tty_tiocgicount(tty, p);
2756 case TCFLSH:
2757 switch (arg) {
2758 case TCIFLUSH:
2759 case TCIOFLUSH:
2760
2761 tty_buffer_flush(tty, NULL);
2762 break;
2763 }
2764 break;
2765 case TIOCSSERIAL:
2766 return tty_tiocsserial(tty, p);
2767 case TIOCGSERIAL:
2768 return tty_tiocgserial(tty, p);
2769 case TIOCGPTPEER:
2770
2771 return ptm_open_peer(file, tty, (int)arg);
2772 default:
2773 retval = tty_jobctrl_ioctl(tty, real_tty, file, cmd, arg);
2774 if (retval != -ENOIOCTLCMD)
2775 return retval;
2776 }
2777 if (tty->ops->ioctl) {
2778 retval = tty->ops->ioctl(tty, cmd, arg);
2779 if (retval != -ENOIOCTLCMD)
2780 return retval;
2781 }
2782 ld = tty_ldisc_ref_wait(tty);
2783 if (!ld)
2784 return hung_up_tty_ioctl(file, cmd, arg);
2785 retval = -EINVAL;
2786 if (ld->ops->ioctl) {
2787 retval = ld->ops->ioctl(tty, cmd, arg);
2788 if (retval == -ENOIOCTLCMD)
2789 retval = -ENOTTY;
2790 }
2791 tty_ldisc_deref(ld);
2792 return retval;
2793 }
2794
2795 #ifdef CONFIG_COMPAT
2796
2797 struct serial_struct32 {
2798 compat_int_t type;
2799 compat_int_t line;
2800 compat_uint_t port;
2801 compat_int_t irq;
2802 compat_int_t flags;
2803 compat_int_t xmit_fifo_size;
2804 compat_int_t custom_divisor;
2805 compat_int_t baud_base;
2806 unsigned short close_delay;
2807 char io_type;
2808 char reserved_char;
2809 compat_int_t hub6;
2810 unsigned short closing_wait;
2811 unsigned short closing_wait2;
2812 compat_uint_t iomem_base;
2813 unsigned short iomem_reg_shift;
2814 unsigned int port_high;
2815
2816 compat_int_t reserved;
2817 };
2818
2819 static int compat_tty_tiocsserial(struct tty_struct *tty,
2820 struct serial_struct32 __user *ss)
2821 {
2822 struct serial_struct32 v32;
2823 struct serial_struct v;
2824
2825 if (copy_from_user(&v32, ss, sizeof(*ss)))
2826 return -EFAULT;
2827
2828 memcpy(&v, &v32, offsetof(struct serial_struct32, iomem_base));
2829 v.iomem_base = compat_ptr(v32.iomem_base);
2830 v.iomem_reg_shift = v32.iomem_reg_shift;
2831 v.port_high = v32.port_high;
2832 v.iomap_base = 0;
2833
2834 return tty_set_serial(tty, &v);
2835 }
2836
2837 static int compat_tty_tiocgserial(struct tty_struct *tty,
2838 struct serial_struct32 __user *ss)
2839 {
2840 struct serial_struct32 v32;
2841 struct serial_struct v;
2842 int err;
2843
2844 memset(&v, 0, sizeof(v));
2845 memset(&v32, 0, sizeof(v32));
2846
2847 if (!tty->ops->get_serial)
2848 return -ENOTTY;
2849 err = tty->ops->get_serial(tty, &v);
2850 if (!err) {
2851 memcpy(&v32, &v, offsetof(struct serial_struct32, iomem_base));
2852 v32.iomem_base = (unsigned long)v.iomem_base >> 32 ?
2853 0xfffffff : ptr_to_compat(v.iomem_base);
2854 v32.iomem_reg_shift = v.iomem_reg_shift;
2855 v32.port_high = v.port_high;
2856 if (copy_to_user(ss, &v32, sizeof(v32)))
2857 err = -EFAULT;
2858 }
2859 return err;
2860 }
2861 static long tty_compat_ioctl(struct file *file, unsigned int cmd,
2862 unsigned long arg)
2863 {
2864 struct tty_struct *tty = file_tty(file);
2865 struct tty_ldisc *ld;
2866 int retval = -ENOIOCTLCMD;
2867
2868 switch (cmd) {
2869 case TIOCOUTQ:
2870 case TIOCSTI:
2871 case TIOCGWINSZ:
2872 case TIOCSWINSZ:
2873 case TIOCGEXCL:
2874 case TIOCGETD:
2875 case TIOCSETD:
2876 case TIOCGDEV:
2877 case TIOCMGET:
2878 case TIOCMSET:
2879 case TIOCMBIC:
2880 case TIOCMBIS:
2881 case TIOCGICOUNT:
2882 case TIOCGPGRP:
2883 case TIOCSPGRP:
2884 case TIOCGSID:
2885 case TIOCSERGETLSR:
2886 case TIOCGRS485:
2887 case TIOCSRS485:
2888 #ifdef TIOCGETP
2889 case TIOCGETP:
2890 case TIOCSETP:
2891 case TIOCSETN:
2892 #endif
2893 #ifdef TIOCGETC
2894 case TIOCGETC:
2895 case TIOCSETC:
2896 #endif
2897 #ifdef TIOCGLTC
2898 case TIOCGLTC:
2899 case TIOCSLTC:
2900 #endif
2901 case TCSETSF:
2902 case TCSETSW:
2903 case TCSETS:
2904 case TCGETS:
2905 #ifdef TCGETS2
2906 case TCGETS2:
2907 case TCSETSF2:
2908 case TCSETSW2:
2909 case TCSETS2:
2910 #endif
2911 case TCGETA:
2912 case TCSETAF:
2913 case TCSETAW:
2914 case TCSETA:
2915 case TIOCGLCKTRMIOS:
2916 case TIOCSLCKTRMIOS:
2917 #ifdef TCGETX
2918 case TCGETX:
2919 case TCSETX:
2920 case TCSETXW:
2921 case TCSETXF:
2922 #endif
2923 case TIOCGSOFTCAR:
2924 case TIOCSSOFTCAR:
2925
2926 case PPPIOCGCHAN:
2927 case PPPIOCGUNIT:
2928 return tty_ioctl(file, cmd, (unsigned long)compat_ptr(arg));
2929 case TIOCCONS:
2930 case TIOCEXCL:
2931 case TIOCNXCL:
2932 case TIOCVHANGUP:
2933 case TIOCSBRK:
2934 case TIOCCBRK:
2935 case TCSBRK:
2936 case TCSBRKP:
2937 case TCFLSH:
2938 case TIOCGPTPEER:
2939 case TIOCNOTTY:
2940 case TIOCSCTTY:
2941 case TCXONC:
2942 case TIOCMIWAIT:
2943 case TIOCSERCONFIG:
2944 return tty_ioctl(file, cmd, arg);
2945 }
2946
2947 if (tty_paranoia_check(tty, file_inode(file), "tty_ioctl"))
2948 return -EINVAL;
2949
2950 switch (cmd) {
2951 case TIOCSSERIAL:
2952 return compat_tty_tiocsserial(tty, compat_ptr(arg));
2953 case TIOCGSERIAL:
2954 return compat_tty_tiocgserial(tty, compat_ptr(arg));
2955 }
2956 if (tty->ops->compat_ioctl) {
2957 retval = tty->ops->compat_ioctl(tty, cmd, arg);
2958 if (retval != -ENOIOCTLCMD)
2959 return retval;
2960 }
2961
2962 ld = tty_ldisc_ref_wait(tty);
2963 if (!ld)
2964 return hung_up_tty_compat_ioctl(file, cmd, arg);
2965 if (ld->ops->compat_ioctl)
2966 retval = ld->ops->compat_ioctl(tty, cmd, arg);
2967 if (retval == -ENOIOCTLCMD && ld->ops->ioctl)
2968 retval = ld->ops->ioctl(tty, (unsigned long)compat_ptr(cmd),
2969 arg);
2970 tty_ldisc_deref(ld);
2971
2972 return retval;
2973 }
2974 #endif
2975
2976 static int this_tty(const void *t, struct file *file, unsigned fd)
2977 {
2978 if (likely(file->f_op->read_iter != tty_read))
2979 return 0;
2980 return file_tty(file) != t ? 0 : fd + 1;
2981 }
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002 void __do_SAK(struct tty_struct *tty)
3003 {
3004 struct task_struct *g, *p;
3005 struct pid *session;
3006 int i;
3007 unsigned long flags;
3008
3009 spin_lock_irqsave(&tty->ctrl.lock, flags);
3010 session = get_pid(tty->ctrl.session);
3011 spin_unlock_irqrestore(&tty->ctrl.lock, flags);
3012
3013 tty_ldisc_flush(tty);
3014
3015 tty_driver_flush_buffer(tty);
3016
3017 read_lock(&tasklist_lock);
3018
3019 do_each_pid_task(session, PIDTYPE_SID, p) {
3020 tty_notice(tty, "SAK: killed process %d (%s): by session\n",
3021 task_pid_nr(p), p->comm);
3022 group_send_sig_info(SIGKILL, SEND_SIG_PRIV, p, PIDTYPE_SID);
3023 } while_each_pid_task(session, PIDTYPE_SID, p);
3024
3025
3026 do_each_thread(g, p) {
3027 if (p->signal->tty == tty) {
3028 tty_notice(tty, "SAK: killed process %d (%s): by controlling tty\n",
3029 task_pid_nr(p), p->comm);
3030 group_send_sig_info(SIGKILL, SEND_SIG_PRIV, p,
3031 PIDTYPE_SID);
3032 continue;
3033 }
3034 task_lock(p);
3035 i = iterate_fd(p->files, 0, this_tty, tty);
3036 if (i != 0) {
3037 tty_notice(tty, "SAK: killed process %d (%s): by fd#%d\n",
3038 task_pid_nr(p), p->comm, i - 1);
3039 group_send_sig_info(SIGKILL, SEND_SIG_PRIV, p,
3040 PIDTYPE_SID);
3041 }
3042 task_unlock(p);
3043 } while_each_thread(g, p);
3044 read_unlock(&tasklist_lock);
3045 put_pid(session);
3046 }
3047
3048 static void do_SAK_work(struct work_struct *work)
3049 {
3050 struct tty_struct *tty =
3051 container_of(work, struct tty_struct, SAK_work);
3052 __do_SAK(tty);
3053 }
3054
3055
3056
3057
3058
3059
3060
3061 void do_SAK(struct tty_struct *tty)
3062 {
3063 if (!tty)
3064 return;
3065 schedule_work(&tty->SAK_work);
3066 }
3067 EXPORT_SYMBOL(do_SAK);
3068
3069
3070 static struct device *tty_get_device(struct tty_struct *tty)
3071 {
3072 dev_t devt = tty_devnum(tty);
3073
3074 return class_find_device_by_devt(tty_class, devt);
3075 }
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087 struct tty_struct *alloc_tty_struct(struct tty_driver *driver, int idx)
3088 {
3089 struct tty_struct *tty;
3090
3091 tty = kzalloc(sizeof(*tty), GFP_KERNEL_ACCOUNT);
3092 if (!tty)
3093 return NULL;
3094
3095 kref_init(&tty->kref);
3096 tty->magic = TTY_MAGIC;
3097 if (tty_ldisc_init(tty)) {
3098 kfree(tty);
3099 return NULL;
3100 }
3101 tty->ctrl.session = NULL;
3102 tty->ctrl.pgrp = NULL;
3103 mutex_init(&tty->legacy_mutex);
3104 mutex_init(&tty->throttle_mutex);
3105 init_rwsem(&tty->termios_rwsem);
3106 mutex_init(&tty->winsize_mutex);
3107 init_ldsem(&tty->ldisc_sem);
3108 init_waitqueue_head(&tty->write_wait);
3109 init_waitqueue_head(&tty->read_wait);
3110 INIT_WORK(&tty->hangup_work, do_tty_hangup);
3111 mutex_init(&tty->atomic_write_lock);
3112 spin_lock_init(&tty->ctrl.lock);
3113 spin_lock_init(&tty->flow.lock);
3114 spin_lock_init(&tty->files_lock);
3115 INIT_LIST_HEAD(&tty->tty_files);
3116 INIT_WORK(&tty->SAK_work, do_SAK_work);
3117
3118 tty->driver = driver;
3119 tty->ops = driver->ops;
3120 tty->index = idx;
3121 tty_line_name(driver, idx, tty->name);
3122 tty->dev = tty_get_device(tty);
3123
3124 return tty;
3125 }
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140 int tty_put_char(struct tty_struct *tty, unsigned char ch)
3141 {
3142 if (tty->ops->put_char)
3143 return tty->ops->put_char(tty, ch);
3144 return tty->ops->write(tty, &ch, 1);
3145 }
3146 EXPORT_SYMBOL_GPL(tty_put_char);
3147
3148 struct class *tty_class;
3149
3150 static int tty_cdev_add(struct tty_driver *driver, dev_t dev,
3151 unsigned int index, unsigned int count)
3152 {
3153 int err;
3154
3155
3156 driver->cdevs[index] = cdev_alloc();
3157 if (!driver->cdevs[index])
3158 return -ENOMEM;
3159 driver->cdevs[index]->ops = &tty_fops;
3160 driver->cdevs[index]->owner = driver->owner;
3161 err = cdev_add(driver->cdevs[index], dev, count);
3162 if (err)
3163 kobject_put(&driver->cdevs[index]->kobj);
3164 return err;
3165 }
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185 struct device *tty_register_device(struct tty_driver *driver, unsigned index,
3186 struct device *device)
3187 {
3188 return tty_register_device_attr(driver, index, device, NULL, NULL);
3189 }
3190 EXPORT_SYMBOL(tty_register_device);
3191
3192 static void tty_device_create_release(struct device *dev)
3193 {
3194 dev_dbg(dev, "releasing...\n");
3195 kfree(dev);
3196 }
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217 struct device *tty_register_device_attr(struct tty_driver *driver,
3218 unsigned index, struct device *device,
3219 void *drvdata,
3220 const struct attribute_group **attr_grp)
3221 {
3222 char name[64];
3223 dev_t devt = MKDEV(driver->major, driver->minor_start) + index;
3224 struct ktermios *tp;
3225 struct device *dev;
3226 int retval;
3227
3228 if (index >= driver->num) {
3229 pr_err("%s: Attempt to register invalid tty line number (%d)\n",
3230 driver->name, index);
3231 return ERR_PTR(-EINVAL);
3232 }
3233
3234 if (driver->type == TTY_DRIVER_TYPE_PTY)
3235 pty_line_name(driver, index, name);
3236 else
3237 tty_line_name(driver, index, name);
3238
3239 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
3240 if (!dev)
3241 return ERR_PTR(-ENOMEM);
3242
3243 dev->devt = devt;
3244 dev->class = tty_class;
3245 dev->parent = device;
3246 dev->release = tty_device_create_release;
3247 dev_set_name(dev, "%s", name);
3248 dev->groups = attr_grp;
3249 dev_set_drvdata(dev, drvdata);
3250
3251 dev_set_uevent_suppress(dev, 1);
3252
3253 retval = device_register(dev);
3254 if (retval)
3255 goto err_put;
3256
3257 if (!(driver->flags & TTY_DRIVER_DYNAMIC_ALLOC)) {
3258
3259
3260
3261
3262 tp = driver->termios[index];
3263 if (tp) {
3264 driver->termios[index] = NULL;
3265 kfree(tp);
3266 }
3267
3268 retval = tty_cdev_add(driver, devt, index, 1);
3269 if (retval)
3270 goto err_del;
3271 }
3272
3273 dev_set_uevent_suppress(dev, 0);
3274 kobject_uevent(&dev->kobj, KOBJ_ADD);
3275
3276 return dev;
3277
3278 err_del:
3279 device_del(dev);
3280 err_put:
3281 put_device(dev);
3282
3283 return ERR_PTR(retval);
3284 }
3285 EXPORT_SYMBOL_GPL(tty_register_device_attr);
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297 void tty_unregister_device(struct tty_driver *driver, unsigned index)
3298 {
3299 device_destroy(tty_class,
3300 MKDEV(driver->major, driver->minor_start) + index);
3301 if (!(driver->flags & TTY_DRIVER_DYNAMIC_ALLOC)) {
3302 cdev_del(driver->cdevs[index]);
3303 driver->cdevs[index] = NULL;
3304 }
3305 }
3306 EXPORT_SYMBOL(tty_unregister_device);
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317 struct tty_driver *__tty_alloc_driver(unsigned int lines, struct module *owner,
3318 unsigned long flags)
3319 {
3320 struct tty_driver *driver;
3321 unsigned int cdevs = 1;
3322 int err;
3323
3324 if (!lines || (flags & TTY_DRIVER_UNNUMBERED_NODE && lines > 1))
3325 return ERR_PTR(-EINVAL);
3326
3327 driver = kzalloc(sizeof(*driver), GFP_KERNEL);
3328 if (!driver)
3329 return ERR_PTR(-ENOMEM);
3330
3331 kref_init(&driver->kref);
3332 driver->magic = TTY_DRIVER_MAGIC;
3333 driver->num = lines;
3334 driver->owner = owner;
3335 driver->flags = flags;
3336
3337 if (!(flags & TTY_DRIVER_DEVPTS_MEM)) {
3338 driver->ttys = kcalloc(lines, sizeof(*driver->ttys),
3339 GFP_KERNEL);
3340 driver->termios = kcalloc(lines, sizeof(*driver->termios),
3341 GFP_KERNEL);
3342 if (!driver->ttys || !driver->termios) {
3343 err = -ENOMEM;
3344 goto err_free_all;
3345 }
3346 }
3347
3348 if (!(flags & TTY_DRIVER_DYNAMIC_ALLOC)) {
3349 driver->ports = kcalloc(lines, sizeof(*driver->ports),
3350 GFP_KERNEL);
3351 if (!driver->ports) {
3352 err = -ENOMEM;
3353 goto err_free_all;
3354 }
3355 cdevs = lines;
3356 }
3357
3358 driver->cdevs = kcalloc(cdevs, sizeof(*driver->cdevs), GFP_KERNEL);
3359 if (!driver->cdevs) {
3360 err = -ENOMEM;
3361 goto err_free_all;
3362 }
3363
3364 return driver;
3365 err_free_all:
3366 kfree(driver->ports);
3367 kfree(driver->ttys);
3368 kfree(driver->termios);
3369 kfree(driver->cdevs);
3370 kfree(driver);
3371 return ERR_PTR(err);
3372 }
3373 EXPORT_SYMBOL(__tty_alloc_driver);
3374
3375 static void destruct_tty_driver(struct kref *kref)
3376 {
3377 struct tty_driver *driver = container_of(kref, struct tty_driver, kref);
3378 int i;
3379 struct ktermios *tp;
3380
3381 if (driver->flags & TTY_DRIVER_INSTALLED) {
3382 for (i = 0; i < driver->num; i++) {
3383 tp = driver->termios[i];
3384 if (tp) {
3385 driver->termios[i] = NULL;
3386 kfree(tp);
3387 }
3388 if (!(driver->flags & TTY_DRIVER_DYNAMIC_DEV))
3389 tty_unregister_device(driver, i);
3390 }
3391 proc_tty_unregister_driver(driver);
3392 if (driver->flags & TTY_DRIVER_DYNAMIC_ALLOC)
3393 cdev_del(driver->cdevs[0]);
3394 }
3395 kfree(driver->cdevs);
3396 kfree(driver->ports);
3397 kfree(driver->termios);
3398 kfree(driver->ttys);
3399 kfree(driver);
3400 }
3401
3402
3403
3404
3405
3406
3407
3408 void tty_driver_kref_put(struct tty_driver *driver)
3409 {
3410 kref_put(&driver->kref, destruct_tty_driver);
3411 }
3412 EXPORT_SYMBOL(tty_driver_kref_put);
3413
3414
3415
3416
3417
3418
3419
3420 int tty_register_driver(struct tty_driver *driver)
3421 {
3422 int error;
3423 int i;
3424 dev_t dev;
3425 struct device *d;
3426
3427 if (!driver->major) {
3428 error = alloc_chrdev_region(&dev, driver->minor_start,
3429 driver->num, driver->name);
3430 if (!error) {
3431 driver->major = MAJOR(dev);
3432 driver->minor_start = MINOR(dev);
3433 }
3434 } else {
3435 dev = MKDEV(driver->major, driver->minor_start);
3436 error = register_chrdev_region(dev, driver->num, driver->name);
3437 }
3438 if (error < 0)
3439 goto err;
3440
3441 if (driver->flags & TTY_DRIVER_DYNAMIC_ALLOC) {
3442 error = tty_cdev_add(driver, dev, 0, driver->num);
3443 if (error)
3444 goto err_unreg_char;
3445 }
3446
3447 mutex_lock(&tty_mutex);
3448 list_add(&driver->tty_drivers, &tty_drivers);
3449 mutex_unlock(&tty_mutex);
3450
3451 if (!(driver->flags & TTY_DRIVER_DYNAMIC_DEV)) {
3452 for (i = 0; i < driver->num; i++) {
3453 d = tty_register_device(driver, i, NULL);
3454 if (IS_ERR(d)) {
3455 error = PTR_ERR(d);
3456 goto err_unreg_devs;
3457 }
3458 }
3459 }
3460 proc_tty_register_driver(driver);
3461 driver->flags |= TTY_DRIVER_INSTALLED;
3462 return 0;
3463
3464 err_unreg_devs:
3465 for (i--; i >= 0; i--)
3466 tty_unregister_device(driver, i);
3467
3468 mutex_lock(&tty_mutex);
3469 list_del(&driver->tty_drivers);
3470 mutex_unlock(&tty_mutex);
3471
3472 err_unreg_char:
3473 unregister_chrdev_region(dev, driver->num);
3474 err:
3475 return error;
3476 }
3477 EXPORT_SYMBOL(tty_register_driver);
3478
3479
3480
3481
3482
3483
3484
3485 void tty_unregister_driver(struct tty_driver *driver)
3486 {
3487 unregister_chrdev_region(MKDEV(driver->major, driver->minor_start),
3488 driver->num);
3489 mutex_lock(&tty_mutex);
3490 list_del(&driver->tty_drivers);
3491 mutex_unlock(&tty_mutex);
3492 }
3493 EXPORT_SYMBOL(tty_unregister_driver);
3494
3495 dev_t tty_devnum(struct tty_struct *tty)
3496 {
3497 return MKDEV(tty->driver->major, tty->driver->minor_start) + tty->index;
3498 }
3499 EXPORT_SYMBOL(tty_devnum);
3500
3501 void tty_default_fops(struct file_operations *fops)
3502 {
3503 *fops = tty_fops;
3504 }
3505
3506 static char *tty_devnode(struct device *dev, umode_t *mode)
3507 {
3508 if (!mode)
3509 return NULL;
3510 if (dev->devt == MKDEV(TTYAUX_MAJOR, 0) ||
3511 dev->devt == MKDEV(TTYAUX_MAJOR, 2))
3512 *mode = 0666;
3513 return NULL;
3514 }
3515
3516 static int __init tty_class_init(void)
3517 {
3518 tty_class = class_create(THIS_MODULE, "tty");
3519 if (IS_ERR(tty_class))
3520 return PTR_ERR(tty_class);
3521 tty_class->devnode = tty_devnode;
3522 return 0;
3523 }
3524
3525 postcore_initcall(tty_class_init);
3526
3527
3528 static struct cdev tty_cdev, console_cdev;
3529
3530 static ssize_t show_cons_active(struct device *dev,
3531 struct device_attribute *attr, char *buf)
3532 {
3533 struct console *cs[16];
3534 int i = 0;
3535 struct console *c;
3536 ssize_t count = 0;
3537
3538 console_lock();
3539 for_each_console(c) {
3540 if (!c->device)
3541 continue;
3542 if (!c->write)
3543 continue;
3544 if ((c->flags & CON_ENABLED) == 0)
3545 continue;
3546 cs[i++] = c;
3547 if (i >= ARRAY_SIZE(cs))
3548 break;
3549 }
3550 while (i--) {
3551 int index = cs[i]->index;
3552 struct tty_driver *drv = cs[i]->device(cs[i], &index);
3553
3554
3555 if (drv && (cs[i]->index > 0 || drv->major != TTY_MAJOR))
3556 count += tty_line_name(drv, index, buf + count);
3557 else
3558 count += sprintf(buf + count, "%s%d",
3559 cs[i]->name, cs[i]->index);
3560
3561 count += sprintf(buf + count, "%c", i ? ' ':'\n');
3562 }
3563 console_unlock();
3564
3565 return count;
3566 }
3567 static DEVICE_ATTR(active, S_IRUGO, show_cons_active, NULL);
3568
3569 static struct attribute *cons_dev_attrs[] = {
3570 &dev_attr_active.attr,
3571 NULL
3572 };
3573
3574 ATTRIBUTE_GROUPS(cons_dev);
3575
3576 static struct device *consdev;
3577
3578 void console_sysfs_notify(void)
3579 {
3580 if (consdev)
3581 sysfs_notify(&consdev->kobj, NULL, "active");
3582 }
3583
3584
3585
3586
3587
3588 int __init tty_init(void)
3589 {
3590 tty_sysctl_init();
3591 cdev_init(&tty_cdev, &tty_fops);
3592 if (cdev_add(&tty_cdev, MKDEV(TTYAUX_MAJOR, 0), 1) ||
3593 register_chrdev_region(MKDEV(TTYAUX_MAJOR, 0), 1, "/dev/tty") < 0)
3594 panic("Couldn't register /dev/tty driver\n");
3595 device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 0), NULL, "tty");
3596
3597 cdev_init(&console_cdev, &console_fops);
3598 if (cdev_add(&console_cdev, MKDEV(TTYAUX_MAJOR, 1), 1) ||
3599 register_chrdev_region(MKDEV(TTYAUX_MAJOR, 1), 1, "/dev/console") < 0)
3600 panic("Couldn't register /dev/console driver\n");
3601 consdev = device_create_with_groups(tty_class, NULL,
3602 MKDEV(TTYAUX_MAJOR, 1), NULL,
3603 cons_dev_groups, "console");
3604 if (IS_ERR(consdev))
3605 consdev = NULL;
3606
3607 #ifdef CONFIG_VT
3608 vty_init(&console_fops);
3609 #endif
3610 return 0;
3611 }
3612