1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68#include <linux/types.h>
69#include <linux/major.h>
70#include <linux/errno.h>
71#include <linux/signal.h>
72#include <linux/fcntl.h>
73#include <linux/sched/signal.h>
74#include <linux/sched/task.h>
75#include <linux/interrupt.h>
76#include <linux/tty.h>
77#include <linux/tty_driver.h>
78#include <linux/tty_flip.h>
79#include <linux/devpts_fs.h>
80#include <linux/file.h>
81#include <linux/fdtable.h>
82#include <linux/console.h>
83#include <linux/timer.h>
84#include <linux/ctype.h>
85#include <linux/kd.h>
86#include <linux/mm.h>
87#include <linux/string.h>
88#include <linux/slab.h>
89#include <linux/poll.h>
90#include <linux/ppp-ioctl.h>
91#include <linux/proc_fs.h>
92#include <linux/init.h>
93#include <linux/module.h>
94#include <linux/device.h>
95#include <linux/wait.h>
96#include <linux/bitops.h>
97#include <linux/delay.h>
98#include <linux/seq_file.h>
99#include <linux/serial.h>
100#include <linux/ratelimit.h>
101#include <linux/compat.h>
102
103#include <linux/uaccess.h>
104
105#include <linux/kbd_kern.h>
106#include <linux/vt_kern.h>
107#include <linux/selection.h>
108
109#include <linux/kmod.h>
110#include <linux/nsproxy.h>
111
112#undef TTY_DEBUG_HANGUP
113#ifdef TTY_DEBUG_HANGUP
114# define tty_debug_hangup(tty, f, args...) tty_debug(tty, f, ##args)
115#else
116# define tty_debug_hangup(tty, f, args...) do { } while (0)
117#endif
118
119#define TTY_PARANOIA_CHECK 1
120#define CHECK_TTY_COUNT 1
121
122struct ktermios tty_std_termios = {
123 .c_iflag = ICRNL | IXON,
124 .c_oflag = OPOST | ONLCR,
125 .c_cflag = B38400 | CS8 | CREAD | HUPCL,
126 .c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK |
127 ECHOCTL | ECHOKE | IEXTEN,
128 .c_cc = INIT_C_CC,
129 .c_ispeed = 38400,
130 .c_ospeed = 38400,
131
132};
133
134EXPORT_SYMBOL(tty_std_termios);
135
136
137
138
139
140LIST_HEAD(tty_drivers);
141
142
143DEFINE_MUTEX(tty_mutex);
144
145static ssize_t tty_read(struct file *, char __user *, size_t, loff_t *);
146static ssize_t tty_write(struct file *, const char __user *, size_t, loff_t *);
147ssize_t redirected_tty_write(struct file *, const char __user *,
148 size_t, loff_t *);
149static __poll_t tty_poll(struct file *, poll_table *);
150static int tty_open(struct inode *, struct file *);
151long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
152#ifdef CONFIG_COMPAT
153static long tty_compat_ioctl(struct file *file, unsigned int cmd,
154 unsigned long arg);
155#else
156#define tty_compat_ioctl NULL
157#endif
158static int __tty_fasync(int fd, struct file *filp, int on);
159static int tty_fasync(int fd, struct file *filp, int on);
160static void release_tty(struct tty_struct *tty, int idx);
161
162
163
164
165
166
167
168
169
170
171static void free_tty_struct(struct tty_struct *tty)
172{
173 tty_ldisc_deinit(tty);
174 put_device(tty->dev);
175 kfree(tty->write_buf);
176 tty->magic = 0xDEADDEAD;
177 kfree(tty);
178}
179
180static inline struct tty_struct *file_tty(struct file *file)
181{
182 return ((struct tty_file_private *)file->private_data)->tty;
183}
184
185int tty_alloc_file(struct file *file)
186{
187 struct tty_file_private *priv;
188
189 priv = kmalloc(sizeof(*priv), GFP_KERNEL);
190 if (!priv)
191 return -ENOMEM;
192
193 file->private_data = priv;
194
195 return 0;
196}
197
198
199void tty_add_file(struct tty_struct *tty, struct file *file)
200{
201 struct tty_file_private *priv = file->private_data;
202
203 priv->tty = tty;
204 priv->file = file;
205
206 spin_lock(&tty->files_lock);
207 list_add(&priv->list, &tty->tty_files);
208 spin_unlock(&tty->files_lock);
209}
210
211
212
213
214
215
216
217void tty_free_file(struct file *file)
218{
219 struct tty_file_private *priv = file->private_data;
220
221 file->private_data = NULL;
222 kfree(priv);
223}
224
225
226static void tty_del_file(struct file *file)
227{
228 struct tty_file_private *priv = file->private_data;
229 struct tty_struct *tty = priv->tty;
230
231 spin_lock(&tty->files_lock);
232 list_del(&priv->list);
233 spin_unlock(&tty->files_lock);
234 tty_free_file(file);
235}
236
237
238
239
240
241
242
243
244
245
246
247const char *tty_name(const struct tty_struct *tty)
248{
249 if (!tty)
250 return "NULL tty";
251 return tty->name;
252}
253
254EXPORT_SYMBOL(tty_name);
255
256const char *tty_driver_name(const struct tty_struct *tty)
257{
258 if (!tty || !tty->driver)
259 return "";
260 return tty->driver->name;
261}
262
263static int tty_paranoia_check(struct tty_struct *tty, struct inode *inode,
264 const char *routine)
265{
266#ifdef TTY_PARANOIA_CHECK
267 if (!tty) {
268 pr_warn("(%d:%d): %s: NULL tty\n",
269 imajor(inode), iminor(inode), routine);
270 return 1;
271 }
272 if (tty->magic != TTY_MAGIC) {
273 pr_warn("(%d:%d): %s: bad magic number\n",
274 imajor(inode), iminor(inode), routine);
275 return 1;
276 }
277#endif
278 return 0;
279}
280
281
282static int check_tty_count(struct tty_struct *tty, const char *routine)
283{
284#ifdef CHECK_TTY_COUNT
285 struct list_head *p;
286 int count = 0, kopen_count = 0;
287
288 spin_lock(&tty->files_lock);
289 list_for_each(p, &tty->tty_files) {
290 count++;
291 }
292 spin_unlock(&tty->files_lock);
293 if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
294 tty->driver->subtype == PTY_TYPE_SLAVE &&
295 tty->link && tty->link->count)
296 count++;
297 if (tty_port_kopened(tty->port))
298 kopen_count++;
299 if (tty->count != (count + kopen_count)) {
300 tty_warn(tty, "%s: tty->count(%d) != (#fd's(%d) + #kopen's(%d))\n",
301 routine, tty->count, count, kopen_count);
302 return (count + kopen_count);
303 }
304#endif
305 return 0;
306}
307
308
309
310
311
312
313
314
315
316
317
318
319static struct tty_driver *get_tty_driver(dev_t device, int *index)
320{
321 struct tty_driver *p;
322
323 list_for_each_entry(p, &tty_drivers, tty_drivers) {
324 dev_t base = MKDEV(p->major, p->minor_start);
325 if (device < base || device >= base + p->num)
326 continue;
327 *index = device - base;
328 return tty_driver_kref_get(p);
329 }
330 return NULL;
331}
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346int tty_dev_name_to_number(const char *name, dev_t *number)
347{
348 struct tty_driver *p;
349 int ret;
350 int index, prefix_length = 0;
351 const char *str;
352
353 for (str = name; *str && !isdigit(*str); str++)
354 ;
355
356 if (!*str)
357 return -EINVAL;
358
359 ret = kstrtoint(str, 10, &index);
360 if (ret)
361 return ret;
362
363 prefix_length = str - name;
364 mutex_lock(&tty_mutex);
365
366 list_for_each_entry(p, &tty_drivers, tty_drivers)
367 if (prefix_length == strlen(p->name) && strncmp(name,
368 p->name, prefix_length) == 0) {
369 if (index < p->num) {
370 *number = MKDEV(p->major, p->minor_start + index);
371 goto out;
372 }
373 }
374
375
376 ret = -ENODEV;
377out:
378 mutex_unlock(&tty_mutex);
379 return ret;
380}
381EXPORT_SYMBOL_GPL(tty_dev_name_to_number);
382
383#ifdef CONFIG_CONSOLE_POLL
384
385
386
387
388
389
390
391
392
393
394struct tty_driver *tty_find_polling_driver(char *name, int *line)
395{
396 struct tty_driver *p, *res = NULL;
397 int tty_line = 0;
398 int len;
399 char *str, *stp;
400
401 for (str = name; *str; str++)
402 if ((*str >= '0' && *str <= '9') || *str == ',')
403 break;
404 if (!*str)
405 return NULL;
406
407 len = str - name;
408 tty_line = simple_strtoul(str, &str, 10);
409
410 mutex_lock(&tty_mutex);
411
412 list_for_each_entry(p, &tty_drivers, tty_drivers) {
413 if (!len || strncmp(name, p->name, len) != 0)
414 continue;
415 stp = str;
416 if (*stp == ',')
417 stp++;
418 if (*stp == '\0')
419 stp = NULL;
420
421 if (tty_line >= 0 && tty_line < p->num && p->ops &&
422 p->ops->poll_init && !p->ops->poll_init(p, tty_line, stp)) {
423 res = tty_driver_kref_get(p);
424 *line = tty_line;
425 break;
426 }
427 }
428 mutex_unlock(&tty_mutex);
429
430 return res;
431}
432EXPORT_SYMBOL_GPL(tty_find_polling_driver);
433#endif
434
435static ssize_t hung_up_tty_read(struct file *file, char __user *buf,
436 size_t count, loff_t *ppos)
437{
438 return 0;
439}
440
441static ssize_t hung_up_tty_write(struct file *file, const char __user *buf,
442 size_t count, loff_t *ppos)
443{
444 return -EIO;
445}
446
447
448static __poll_t hung_up_tty_poll(struct file *filp, poll_table *wait)
449{
450 return EPOLLIN | EPOLLOUT | EPOLLERR | EPOLLHUP | EPOLLRDNORM | EPOLLWRNORM;
451}
452
453static long hung_up_tty_ioctl(struct file *file, unsigned int cmd,
454 unsigned long arg)
455{
456 return cmd == TIOCSPGRP ? -ENOTTY : -EIO;
457}
458
459static long hung_up_tty_compat_ioctl(struct file *file,
460 unsigned int cmd, unsigned long arg)
461{
462 return cmd == TIOCSPGRP ? -ENOTTY : -EIO;
463}
464
465static int hung_up_tty_fasync(int fd, struct file *file, int on)
466{
467 return -ENOTTY;
468}
469
470static void tty_show_fdinfo(struct seq_file *m, struct file *file)
471{
472 struct tty_struct *tty = file_tty(file);
473
474 if (tty && tty->ops && tty->ops->show_fdinfo)
475 tty->ops->show_fdinfo(tty, m);
476}
477
478static const struct file_operations tty_fops = {
479 .llseek = no_llseek,
480 .read = tty_read,
481 .write = tty_write,
482 .poll = tty_poll,
483 .unlocked_ioctl = tty_ioctl,
484 .compat_ioctl = tty_compat_ioctl,
485 .open = tty_open,
486 .release = tty_release,
487 .fasync = tty_fasync,
488 .show_fdinfo = tty_show_fdinfo,
489};
490
491static const struct file_operations console_fops = {
492 .llseek = no_llseek,
493 .read = tty_read,
494 .write = redirected_tty_write,
495 .poll = tty_poll,
496 .unlocked_ioctl = tty_ioctl,
497 .compat_ioctl = tty_compat_ioctl,
498 .open = tty_open,
499 .release = tty_release,
500 .fasync = tty_fasync,
501};
502
503static const struct file_operations hung_up_tty_fops = {
504 .llseek = no_llseek,
505 .read = hung_up_tty_read,
506 .write = hung_up_tty_write,
507 .poll = hung_up_tty_poll,
508 .unlocked_ioctl = hung_up_tty_ioctl,
509 .compat_ioctl = hung_up_tty_compat_ioctl,
510 .release = tty_release,
511 .fasync = hung_up_tty_fasync,
512};
513
514static DEFINE_SPINLOCK(redirect_lock);
515static struct file *redirect;
516
517extern void tty_sysctl_init(void);
518
519
520
521
522
523
524
525
526
527
528void tty_wakeup(struct tty_struct *tty)
529{
530 struct tty_ldisc *ld;
531
532 if (test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) {
533 ld = tty_ldisc_ref(tty);
534 if (ld) {
535 if (ld->ops->write_wakeup)
536 ld->ops->write_wakeup(tty);
537 tty_ldisc_deref(ld);
538 }
539 }
540 wake_up_interruptible_poll(&tty->write_wait, EPOLLOUT);
541}
542
543EXPORT_SYMBOL_GPL(tty_wakeup);
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567static void __tty_hangup(struct tty_struct *tty, int exit_session)
568{
569 struct file *cons_filp = NULL;
570 struct file *filp, *f = NULL;
571 struct tty_file_private *priv;
572 int closecount = 0, n;
573 int refs;
574
575 if (!tty)
576 return;
577
578
579 spin_lock(&redirect_lock);
580 if (redirect && file_tty(redirect) == tty) {
581 f = redirect;
582 redirect = NULL;
583 }
584 spin_unlock(&redirect_lock);
585
586 tty_lock(tty);
587
588 if (test_bit(TTY_HUPPED, &tty->flags)) {
589 tty_unlock(tty);
590 return;
591 }
592
593
594
595
596
597
598
599 set_bit(TTY_HUPPING, &tty->flags);
600
601
602
603
604 check_tty_count(tty, "tty_hangup");
605
606 spin_lock(&tty->files_lock);
607
608 list_for_each_entry(priv, &tty->tty_files, list) {
609 filp = priv->file;
610 if (filp->f_op->write == redirected_tty_write)
611 cons_filp = filp;
612 if (filp->f_op->write != tty_write)
613 continue;
614 closecount++;
615 __tty_fasync(-1, filp, 0);
616 filp->f_op = &hung_up_tty_fops;
617 }
618 spin_unlock(&tty->files_lock);
619
620 refs = tty_signal_session_leader(tty, exit_session);
621
622 while (refs--)
623 tty_kref_put(tty);
624
625 tty_ldisc_hangup(tty, cons_filp != NULL);
626
627 spin_lock_irq(&tty->ctrl_lock);
628 clear_bit(TTY_THROTTLED, &tty->flags);
629 clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
630 put_pid(tty->session);
631 put_pid(tty->pgrp);
632 tty->session = NULL;
633 tty->pgrp = NULL;
634 tty->ctrl_status = 0;
635 spin_unlock_irq(&tty->ctrl_lock);
636
637
638
639
640
641
642
643 if (cons_filp) {
644 if (tty->ops->close)
645 for (n = 0; n < closecount; n++)
646 tty->ops->close(tty, cons_filp);
647 } else if (tty->ops->hangup)
648 tty->ops->hangup(tty);
649
650
651
652
653
654 set_bit(TTY_HUPPED, &tty->flags);
655 clear_bit(TTY_HUPPING, &tty->flags);
656 tty_unlock(tty);
657
658 if (f)
659 fput(f);
660}
661
662static void do_tty_hangup(struct work_struct *work)
663{
664 struct tty_struct *tty =
665 container_of(work, struct tty_struct, hangup_work);
666
667 __tty_hangup(tty, 0);
668}
669
670
671
672
673
674
675
676
677
678void tty_hangup(struct tty_struct *tty)
679{
680 tty_debug_hangup(tty, "hangup\n");
681 schedule_work(&tty->hangup_work);
682}
683
684EXPORT_SYMBOL(tty_hangup);
685
686
687
688
689
690
691
692
693
694
695void tty_vhangup(struct tty_struct *tty)
696{
697 tty_debug_hangup(tty, "vhangup\n");
698 __tty_hangup(tty, 0);
699}
700
701EXPORT_SYMBOL(tty_vhangup);
702
703
704
705
706
707
708
709
710void tty_vhangup_self(void)
711{
712 struct tty_struct *tty;
713
714 tty = get_current_tty();
715 if (tty) {
716 tty_vhangup(tty);
717 tty_kref_put(tty);
718 }
719}
720
721
722
723
724
725
726
727
728
729
730
731
732void tty_vhangup_session(struct tty_struct *tty)
733{
734 tty_debug_hangup(tty, "session hangup\n");
735 __tty_hangup(tty, 1);
736}
737
738
739
740
741
742
743
744
745
746int tty_hung_up_p(struct file *filp)
747{
748 return (filp && filp->f_op == &hung_up_tty_fops);
749}
750
751EXPORT_SYMBOL(tty_hung_up_p);
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770void __stop_tty(struct tty_struct *tty)
771{
772 if (tty->stopped)
773 return;
774 tty->stopped = 1;
775 if (tty->ops->stop)
776 tty->ops->stop(tty);
777}
778
779void stop_tty(struct tty_struct *tty)
780{
781 unsigned long flags;
782
783 spin_lock_irqsave(&tty->flow_lock, flags);
784 __stop_tty(tty);
785 spin_unlock_irqrestore(&tty->flow_lock, flags);
786}
787EXPORT_SYMBOL(stop_tty);
788
789
790
791
792
793
794
795
796
797
798
799
800
801void __start_tty(struct tty_struct *tty)
802{
803 if (!tty->stopped || tty->flow_stopped)
804 return;
805 tty->stopped = 0;
806 if (tty->ops->start)
807 tty->ops->start(tty);
808 tty_wakeup(tty);
809}
810
811void start_tty(struct tty_struct *tty)
812{
813 unsigned long flags;
814
815 spin_lock_irqsave(&tty->flow_lock, flags);
816 __start_tty(tty);
817 spin_unlock_irqrestore(&tty->flow_lock, flags);
818}
819EXPORT_SYMBOL(start_tty);
820
821static void tty_update_time(struct timespec64 *time)
822{
823 time64_t sec = ktime_get_real_seconds();
824
825
826
827
828
829
830
831 if ((sec ^ time->tv_sec) & ~7)
832 time->tv_sec = sec;
833}
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850static ssize_t tty_read(struct file *file, char __user *buf, size_t count,
851 loff_t *ppos)
852{
853 int i;
854 struct inode *inode = file_inode(file);
855 struct tty_struct *tty = file_tty(file);
856 struct tty_ldisc *ld;
857
858 if (tty_paranoia_check(tty, inode, "tty_read"))
859 return -EIO;
860 if (!tty || tty_io_error(tty))
861 return -EIO;
862
863
864
865 ld = tty_ldisc_ref_wait(tty);
866 if (!ld)
867 return hung_up_tty_read(file, buf, count, ppos);
868 if (ld->ops->read)
869 i = ld->ops->read(tty, file, buf, count);
870 else
871 i = -EIO;
872 tty_ldisc_deref(ld);
873
874 if (i > 0)
875 tty_update_time(&inode->i_atime);
876
877 return i;
878}
879
880static void tty_write_unlock(struct tty_struct *tty)
881{
882 mutex_unlock(&tty->atomic_write_lock);
883 wake_up_interruptible_poll(&tty->write_wait, EPOLLOUT);
884}
885
886static int tty_write_lock(struct tty_struct *tty, int ndelay)
887{
888 if (!mutex_trylock(&tty->atomic_write_lock)) {
889 if (ndelay)
890 return -EAGAIN;
891 if (mutex_lock_interruptible(&tty->atomic_write_lock))
892 return -ERESTARTSYS;
893 }
894 return 0;
895}
896
897
898
899
900
901static inline ssize_t do_tty_write(
902 ssize_t (*write)(struct tty_struct *, struct file *, const unsigned char *, size_t),
903 struct tty_struct *tty,
904 struct file *file,
905 const char __user *buf,
906 size_t count)
907{
908 ssize_t ret, written = 0;
909 unsigned int chunk;
910
911 ret = tty_write_lock(tty, file->f_flags & O_NDELAY);
912 if (ret < 0)
913 return ret;
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931 chunk = 2048;
932 if (test_bit(TTY_NO_WRITE_SPLIT, &tty->flags))
933 chunk = 65536;
934 if (count < chunk)
935 chunk = count;
936
937
938 if (tty->write_cnt < chunk) {
939 unsigned char *buf_chunk;
940
941 if (chunk < 1024)
942 chunk = 1024;
943
944 buf_chunk = kmalloc(chunk, GFP_KERNEL);
945 if (!buf_chunk) {
946 ret = -ENOMEM;
947 goto out;
948 }
949 kfree(tty->write_buf);
950 tty->write_cnt = chunk;
951 tty->write_buf = buf_chunk;
952 }
953
954
955 for (;;) {
956 size_t size = count;
957 if (size > chunk)
958 size = chunk;
959 ret = -EFAULT;
960 if (copy_from_user(tty->write_buf, buf, size))
961 break;
962 ret = write(tty, file, tty->write_buf, size);
963 if (ret <= 0)
964 break;
965 written += ret;
966 buf += ret;
967 count -= ret;
968 if (!count)
969 break;
970 ret = -ERESTARTSYS;
971 if (signal_pending(current))
972 break;
973 cond_resched();
974 }
975 if (written) {
976 tty_update_time(&file_inode(file)->i_mtime);
977 ret = written;
978 }
979out:
980 tty_write_unlock(tty);
981 return ret;
982}
983
984
985
986
987
988
989
990
991
992
993
994
995
996void tty_write_message(struct tty_struct *tty, char *msg)
997{
998 if (tty) {
999 mutex_lock(&tty->atomic_write_lock);
1000 tty_lock(tty);
1001 if (tty->ops->write && tty->count > 0)
1002 tty->ops->write(tty, msg, strlen(msg));
1003 tty_unlock(tty);
1004 tty_write_unlock(tty);
1005 }
1006 return;
1007}
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026static ssize_t tty_write(struct file *file, const char __user *buf,
1027 size_t count, loff_t *ppos)
1028{
1029 struct tty_struct *tty = file_tty(file);
1030 struct tty_ldisc *ld;
1031 ssize_t ret;
1032
1033 if (tty_paranoia_check(tty, file_inode(file), "tty_write"))
1034 return -EIO;
1035 if (!tty || !tty->ops->write || tty_io_error(tty))
1036 return -EIO;
1037
1038 if (tty->ops->write_room == NULL)
1039 tty_err(tty, "missing write_room method\n");
1040 ld = tty_ldisc_ref_wait(tty);
1041 if (!ld)
1042 return hung_up_tty_write(file, buf, count, ppos);
1043 if (!ld->ops->write)
1044 ret = -EIO;
1045 else
1046 ret = do_tty_write(ld->ops->write, tty, file, buf, count);
1047 tty_ldisc_deref(ld);
1048 return ret;
1049}
1050
1051ssize_t redirected_tty_write(struct file *file, const char __user *buf,
1052 size_t count, loff_t *ppos)
1053{
1054 struct file *p = NULL;
1055
1056 spin_lock(&redirect_lock);
1057 if (redirect)
1058 p = get_file(redirect);
1059 spin_unlock(&redirect_lock);
1060
1061 if (p) {
1062 ssize_t res;
1063 res = vfs_write(p, buf, count, &p->f_pos);
1064 fput(p);
1065 return res;
1066 }
1067 return tty_write(file, buf, count, ppos);
1068}
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078int tty_send_xchar(struct tty_struct *tty, char ch)
1079{
1080 int was_stopped = tty->stopped;
1081
1082 if (tty->ops->send_xchar) {
1083 down_read(&tty->termios_rwsem);
1084 tty->ops->send_xchar(tty, ch);
1085 up_read(&tty->termios_rwsem);
1086 return 0;
1087 }
1088
1089 if (tty_write_lock(tty, 0) < 0)
1090 return -ERESTARTSYS;
1091
1092 down_read(&tty->termios_rwsem);
1093 if (was_stopped)
1094 start_tty(tty);
1095 tty->ops->write(tty, &ch, 1);
1096 if (was_stopped)
1097 stop_tty(tty);
1098 up_read(&tty->termios_rwsem);
1099 tty_write_unlock(tty);
1100 return 0;
1101}
1102
1103static char ptychar[] = "pqrstuvwxyzabcde";
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116static void pty_line_name(struct tty_driver *driver, int index, char *p)
1117{
1118 int i = index + driver->name_base;
1119
1120 sprintf(p, "%s%c%x",
1121 driver->subtype == PTY_TYPE_SLAVE ? "tty" : driver->name,
1122 ptychar[i >> 4 & 0xf], i & 0xf);
1123}
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136static ssize_t tty_line_name(struct tty_driver *driver, int index, char *p)
1137{
1138 if (driver->flags & TTY_DRIVER_UNNUMBERED_NODE)
1139 return sprintf(p, "%s", driver->name);
1140 else
1141 return sprintf(p, "%s%d", driver->name,
1142 index + driver->name_base);
1143}
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155static struct tty_struct *tty_driver_lookup_tty(struct tty_driver *driver,
1156 struct file *file, int idx)
1157{
1158 struct tty_struct *tty;
1159
1160 if (driver->ops->lookup)
1161 if (!file)
1162 tty = ERR_PTR(-EIO);
1163 else
1164 tty = driver->ops->lookup(driver, file, idx);
1165 else
1166 tty = driver->ttys[idx];
1167
1168 if (!IS_ERR(tty))
1169 tty_kref_get(tty);
1170 return tty;
1171}
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181void tty_init_termios(struct tty_struct *tty)
1182{
1183 struct ktermios *tp;
1184 int idx = tty->index;
1185
1186 if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS)
1187 tty->termios = tty->driver->init_termios;
1188 else {
1189
1190 tp = tty->driver->termios[idx];
1191 if (tp != NULL) {
1192 tty->termios = *tp;
1193 tty->termios.c_line = tty->driver->init_termios.c_line;
1194 } else
1195 tty->termios = tty->driver->init_termios;
1196 }
1197
1198 tty->termios.c_ispeed = tty_termios_input_baud_rate(&tty->termios);
1199 tty->termios.c_ospeed = tty_termios_baud_rate(&tty->termios);
1200}
1201EXPORT_SYMBOL_GPL(tty_init_termios);
1202
1203int tty_standard_install(struct tty_driver *driver, struct tty_struct *tty)
1204{
1205 tty_init_termios(tty);
1206 tty_driver_kref_get(driver);
1207 tty->count++;
1208 driver->ttys[tty->index] = tty;
1209 return 0;
1210}
1211EXPORT_SYMBOL_GPL(tty_standard_install);
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225static int tty_driver_install_tty(struct tty_driver *driver,
1226 struct tty_struct *tty)
1227{
1228 return driver->ops->install ? driver->ops->install(driver, tty) :
1229 tty_standard_install(driver, tty);
1230}
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242static void tty_driver_remove_tty(struct tty_driver *driver, struct tty_struct *tty)
1243{
1244 if (driver->ops->remove)
1245 driver->ops->remove(driver, tty);
1246 else
1247 driver->ttys[tty->index] = NULL;
1248}
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259static int tty_reopen(struct tty_struct *tty)
1260{
1261 struct tty_driver *driver = tty->driver;
1262 struct tty_ldisc *ld;
1263 int retval = 0;
1264
1265 if (driver->type == TTY_DRIVER_TYPE_PTY &&
1266 driver->subtype == PTY_TYPE_MASTER)
1267 return -EIO;
1268
1269 if (!tty->count)
1270 return -EAGAIN;
1271
1272 if (test_bit(TTY_EXCLUSIVE, &tty->flags) && !capable(CAP_SYS_ADMIN))
1273 return -EBUSY;
1274
1275 ld = tty_ldisc_ref_wait(tty);
1276 if (ld) {
1277 tty_ldisc_deref(ld);
1278 } else {
1279 retval = tty_ldisc_lock(tty, 5 * HZ);
1280 if (retval)
1281 return retval;
1282
1283 if (!tty->ldisc)
1284 retval = tty_ldisc_reinit(tty, tty->termios.c_line);
1285 tty_ldisc_unlock(tty);
1286 }
1287
1288 if (retval == 0)
1289 tty->count++;
1290
1291 return retval;
1292}
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx)
1319{
1320 struct tty_struct *tty;
1321 int retval;
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331 if (!try_module_get(driver->owner))
1332 return ERR_PTR(-ENODEV);
1333
1334 tty = alloc_tty_struct(driver, idx);
1335 if (!tty) {
1336 retval = -ENOMEM;
1337 goto err_module_put;
1338 }
1339
1340 tty_lock(tty);
1341 retval = tty_driver_install_tty(driver, tty);
1342 if (retval < 0)
1343 goto err_free_tty;
1344
1345 if (!tty->port)
1346 tty->port = driver->ports[idx];
1347
1348 if (WARN_RATELIMIT(!tty->port,
1349 "%s: %s driver does not set tty->port. This would crash the kernel. Fix the driver!\n",
1350 __func__, tty->driver->name)) {
1351 retval = -EINVAL;
1352 goto err_release_lock;
1353 }
1354
1355 retval = tty_ldisc_lock(tty, 5 * HZ);
1356 if (retval)
1357 goto err_release_lock;
1358 tty->port->itty = tty;
1359
1360
1361
1362
1363
1364
1365 retval = tty_ldisc_setup(tty, tty->link);
1366 if (retval)
1367 goto err_release_tty;
1368 tty_ldisc_unlock(tty);
1369
1370 return tty;
1371
1372err_free_tty:
1373 tty_unlock(tty);
1374 free_tty_struct(tty);
1375err_module_put:
1376 module_put(driver->owner);
1377 return ERR_PTR(retval);
1378
1379
1380err_release_tty:
1381 tty_ldisc_unlock(tty);
1382 tty_info_ratelimited(tty, "ldisc open failed (%d), clearing slot %d\n",
1383 retval, idx);
1384err_release_lock:
1385 tty_unlock(tty);
1386 release_tty(tty, idx);
1387 return ERR_PTR(retval);
1388}
1389
1390
1391
1392
1393
1394
1395
1396void tty_save_termios(struct tty_struct *tty)
1397{
1398 struct ktermios *tp;
1399 int idx = tty->index;
1400
1401
1402 if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS)
1403 return;
1404
1405
1406 tp = tty->driver->termios[idx];
1407 if (tp == NULL) {
1408 tp = kmalloc(sizeof(struct ktermios), GFP_KERNEL);
1409 if (tp == NULL)
1410 return;
1411 tty->driver->termios[idx] = tp;
1412 }
1413 *tp = tty->termios;
1414}
1415EXPORT_SYMBOL_GPL(tty_save_termios);
1416
1417
1418
1419
1420
1421
1422
1423static void tty_flush_works(struct tty_struct *tty)
1424{
1425 flush_work(&tty->SAK_work);
1426 flush_work(&tty->hangup_work);
1427 if (tty->link) {
1428 flush_work(&tty->link->SAK_work);
1429 flush_work(&tty->link->hangup_work);
1430 }
1431}
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448static void release_one_tty(struct work_struct *work)
1449{
1450 struct tty_struct *tty =
1451 container_of(work, struct tty_struct, hangup_work);
1452 struct tty_driver *driver = tty->driver;
1453 struct module *owner = driver->owner;
1454
1455 if (tty->ops->cleanup)
1456 tty->ops->cleanup(tty);
1457
1458 tty->magic = 0;
1459 tty_driver_kref_put(driver);
1460 module_put(owner);
1461
1462 spin_lock(&tty->files_lock);
1463 list_del_init(&tty->tty_files);
1464 spin_unlock(&tty->files_lock);
1465
1466 put_pid(tty->pgrp);
1467 put_pid(tty->session);
1468 free_tty_struct(tty);
1469}
1470
1471static void queue_release_one_tty(struct kref *kref)
1472{
1473 struct tty_struct *tty = container_of(kref, struct tty_struct, kref);
1474
1475
1476
1477 INIT_WORK(&tty->hangup_work, release_one_tty);
1478 schedule_work(&tty->hangup_work);
1479}
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489void tty_kref_put(struct tty_struct *tty)
1490{
1491 if (tty)
1492 kref_put(&tty->kref, queue_release_one_tty);
1493}
1494EXPORT_SYMBOL(tty_kref_put);
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508static void release_tty(struct tty_struct *tty, int idx)
1509{
1510
1511 WARN_ON(tty->index != idx);
1512 WARN_ON(!mutex_is_locked(&tty_mutex));
1513 if (tty->ops->shutdown)
1514 tty->ops->shutdown(tty);
1515 tty_save_termios(tty);
1516 tty_driver_remove_tty(tty->driver, tty);
1517 tty->port->itty = NULL;
1518 if (tty->link)
1519 tty->link->port->itty = NULL;
1520 tty_buffer_cancel_work(tty->port);
1521 if (tty->link)
1522 tty_buffer_cancel_work(tty->link->port);
1523
1524 tty_kref_put(tty->link);
1525 tty_kref_put(tty);
1526}
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537static int tty_release_checks(struct tty_struct *tty, int idx)
1538{
1539#ifdef TTY_PARANOIA_CHECK
1540 if (idx < 0 || idx >= tty->driver->num) {
1541 tty_debug(tty, "bad idx %d\n", idx);
1542 return -1;
1543 }
1544
1545
1546 if (tty->driver->flags & TTY_DRIVER_DEVPTS_MEM)
1547 return 0;
1548
1549 if (tty != tty->driver->ttys[idx]) {
1550 tty_debug(tty, "bad driver table[%d] = %p\n",
1551 idx, tty->driver->ttys[idx]);
1552 return -1;
1553 }
1554 if (tty->driver->other) {
1555 struct tty_struct *o_tty = tty->link;
1556
1557 if (o_tty != tty->driver->other->ttys[idx]) {
1558 tty_debug(tty, "bad other table[%d] = %p\n",
1559 idx, tty->driver->other->ttys[idx]);
1560 return -1;
1561 }
1562 if (o_tty->link != tty) {
1563 tty_debug(tty, "bad link = %p\n", o_tty->link);
1564 return -1;
1565 }
1566 }
1567#endif
1568 return 0;
1569}
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579void tty_kclose(struct tty_struct *tty)
1580{
1581
1582
1583
1584 tty_ldisc_release(tty);
1585
1586
1587 tty_flush_works(tty);
1588
1589 tty_debug_hangup(tty, "freeing structure\n");
1590
1591
1592
1593
1594 mutex_lock(&tty_mutex);
1595 tty_port_set_kopened(tty->port, 0);
1596 release_tty(tty, tty->index);
1597 mutex_unlock(&tty_mutex);
1598}
1599EXPORT_SYMBOL_GPL(tty_kclose);
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609void tty_release_struct(struct tty_struct *tty, int idx)
1610{
1611
1612
1613
1614 tty_ldisc_release(tty);
1615
1616
1617 tty_flush_works(tty);
1618
1619 tty_debug_hangup(tty, "freeing structure\n");
1620
1621
1622
1623
1624 mutex_lock(&tty_mutex);
1625 release_tty(tty, idx);
1626 mutex_unlock(&tty_mutex);
1627}
1628EXPORT_SYMBOL_GPL(tty_release_struct);
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649int tty_release(struct inode *inode, struct file *filp)
1650{
1651 struct tty_struct *tty = file_tty(filp);
1652 struct tty_struct *o_tty = NULL;
1653 int do_sleep, final;
1654 int idx;
1655 long timeout = 0;
1656 int once = 1;
1657
1658 if (tty_paranoia_check(tty, inode, __func__))
1659 return 0;
1660
1661 tty_lock(tty);
1662 check_tty_count(tty, __func__);
1663
1664 __tty_fasync(-1, filp, 0);
1665
1666 idx = tty->index;
1667 if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
1668 tty->driver->subtype == PTY_TYPE_MASTER)
1669 o_tty = tty->link;
1670
1671 if (tty_release_checks(tty, idx)) {
1672 tty_unlock(tty);
1673 return 0;
1674 }
1675
1676 tty_debug_hangup(tty, "releasing (count=%d)\n", tty->count);
1677
1678 if (tty->ops->close)
1679 tty->ops->close(tty, filp);
1680
1681
1682 tty_lock_slave(o_tty);
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697 while (1) {
1698 do_sleep = 0;
1699
1700 if (tty->count <= 1) {
1701 if (waitqueue_active(&tty->read_wait)) {
1702 wake_up_poll(&tty->read_wait, EPOLLIN);
1703 do_sleep++;
1704 }
1705 if (waitqueue_active(&tty->write_wait)) {
1706 wake_up_poll(&tty->write_wait, EPOLLOUT);
1707 do_sleep++;
1708 }
1709 }
1710 if (o_tty && o_tty->count <= 1) {
1711 if (waitqueue_active(&o_tty->read_wait)) {
1712 wake_up_poll(&o_tty->read_wait, EPOLLIN);
1713 do_sleep++;
1714 }
1715 if (waitqueue_active(&o_tty->write_wait)) {
1716 wake_up_poll(&o_tty->write_wait, EPOLLOUT);
1717 do_sleep++;
1718 }
1719 }
1720 if (!do_sleep)
1721 break;
1722
1723 if (once) {
1724 once = 0;
1725 tty_warn(tty, "read/write wait queue active!\n");
1726 }
1727 schedule_timeout_killable(timeout);
1728 if (timeout < 120 * HZ)
1729 timeout = 2 * timeout + 1;
1730 else
1731 timeout = MAX_SCHEDULE_TIMEOUT;
1732 }
1733
1734 if (o_tty) {
1735 if (--o_tty->count < 0) {
1736 tty_warn(tty, "bad slave count (%d)\n", o_tty->count);
1737 o_tty->count = 0;
1738 }
1739 }
1740 if (--tty->count < 0) {
1741 tty_warn(tty, "bad tty->count (%d)\n", tty->count);
1742 tty->count = 0;
1743 }
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754 tty_del_file(filp);
1755
1756
1757
1758
1759
1760
1761
1762
1763 if (!tty->count) {
1764 read_lock(&tasklist_lock);
1765 session_clear_tty(tty->session);
1766 if (o_tty)
1767 session_clear_tty(o_tty->session);
1768 read_unlock(&tasklist_lock);
1769 }
1770
1771
1772 final = !tty->count && !(o_tty && o_tty->count);
1773
1774 tty_unlock_slave(o_tty);
1775 tty_unlock(tty);
1776
1777
1778
1779
1780 if (!final)
1781 return 0;
1782
1783 tty_debug_hangup(tty, "final close\n");
1784
1785 tty_release_struct(tty, idx);
1786 return 0;
1787}
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800static struct tty_struct *tty_open_current_tty(dev_t device, struct file *filp)
1801{
1802 struct tty_struct *tty;
1803 int retval;
1804
1805 if (device != MKDEV(TTYAUX_MAJOR, 0))
1806 return NULL;
1807
1808 tty = get_current_tty();
1809 if (!tty)
1810 return ERR_PTR(-ENXIO);
1811
1812 filp->f_flags |= O_NONBLOCK;
1813
1814 tty_lock(tty);
1815 tty_kref_put(tty);
1816
1817 retval = tty_reopen(tty);
1818 if (retval < 0) {
1819 tty_unlock(tty);
1820 tty = ERR_PTR(retval);
1821 }
1822 return tty;
1823}
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837static struct tty_driver *tty_lookup_driver(dev_t device, struct file *filp,
1838 int *index)
1839{
1840 struct tty_driver *driver = NULL;
1841
1842 switch (device) {
1843#ifdef CONFIG_VT
1844 case MKDEV(TTY_MAJOR, 0): {
1845 extern struct tty_driver *console_driver;
1846 driver = tty_driver_kref_get(console_driver);
1847 *index = fg_console;
1848 break;
1849 }
1850#endif
1851 case MKDEV(TTYAUX_MAJOR, 1): {
1852 struct tty_driver *console_driver = console_device(index);
1853 if (console_driver) {
1854 driver = tty_driver_kref_get(console_driver);
1855 if (driver && filp) {
1856
1857 filp->f_flags |= O_NONBLOCK;
1858 break;
1859 }
1860 }
1861 if (driver)
1862 tty_driver_kref_put(driver);
1863 return ERR_PTR(-ENODEV);
1864 }
1865 default:
1866 driver = get_tty_driver(device, index);
1867 if (!driver)
1868 return ERR_PTR(-ENODEV);
1869 break;
1870 }
1871 return driver;
1872}
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889struct tty_struct *tty_kopen(dev_t device)
1890{
1891 struct tty_struct *tty;
1892 struct tty_driver *driver;
1893 int index = -1;
1894
1895 mutex_lock(&tty_mutex);
1896 driver = tty_lookup_driver(device, NULL, &index);
1897 if (IS_ERR(driver)) {
1898 mutex_unlock(&tty_mutex);
1899 return ERR_CAST(driver);
1900 }
1901
1902
1903 tty = tty_driver_lookup_tty(driver, NULL, index);
1904 if (IS_ERR(tty))
1905 goto out;
1906
1907 if (tty) {
1908
1909 tty_kref_put(tty);
1910 tty = ERR_PTR(-EBUSY);
1911 } else {
1912 tty = tty_init_dev(driver, index);
1913 if (IS_ERR(tty))
1914 goto out;
1915 tty_port_set_kopened(tty->port, 1);
1916 }
1917out:
1918 mutex_unlock(&tty_mutex);
1919 tty_driver_kref_put(driver);
1920 return tty;
1921}
1922EXPORT_SYMBOL_GPL(tty_kopen);
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939static struct tty_struct *tty_open_by_driver(dev_t device,
1940 struct file *filp)
1941{
1942 struct tty_struct *tty;
1943 struct tty_driver *driver = NULL;
1944 int index = -1;
1945 int retval;
1946
1947 mutex_lock(&tty_mutex);
1948 driver = tty_lookup_driver(device, filp, &index);
1949 if (IS_ERR(driver)) {
1950 mutex_unlock(&tty_mutex);
1951 return ERR_CAST(driver);
1952 }
1953
1954
1955 tty = tty_driver_lookup_tty(driver, filp, index);
1956 if (IS_ERR(tty)) {
1957 mutex_unlock(&tty_mutex);
1958 goto out;
1959 }
1960
1961 if (tty) {
1962 if (tty_port_kopened(tty->port)) {
1963 tty_kref_put(tty);
1964 mutex_unlock(&tty_mutex);
1965 tty = ERR_PTR(-EBUSY);
1966 goto out;
1967 }
1968 mutex_unlock(&tty_mutex);
1969 retval = tty_lock_interruptible(tty);
1970 tty_kref_put(tty);
1971 if (retval) {
1972 if (retval == -EINTR)
1973 retval = -ERESTARTSYS;
1974 tty = ERR_PTR(retval);
1975 goto out;
1976 }
1977 retval = tty_reopen(tty);
1978 if (retval < 0) {
1979 tty_unlock(tty);
1980 tty = ERR_PTR(retval);
1981 }
1982 } else {
1983 tty = tty_init_dev(driver, index);
1984 mutex_unlock(&tty_mutex);
1985 }
1986out:
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
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015static int tty_open(struct inode *inode, struct file *filp)
2016{
2017 struct tty_struct *tty;
2018 int noctty, retval;
2019 dev_t device = inode->i_rdev;
2020 unsigned saved_flags = filp->f_flags;
2021
2022 nonseekable_open(inode, filp);
2023
2024retry_open:
2025 retval = tty_alloc_file(filp);
2026 if (retval)
2027 return -ENOMEM;
2028
2029 tty = tty_open_current_tty(device, filp);
2030 if (!tty)
2031 tty = tty_open_by_driver(device, filp);
2032
2033 if (IS_ERR(tty)) {
2034 tty_free_file(filp);
2035 retval = PTR_ERR(tty);
2036 if (retval != -EAGAIN || signal_pending(current))
2037 return retval;
2038 schedule();
2039 goto retry_open;
2040 }
2041
2042 tty_add_file(tty, filp);
2043
2044 check_tty_count(tty, __func__);
2045 tty_debug_hangup(tty, "opening (count=%d)\n", tty->count);
2046
2047 if (tty->ops->open)
2048 retval = tty->ops->open(tty, filp);
2049 else
2050 retval = -ENODEV;
2051 filp->f_flags = saved_flags;
2052
2053 if (retval) {
2054 tty_debug_hangup(tty, "open error %d, releasing\n", retval);
2055
2056 tty_unlock(tty);
2057 tty_release(inode, filp);
2058 if (retval != -ERESTARTSYS)
2059 return retval;
2060
2061 if (signal_pending(current))
2062 return retval;
2063
2064 schedule();
2065
2066
2067
2068 if (tty_hung_up_p(filp))
2069 filp->f_op = &tty_fops;
2070 goto retry_open;
2071 }
2072 clear_bit(TTY_HUPPED, &tty->flags);
2073
2074 noctty = (filp->f_flags & O_NOCTTY) ||
2075 (IS_ENABLED(CONFIG_VT) && device == MKDEV(TTY_MAJOR, 0)) ||
2076 device == MKDEV(TTYAUX_MAJOR, 1) ||
2077 (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
2078 tty->driver->subtype == PTY_TYPE_MASTER);
2079 if (!noctty)
2080 tty_open_proc_set_tty(filp, tty);
2081 tty_unlock(tty);
2082 return 0;
2083}
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099static __poll_t tty_poll(struct file *filp, poll_table *wait)
2100{
2101 struct tty_struct *tty = file_tty(filp);
2102 struct tty_ldisc *ld;
2103 __poll_t ret = 0;
2104
2105 if (tty_paranoia_check(tty, file_inode(filp), "tty_poll"))
2106 return 0;
2107
2108 ld = tty_ldisc_ref_wait(tty);
2109 if (!ld)
2110 return hung_up_tty_poll(filp, wait);
2111 if (ld->ops->poll)
2112 ret = ld->ops->poll(tty, filp, wait);
2113 tty_ldisc_deref(ld);
2114 return ret;
2115}
2116
2117static int __tty_fasync(int fd, struct file *filp, int on)
2118{
2119 struct tty_struct *tty = file_tty(filp);
2120 unsigned long flags;
2121 int retval = 0;
2122
2123 if (tty_paranoia_check(tty, file_inode(filp), "tty_fasync"))
2124 goto out;
2125
2126 retval = fasync_helper(fd, filp, on, &tty->fasync);
2127 if (retval <= 0)
2128 goto out;
2129
2130 if (on) {
2131 enum pid_type type;
2132 struct pid *pid;
2133
2134 spin_lock_irqsave(&tty->ctrl_lock, flags);
2135 if (tty->pgrp) {
2136 pid = tty->pgrp;
2137 type = PIDTYPE_PGID;
2138 } else {
2139 pid = task_pid(current);
2140 type = PIDTYPE_TGID;
2141 }
2142 get_pid(pid);
2143 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
2144 __f_setown(filp, pid, type, 0);
2145 put_pid(pid);
2146 retval = 0;
2147 }
2148out:
2149 return retval;
2150}
2151
2152static int tty_fasync(int fd, struct file *filp, int on)
2153{
2154 struct tty_struct *tty = file_tty(filp);
2155 int retval = -ENOTTY;
2156
2157 tty_lock(tty);
2158 if (!tty_hung_up_p(filp))
2159 retval = __tty_fasync(fd, filp, on);
2160 tty_unlock(tty);
2161
2162 return retval;
2163}
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182static int tiocsti(struct tty_struct *tty, char __user *p)
2183{
2184 char ch, mbz = 0;
2185 struct tty_ldisc *ld;
2186
2187 if ((current->signal->tty != tty) && !capable(CAP_SYS_ADMIN))
2188 return -EPERM;
2189 if (get_user(ch, p))
2190 return -EFAULT;
2191 tty_audit_tiocsti(tty, ch);
2192 ld = tty_ldisc_ref_wait(tty);
2193 if (!ld)
2194 return -EIO;
2195 if (ld->ops->receive_buf)
2196 ld->ops->receive_buf(tty, &ch, &mbz, 1);
2197 tty_ldisc_deref(ld);
2198 return 0;
2199}
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212static int tiocgwinsz(struct tty_struct *tty, struct winsize __user *arg)
2213{
2214 int err;
2215
2216 mutex_lock(&tty->winsize_mutex);
2217 err = copy_to_user(arg, &tty->winsize, sizeof(*arg));
2218 mutex_unlock(&tty->winsize_mutex);
2219
2220 return err ? -EFAULT: 0;
2221}
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233int tty_do_resize(struct tty_struct *tty, struct winsize *ws)
2234{
2235 struct pid *pgrp;
2236
2237
2238 mutex_lock(&tty->winsize_mutex);
2239 if (!memcmp(ws, &tty->winsize, sizeof(*ws)))
2240 goto done;
2241
2242
2243 pgrp = tty_get_pgrp(tty);
2244 if (pgrp)
2245 kill_pgrp(pgrp, SIGWINCH, 1);
2246 put_pid(pgrp);
2247
2248 tty->winsize = *ws;
2249done:
2250 mutex_unlock(&tty->winsize_mutex);
2251 return 0;
2252}
2253EXPORT_SYMBOL(tty_do_resize);
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270static int tiocswinsz(struct tty_struct *tty, struct winsize __user *arg)
2271{
2272 struct winsize tmp_ws;
2273 if (copy_from_user(&tmp_ws, arg, sizeof(*arg)))
2274 return -EFAULT;
2275
2276 if (tty->ops->resize)
2277 return tty->ops->resize(tty, &tmp_ws);
2278 else
2279 return tty_do_resize(tty, &tmp_ws);
2280}
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291static int tioccons(struct file *file)
2292{
2293 if (!capable(CAP_SYS_ADMIN))
2294 return -EPERM;
2295 if (file->f_op->write == redirected_tty_write) {
2296 struct file *f;
2297 spin_lock(&redirect_lock);
2298 f = redirect;
2299 redirect = NULL;
2300 spin_unlock(&redirect_lock);
2301 if (f)
2302 fput(f);
2303 return 0;
2304 }
2305 spin_lock(&redirect_lock);
2306 if (redirect) {
2307 spin_unlock(&redirect_lock);
2308 return -EBUSY;
2309 }
2310 redirect = get_file(file);
2311 spin_unlock(&redirect_lock);
2312 return 0;
2313}
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325static int tiocsetd(struct tty_struct *tty, int __user *p)
2326{
2327 int disc;
2328 int ret;
2329
2330 if (get_user(disc, p))
2331 return -EFAULT;
2332
2333 ret = tty_set_ldisc(tty, disc);
2334
2335 return ret;
2336}
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349static int tiocgetd(struct tty_struct *tty, int __user *p)
2350{
2351 struct tty_ldisc *ld;
2352 int ret;
2353
2354 ld = tty_ldisc_ref_wait(tty);
2355 if (!ld)
2356 return -EIO;
2357 ret = put_user(ld->ops->num, p);
2358 tty_ldisc_deref(ld);
2359 return ret;
2360}
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375static int send_break(struct tty_struct *tty, unsigned int duration)
2376{
2377 int retval;
2378
2379 if (tty->ops->break_ctl == NULL)
2380 return 0;
2381
2382 if (tty->driver->flags & TTY_DRIVER_HARDWARE_BREAK)
2383 retval = tty->ops->break_ctl(tty, duration);
2384 else {
2385
2386 if (tty_write_lock(tty, 0) < 0)
2387 return -EINTR;
2388 retval = tty->ops->break_ctl(tty, -1);
2389 if (retval)
2390 goto out;
2391 if (!signal_pending(current))
2392 msleep_interruptible(duration);
2393 retval = tty->ops->break_ctl(tty, 0);
2394out:
2395 tty_write_unlock(tty);
2396 if (signal_pending(current))
2397 retval = -EINTR;
2398 }
2399 return retval;
2400}
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414static int tty_tiocmget(struct tty_struct *tty, int __user *p)
2415{
2416 int retval = -EINVAL;
2417
2418 if (tty->ops->tiocmget) {
2419 retval = tty->ops->tiocmget(tty);
2420
2421 if (retval >= 0)
2422 retval = put_user(retval, p);
2423 }
2424 return retval;
2425}
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439static int tty_tiocmset(struct tty_struct *tty, unsigned int cmd,
2440 unsigned __user *p)
2441{
2442 int retval;
2443 unsigned int set, clear, val;
2444
2445 if (tty->ops->tiocmset == NULL)
2446 return -EINVAL;
2447
2448 retval = get_user(val, p);
2449 if (retval)
2450 return retval;
2451 set = clear = 0;
2452 switch (cmd) {
2453 case TIOCMBIS:
2454 set = val;
2455 break;
2456 case TIOCMBIC:
2457 clear = val;
2458 break;
2459 case TIOCMSET:
2460 set = val;
2461 clear = ~val;
2462 break;
2463 }
2464 set &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP;
2465 clear &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP;
2466 return tty->ops->tiocmset(tty, set, clear);
2467}
2468
2469static int tty_tiocgicount(struct tty_struct *tty, void __user *arg)
2470{
2471 int retval = -EINVAL;
2472 struct serial_icounter_struct icount;
2473 memset(&icount, 0, sizeof(icount));
2474 if (tty->ops->get_icount)
2475 retval = tty->ops->get_icount(tty, &icount);
2476 if (retval != 0)
2477 return retval;
2478 if (copy_to_user(arg, &icount, sizeof(icount)))
2479 return -EFAULT;
2480 return 0;
2481}
2482
2483static int tty_tiocsserial(struct tty_struct *tty, struct serial_struct __user *ss)
2484{
2485 static DEFINE_RATELIMIT_STATE(depr_flags,
2486 DEFAULT_RATELIMIT_INTERVAL,
2487 DEFAULT_RATELIMIT_BURST);
2488 char comm[TASK_COMM_LEN];
2489 struct serial_struct v;
2490 int flags;
2491
2492 if (copy_from_user(&v, ss, sizeof(struct serial_struct)))
2493 return -EFAULT;
2494
2495 flags = v.flags & ASYNC_DEPRECATED;
2496
2497 if (flags && __ratelimit(&depr_flags))
2498 pr_warn("%s: '%s' is using deprecated serial flags (with no effect): %.8x\n",
2499 __func__, get_task_comm(comm, current), flags);
2500 if (!tty->ops->set_serial)
2501 return -ENOTTY;
2502 return tty->ops->set_serial(tty, &v);
2503}
2504
2505static int tty_tiocgserial(struct tty_struct *tty, struct serial_struct __user *ss)
2506{
2507 struct serial_struct v;
2508 int err;
2509
2510 memset(&v, 0, sizeof(struct serial_struct));
2511 if (!tty->ops->get_serial)
2512 return -ENOTTY;
2513 err = tty->ops->get_serial(tty, &v);
2514 if (!err && copy_to_user(ss, &v, sizeof(struct serial_struct)))
2515 err = -EFAULT;
2516 return err;
2517}
2518
2519
2520
2521
2522
2523static struct tty_struct *tty_pair_get_tty(struct tty_struct *tty)
2524{
2525 if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
2526 tty->driver->subtype == PTY_TYPE_MASTER)
2527 tty = tty->link;
2528 return tty;
2529}
2530
2531
2532
2533
2534long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
2535{
2536 struct tty_struct *tty = file_tty(file);
2537 struct tty_struct *real_tty;
2538 void __user *p = (void __user *)arg;
2539 int retval;
2540 struct tty_ldisc *ld;
2541
2542 if (tty_paranoia_check(tty, file_inode(file), "tty_ioctl"))
2543 return -EINVAL;
2544
2545 real_tty = tty_pair_get_tty(tty);
2546
2547
2548
2549
2550 switch (cmd) {
2551 case TIOCSETD:
2552 case TIOCSBRK:
2553 case TIOCCBRK:
2554 case TCSBRK:
2555 case TCSBRKP:
2556 retval = tty_check_change(tty);
2557 if (retval)
2558 return retval;
2559 if (cmd != TIOCCBRK) {
2560 tty_wait_until_sent(tty, 0);
2561 if (signal_pending(current))
2562 return -EINTR;
2563 }
2564 break;
2565 }
2566
2567
2568
2569
2570 switch (cmd) {
2571 case TIOCSTI:
2572 return tiocsti(tty, p);
2573 case TIOCGWINSZ:
2574 return tiocgwinsz(real_tty, p);
2575 case TIOCSWINSZ:
2576 return tiocswinsz(real_tty, p);
2577 case TIOCCONS:
2578 return real_tty != tty ? -EINVAL : tioccons(file);
2579 case TIOCEXCL:
2580 set_bit(TTY_EXCLUSIVE, &tty->flags);
2581 return 0;
2582 case TIOCNXCL:
2583 clear_bit(TTY_EXCLUSIVE, &tty->flags);
2584 return 0;
2585 case TIOCGEXCL:
2586 {
2587 int excl = test_bit(TTY_EXCLUSIVE, &tty->flags);
2588 return put_user(excl, (int __user *)p);
2589 }
2590 case TIOCGETD:
2591 return tiocgetd(tty, p);
2592 case TIOCSETD:
2593 return tiocsetd(tty, p);
2594 case TIOCVHANGUP:
2595 if (!capable(CAP_SYS_ADMIN))
2596 return -EPERM;
2597 tty_vhangup(tty);
2598 return 0;
2599 case TIOCGDEV:
2600 {
2601 unsigned int ret = new_encode_dev(tty_devnum(real_tty));
2602 return put_user(ret, (unsigned int __user *)p);
2603 }
2604
2605
2606
2607 case TIOCSBRK:
2608 if (tty->ops->break_ctl)
2609 return tty->ops->break_ctl(tty, -1);
2610 return 0;
2611 case TIOCCBRK:
2612 if (tty->ops->break_ctl)
2613 return tty->ops->break_ctl(tty, 0);
2614 return 0;
2615 case TCSBRK:
2616
2617
2618
2619
2620 if (!arg)
2621 return send_break(tty, 250);
2622 return 0;
2623 case TCSBRKP:
2624 return send_break(tty, arg ? arg*100 : 250);
2625
2626 case TIOCMGET:
2627 return tty_tiocmget(tty, p);
2628 case TIOCMSET:
2629 case TIOCMBIC:
2630 case TIOCMBIS:
2631 return tty_tiocmset(tty, cmd, p);
2632 case TIOCGICOUNT:
2633 return tty_tiocgicount(tty, p);
2634 case TCFLSH:
2635 switch (arg) {
2636 case TCIFLUSH:
2637 case TCIOFLUSH:
2638
2639 tty_buffer_flush(tty, NULL);
2640 break;
2641 }
2642 break;
2643 case TIOCSSERIAL:
2644 return tty_tiocsserial(tty, p);
2645 case TIOCGSERIAL:
2646 return tty_tiocgserial(tty, p);
2647 case TIOCGPTPEER:
2648
2649 return ptm_open_peer(file, tty, (int)arg);
2650 default:
2651 retval = tty_jobctrl_ioctl(tty, real_tty, file, cmd, arg);
2652 if (retval != -ENOIOCTLCMD)
2653 return retval;
2654 }
2655 if (tty->ops->ioctl) {
2656 retval = tty->ops->ioctl(tty, cmd, arg);
2657 if (retval != -ENOIOCTLCMD)
2658 return retval;
2659 }
2660 ld = tty_ldisc_ref_wait(tty);
2661 if (!ld)
2662 return hung_up_tty_ioctl(file, cmd, arg);
2663 retval = -EINVAL;
2664 if (ld->ops->ioctl) {
2665 retval = ld->ops->ioctl(tty, file, cmd, arg);
2666 if (retval == -ENOIOCTLCMD)
2667 retval = -ENOTTY;
2668 }
2669 tty_ldisc_deref(ld);
2670 return retval;
2671}
2672
2673#ifdef CONFIG_COMPAT
2674
2675struct serial_struct32 {
2676 compat_int_t type;
2677 compat_int_t line;
2678 compat_uint_t port;
2679 compat_int_t irq;
2680 compat_int_t flags;
2681 compat_int_t xmit_fifo_size;
2682 compat_int_t custom_divisor;
2683 compat_int_t baud_base;
2684 unsigned short close_delay;
2685 char io_type;
2686 char reserved_char[1];
2687 compat_int_t hub6;
2688 unsigned short closing_wait;
2689 unsigned short closing_wait2;
2690 compat_uint_t iomem_base;
2691 unsigned short iomem_reg_shift;
2692 unsigned int port_high;
2693
2694 compat_int_t reserved[1];
2695};
2696
2697static int compat_tty_tiocsserial(struct tty_struct *tty,
2698 struct serial_struct32 __user *ss)
2699{
2700 static DEFINE_RATELIMIT_STATE(depr_flags,
2701 DEFAULT_RATELIMIT_INTERVAL,
2702 DEFAULT_RATELIMIT_BURST);
2703 char comm[TASK_COMM_LEN];
2704 struct serial_struct32 v32;
2705 struct serial_struct v;
2706 int flags;
2707
2708 if (copy_from_user(&v32, ss, sizeof(struct serial_struct32)))
2709 return -EFAULT;
2710
2711 memcpy(&v, &v32, offsetof(struct serial_struct32, iomem_base));
2712 v.iomem_base = compat_ptr(v32.iomem_base);
2713 v.iomem_reg_shift = v32.iomem_reg_shift;
2714 v.port_high = v32.port_high;
2715 v.iomap_base = 0;
2716
2717 flags = v.flags & ASYNC_DEPRECATED;
2718
2719 if (flags && __ratelimit(&depr_flags))
2720 pr_warn("%s: '%s' is using deprecated serial flags (with no effect): %.8x\n",
2721 __func__, get_task_comm(comm, current), flags);
2722 if (!tty->ops->set_serial)
2723 return -ENOTTY;
2724 return tty->ops->set_serial(tty, &v);
2725}
2726
2727static int compat_tty_tiocgserial(struct tty_struct *tty,
2728 struct serial_struct32 __user *ss)
2729{
2730 struct serial_struct32 v32;
2731 struct serial_struct v;
2732 int err;
2733
2734 memset(&v, 0, sizeof(v));
2735 memset(&v32, 0, sizeof(v32));
2736
2737 if (!tty->ops->get_serial)
2738 return -ENOTTY;
2739 err = tty->ops->get_serial(tty, &v);
2740 if (!err) {
2741 memcpy(&v32, &v, offsetof(struct serial_struct32, iomem_base));
2742 v32.iomem_base = (unsigned long)v.iomem_base >> 32 ?
2743 0xfffffff : ptr_to_compat(v.iomem_base);
2744 v32.iomem_reg_shift = v.iomem_reg_shift;
2745 v32.port_high = v.port_high;
2746 if (copy_to_user(ss, &v32, sizeof(struct serial_struct32)))
2747 err = -EFAULT;
2748 }
2749 return err;
2750}
2751static long tty_compat_ioctl(struct file *file, unsigned int cmd,
2752 unsigned long arg)
2753{
2754 struct tty_struct *tty = file_tty(file);
2755 struct tty_ldisc *ld;
2756 int retval = -ENOIOCTLCMD;
2757
2758 switch (cmd) {
2759 case TIOCOUTQ:
2760 case TIOCSTI:
2761 case TIOCGWINSZ:
2762 case TIOCSWINSZ:
2763 case TIOCGEXCL:
2764 case TIOCGETD:
2765 case TIOCSETD:
2766 case TIOCGDEV:
2767 case TIOCMGET:
2768 case TIOCMSET:
2769 case TIOCMBIC:
2770 case TIOCMBIS:
2771 case TIOCGICOUNT:
2772 case TIOCGPGRP:
2773 case TIOCSPGRP:
2774 case TIOCGSID:
2775 case TIOCSERGETLSR:
2776 case TIOCGRS485:
2777 case TIOCSRS485:
2778#ifdef TIOCGETP
2779 case TIOCGETP:
2780 case TIOCSETP:
2781 case TIOCSETN:
2782#endif
2783#ifdef TIOCGETC
2784 case TIOCGETC:
2785 case TIOCSETC:
2786#endif
2787#ifdef TIOCGLTC
2788 case TIOCGLTC:
2789 case TIOCSLTC:
2790#endif
2791 case TCSETSF:
2792 case TCSETSW:
2793 case TCSETS:
2794 case TCGETS:
2795#ifdef TCGETS2
2796 case TCGETS2:
2797 case TCSETSF2:
2798 case TCSETSW2:
2799 case TCSETS2:
2800#endif
2801 case TCGETA:
2802 case TCSETAF:
2803 case TCSETAW:
2804 case TCSETA:
2805 case TIOCGLCKTRMIOS:
2806 case TIOCSLCKTRMIOS:
2807#ifdef TCGETX
2808 case TCGETX:
2809 case TCSETX:
2810 case TCSETXW:
2811 case TCSETXF:
2812#endif
2813 case TIOCGSOFTCAR:
2814 case TIOCSSOFTCAR:
2815
2816 case PPPIOCGCHAN:
2817 case PPPIOCGUNIT:
2818 return tty_ioctl(file, cmd, (unsigned long)compat_ptr(arg));
2819 case TIOCCONS:
2820 case TIOCEXCL:
2821 case TIOCNXCL:
2822 case TIOCVHANGUP:
2823 case TIOCSBRK:
2824 case TIOCCBRK:
2825 case TCSBRK:
2826 case TCSBRKP:
2827 case TCFLSH:
2828 case TIOCGPTPEER:
2829 case TIOCNOTTY:
2830 case TIOCSCTTY:
2831 case TCXONC:
2832 case TIOCMIWAIT:
2833 case TIOCSERCONFIG:
2834 return tty_ioctl(file, cmd, arg);
2835 }
2836
2837 if (tty_paranoia_check(tty, file_inode(file), "tty_ioctl"))
2838 return -EINVAL;
2839
2840 switch (cmd) {
2841 case TIOCSSERIAL:
2842 return compat_tty_tiocsserial(tty, compat_ptr(arg));
2843 case TIOCGSERIAL:
2844 return compat_tty_tiocgserial(tty, compat_ptr(arg));
2845 }
2846 if (tty->ops->compat_ioctl) {
2847 retval = tty->ops->compat_ioctl(tty, cmd, arg);
2848 if (retval != -ENOIOCTLCMD)
2849 return retval;
2850 }
2851
2852 ld = tty_ldisc_ref_wait(tty);
2853 if (!ld)
2854 return hung_up_tty_compat_ioctl(file, cmd, arg);
2855 if (ld->ops->compat_ioctl)
2856 retval = ld->ops->compat_ioctl(tty, file, cmd, arg);
2857 if (retval == -ENOIOCTLCMD && ld->ops->ioctl)
2858 retval = ld->ops->ioctl(tty, file,
2859 (unsigned long)compat_ptr(cmd), arg);
2860 tty_ldisc_deref(ld);
2861
2862 return retval;
2863}
2864#endif
2865
2866static int this_tty(const void *t, struct file *file, unsigned fd)
2867{
2868 if (likely(file->f_op->read != tty_read))
2869 return 0;
2870 return file_tty(file) != t ? 0 : fd + 1;
2871}
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892void __do_SAK(struct tty_struct *tty)
2893{
2894#ifdef TTY_SOFT_SAK
2895 tty_hangup(tty);
2896#else
2897 struct task_struct *g, *p;
2898 struct pid *session;
2899 int i;
2900
2901 if (!tty)
2902 return;
2903 session = tty->session;
2904
2905 tty_ldisc_flush(tty);
2906
2907 tty_driver_flush_buffer(tty);
2908
2909 read_lock(&tasklist_lock);
2910
2911 do_each_pid_task(session, PIDTYPE_SID, p) {
2912 tty_notice(tty, "SAK: killed process %d (%s): by session\n",
2913 task_pid_nr(p), p->comm);
2914 group_send_sig_info(SIGKILL, SEND_SIG_PRIV, p, PIDTYPE_SID);
2915 } while_each_pid_task(session, PIDTYPE_SID, p);
2916
2917
2918 do_each_thread(g, p) {
2919 if (p->signal->tty == tty) {
2920 tty_notice(tty, "SAK: killed process %d (%s): by controlling tty\n",
2921 task_pid_nr(p), p->comm);
2922 group_send_sig_info(SIGKILL, SEND_SIG_PRIV, p, PIDTYPE_SID);
2923 continue;
2924 }
2925 task_lock(p);
2926 i = iterate_fd(p->files, 0, this_tty, tty);
2927 if (i != 0) {
2928 tty_notice(tty, "SAK: killed process %d (%s): by fd#%d\n",
2929 task_pid_nr(p), p->comm, i - 1);
2930 group_send_sig_info(SIGKILL, SEND_SIG_PRIV, p, PIDTYPE_SID);
2931 }
2932 task_unlock(p);
2933 } while_each_thread(g, p);
2934 read_unlock(&tasklist_lock);
2935#endif
2936}
2937
2938static void do_SAK_work(struct work_struct *work)
2939{
2940 struct tty_struct *tty =
2941 container_of(work, struct tty_struct, SAK_work);
2942 __do_SAK(tty);
2943}
2944
2945
2946
2947
2948
2949
2950
2951void do_SAK(struct tty_struct *tty)
2952{
2953 if (!tty)
2954 return;
2955 schedule_work(&tty->SAK_work);
2956}
2957
2958EXPORT_SYMBOL(do_SAK);
2959
2960
2961static struct device *tty_get_device(struct tty_struct *tty)
2962{
2963 dev_t devt = tty_devnum(tty);
2964 return class_find_device_by_devt(tty_class, devt);
2965}
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976struct tty_struct *alloc_tty_struct(struct tty_driver *driver, int idx)
2977{
2978 struct tty_struct *tty;
2979
2980 tty = kzalloc(sizeof(*tty), GFP_KERNEL);
2981 if (!tty)
2982 return NULL;
2983
2984 kref_init(&tty->kref);
2985 tty->magic = TTY_MAGIC;
2986 if (tty_ldisc_init(tty)) {
2987 kfree(tty);
2988 return NULL;
2989 }
2990 tty->session = NULL;
2991 tty->pgrp = NULL;
2992 mutex_init(&tty->legacy_mutex);
2993 mutex_init(&tty->throttle_mutex);
2994 init_rwsem(&tty->termios_rwsem);
2995 mutex_init(&tty->winsize_mutex);
2996 init_ldsem(&tty->ldisc_sem);
2997 init_waitqueue_head(&tty->write_wait);
2998 init_waitqueue_head(&tty->read_wait);
2999 INIT_WORK(&tty->hangup_work, do_tty_hangup);
3000 mutex_init(&tty->atomic_write_lock);
3001 spin_lock_init(&tty->ctrl_lock);
3002 spin_lock_init(&tty->flow_lock);
3003 spin_lock_init(&tty->files_lock);
3004 INIT_LIST_HEAD(&tty->tty_files);
3005 INIT_WORK(&tty->SAK_work, do_SAK_work);
3006
3007 tty->driver = driver;
3008 tty->ops = driver->ops;
3009 tty->index = idx;
3010 tty_line_name(driver, idx, tty->name);
3011 tty->dev = tty_get_device(tty);
3012
3013 return tty;
3014}
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028int tty_put_char(struct tty_struct *tty, unsigned char ch)
3029{
3030 if (tty->ops->put_char)
3031 return tty->ops->put_char(tty, ch);
3032 return tty->ops->write(tty, &ch, 1);
3033}
3034EXPORT_SYMBOL_GPL(tty_put_char);
3035
3036struct class *tty_class;
3037
3038static int tty_cdev_add(struct tty_driver *driver, dev_t dev,
3039 unsigned int index, unsigned int count)
3040{
3041 int err;
3042
3043
3044 driver->cdevs[index] = cdev_alloc();
3045 if (!driver->cdevs[index])
3046 return -ENOMEM;
3047 driver->cdevs[index]->ops = &tty_fops;
3048 driver->cdevs[index]->owner = driver->owner;
3049 err = cdev_add(driver->cdevs[index], dev, count);
3050 if (err)
3051 kobject_put(&driver->cdevs[index]->kobj);
3052 return err;
3053}
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074struct device *tty_register_device(struct tty_driver *driver, unsigned index,
3075 struct device *device)
3076{
3077 return tty_register_device_attr(driver, index, device, NULL, NULL);
3078}
3079EXPORT_SYMBOL(tty_register_device);
3080
3081static void tty_device_create_release(struct device *dev)
3082{
3083 dev_dbg(dev, "releasing...\n");
3084 kfree(dev);
3085}
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107struct device *tty_register_device_attr(struct tty_driver *driver,
3108 unsigned index, struct device *device,
3109 void *drvdata,
3110 const struct attribute_group **attr_grp)
3111{
3112 char name[64];
3113 dev_t devt = MKDEV(driver->major, driver->minor_start) + index;
3114 struct ktermios *tp;
3115 struct device *dev;
3116 int retval;
3117
3118 if (index >= driver->num) {
3119 pr_err("%s: Attempt to register invalid tty line number (%d)\n",
3120 driver->name, index);
3121 return ERR_PTR(-EINVAL);
3122 }
3123
3124 if (driver->type == TTY_DRIVER_TYPE_PTY)
3125 pty_line_name(driver, index, name);
3126 else
3127 tty_line_name(driver, index, name);
3128
3129 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
3130 if (!dev)
3131 return ERR_PTR(-ENOMEM);
3132
3133 dev->devt = devt;
3134 dev->class = tty_class;
3135 dev->parent = device;
3136 dev->release = tty_device_create_release;
3137 dev_set_name(dev, "%s", name);
3138 dev->groups = attr_grp;
3139 dev_set_drvdata(dev, drvdata);
3140
3141 dev_set_uevent_suppress(dev, 1);
3142
3143 retval = device_register(dev);
3144 if (retval)
3145 goto err_put;
3146
3147 if (!(driver->flags & TTY_DRIVER_DYNAMIC_ALLOC)) {
3148
3149
3150
3151
3152 tp = driver->termios[index];
3153 if (tp) {
3154 driver->termios[index] = NULL;
3155 kfree(tp);
3156 }
3157
3158 retval = tty_cdev_add(driver, devt, index, 1);
3159 if (retval)
3160 goto err_del;
3161 }
3162
3163 dev_set_uevent_suppress(dev, 0);
3164 kobject_uevent(&dev->kobj, KOBJ_ADD);
3165
3166 return dev;
3167
3168err_del:
3169 device_del(dev);
3170err_put:
3171 put_device(dev);
3172
3173 return ERR_PTR(retval);
3174}
3175EXPORT_SYMBOL_GPL(tty_register_device_attr);
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188void tty_unregister_device(struct tty_driver *driver, unsigned index)
3189{
3190 device_destroy(tty_class,
3191 MKDEV(driver->major, driver->minor_start) + index);
3192 if (!(driver->flags & TTY_DRIVER_DYNAMIC_ALLOC)) {
3193 cdev_del(driver->cdevs[index]);
3194 driver->cdevs[index] = NULL;
3195 }
3196}
3197EXPORT_SYMBOL(tty_unregister_device);
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208struct tty_driver *__tty_alloc_driver(unsigned int lines, struct module *owner,
3209 unsigned long flags)
3210{
3211 struct tty_driver *driver;
3212 unsigned int cdevs = 1;
3213 int err;
3214
3215 if (!lines || (flags & TTY_DRIVER_UNNUMBERED_NODE && lines > 1))
3216 return ERR_PTR(-EINVAL);
3217
3218 driver = kzalloc(sizeof(struct tty_driver), GFP_KERNEL);
3219 if (!driver)
3220 return ERR_PTR(-ENOMEM);
3221
3222 kref_init(&driver->kref);
3223 driver->magic = TTY_DRIVER_MAGIC;
3224 driver->num = lines;
3225 driver->owner = owner;
3226 driver->flags = flags;
3227
3228 if (!(flags & TTY_DRIVER_DEVPTS_MEM)) {
3229 driver->ttys = kcalloc(lines, sizeof(*driver->ttys),
3230 GFP_KERNEL);
3231 driver->termios = kcalloc(lines, sizeof(*driver->termios),
3232 GFP_KERNEL);
3233 if (!driver->ttys || !driver->termios) {
3234 err = -ENOMEM;
3235 goto err_free_all;
3236 }
3237 }
3238
3239 if (!(flags & TTY_DRIVER_DYNAMIC_ALLOC)) {
3240 driver->ports = kcalloc(lines, sizeof(*driver->ports),
3241 GFP_KERNEL);
3242 if (!driver->ports) {
3243 err = -ENOMEM;
3244 goto err_free_all;
3245 }
3246 cdevs = lines;
3247 }
3248
3249 driver->cdevs = kcalloc(cdevs, sizeof(*driver->cdevs), GFP_KERNEL);
3250 if (!driver->cdevs) {
3251 err = -ENOMEM;
3252 goto err_free_all;
3253 }
3254
3255 return driver;
3256err_free_all:
3257 kfree(driver->ports);
3258 kfree(driver->ttys);
3259 kfree(driver->termios);
3260 kfree(driver->cdevs);
3261 kfree(driver);
3262 return ERR_PTR(err);
3263}
3264EXPORT_SYMBOL(__tty_alloc_driver);
3265
3266static void destruct_tty_driver(struct kref *kref)
3267{
3268 struct tty_driver *driver = container_of(kref, struct tty_driver, kref);
3269 int i;
3270 struct ktermios *tp;
3271
3272 if (driver->flags & TTY_DRIVER_INSTALLED) {
3273 for (i = 0; i < driver->num; i++) {
3274 tp = driver->termios[i];
3275 if (tp) {
3276 driver->termios[i] = NULL;
3277 kfree(tp);
3278 }
3279 if (!(driver->flags & TTY_DRIVER_DYNAMIC_DEV))
3280 tty_unregister_device(driver, i);
3281 }
3282 proc_tty_unregister_driver(driver);
3283 if (driver->flags & TTY_DRIVER_DYNAMIC_ALLOC)
3284 cdev_del(driver->cdevs[0]);
3285 }
3286 kfree(driver->cdevs);
3287 kfree(driver->ports);
3288 kfree(driver->termios);
3289 kfree(driver->ttys);
3290 kfree(driver);
3291}
3292
3293void tty_driver_kref_put(struct tty_driver *driver)
3294{
3295 kref_put(&driver->kref, destruct_tty_driver);
3296}
3297EXPORT_SYMBOL(tty_driver_kref_put);
3298
3299void tty_set_operations(struct tty_driver *driver,
3300 const struct tty_operations *op)
3301{
3302 driver->ops = op;
3303};
3304EXPORT_SYMBOL(tty_set_operations);
3305
3306void put_tty_driver(struct tty_driver *d)
3307{
3308 tty_driver_kref_put(d);
3309}
3310EXPORT_SYMBOL(put_tty_driver);
3311
3312
3313
3314
3315int tty_register_driver(struct tty_driver *driver)
3316{
3317 int error;
3318 int i;
3319 dev_t dev;
3320 struct device *d;
3321
3322 if (!driver->major) {
3323 error = alloc_chrdev_region(&dev, driver->minor_start,
3324 driver->num, driver->name);
3325 if (!error) {
3326 driver->major = MAJOR(dev);
3327 driver->minor_start = MINOR(dev);
3328 }
3329 } else {
3330 dev = MKDEV(driver->major, driver->minor_start);
3331 error = register_chrdev_region(dev, driver->num, driver->name);
3332 }
3333 if (error < 0)
3334 goto err;
3335
3336 if (driver->flags & TTY_DRIVER_DYNAMIC_ALLOC) {
3337 error = tty_cdev_add(driver, dev, 0, driver->num);
3338 if (error)
3339 goto err_unreg_char;
3340 }
3341
3342 mutex_lock(&tty_mutex);
3343 list_add(&driver->tty_drivers, &tty_drivers);
3344 mutex_unlock(&tty_mutex);
3345
3346 if (!(driver->flags & TTY_DRIVER_DYNAMIC_DEV)) {
3347 for (i = 0; i < driver->num; i++) {
3348 d = tty_register_device(driver, i, NULL);
3349 if (IS_ERR(d)) {
3350 error = PTR_ERR(d);
3351 goto err_unreg_devs;
3352 }
3353 }
3354 }
3355 proc_tty_register_driver(driver);
3356 driver->flags |= TTY_DRIVER_INSTALLED;
3357 return 0;
3358
3359err_unreg_devs:
3360 for (i--; i >= 0; i--)
3361 tty_unregister_device(driver, i);
3362
3363 mutex_lock(&tty_mutex);
3364 list_del(&driver->tty_drivers);
3365 mutex_unlock(&tty_mutex);
3366
3367err_unreg_char:
3368 unregister_chrdev_region(dev, driver->num);
3369err:
3370 return error;
3371}
3372EXPORT_SYMBOL(tty_register_driver);
3373
3374
3375
3376
3377int tty_unregister_driver(struct tty_driver *driver)
3378{
3379#if 0
3380
3381 if (driver->refcount)
3382 return -EBUSY;
3383#endif
3384 unregister_chrdev_region(MKDEV(driver->major, driver->minor_start),
3385 driver->num);
3386 mutex_lock(&tty_mutex);
3387 list_del(&driver->tty_drivers);
3388 mutex_unlock(&tty_mutex);
3389 return 0;
3390}
3391
3392EXPORT_SYMBOL(tty_unregister_driver);
3393
3394dev_t tty_devnum(struct tty_struct *tty)
3395{
3396 return MKDEV(tty->driver->major, tty->driver->minor_start) + tty->index;
3397}
3398EXPORT_SYMBOL(tty_devnum);
3399
3400void tty_default_fops(struct file_operations *fops)
3401{
3402 *fops = tty_fops;
3403}
3404
3405static char *tty_devnode(struct device *dev, umode_t *mode)
3406{
3407 if (!mode)
3408 return NULL;
3409 if (dev->devt == MKDEV(TTYAUX_MAJOR, 0) ||
3410 dev->devt == MKDEV(TTYAUX_MAJOR, 2))
3411 *mode = 0666;
3412 return NULL;
3413}
3414
3415static int __init tty_class_init(void)
3416{
3417 tty_class = class_create(THIS_MODULE, "tty");
3418 if (IS_ERR(tty_class))
3419 return PTR_ERR(tty_class);
3420 tty_class->devnode = tty_devnode;
3421 return 0;
3422}
3423
3424postcore_initcall(tty_class_init);
3425
3426
3427static struct cdev tty_cdev, console_cdev;
3428
3429static ssize_t show_cons_active(struct device *dev,
3430 struct device_attribute *attr, char *buf)
3431{
3432 struct console *cs[16];
3433 int i = 0;
3434 struct console *c;
3435 ssize_t count = 0;
3436
3437 console_lock();
3438 for_each_console(c) {
3439 if (!c->device)
3440 continue;
3441 if (!c->write)
3442 continue;
3443 if ((c->flags & CON_ENABLED) == 0)
3444 continue;
3445 cs[i++] = c;
3446 if (i >= ARRAY_SIZE(cs))
3447 break;
3448 }
3449 while (i--) {
3450 int index = cs[i]->index;
3451 struct tty_driver *drv = cs[i]->device(cs[i], &index);
3452
3453
3454 if (drv && (cs[i]->index > 0 || drv->major != TTY_MAJOR))
3455 count += tty_line_name(drv, index, buf + count);
3456 else
3457 count += sprintf(buf + count, "%s%d",
3458 cs[i]->name, cs[i]->index);
3459
3460 count += sprintf(buf + count, "%c", i ? ' ':'\n');
3461 }
3462 console_unlock();
3463
3464 return count;
3465}
3466static DEVICE_ATTR(active, S_IRUGO, show_cons_active, NULL);
3467
3468static struct attribute *cons_dev_attrs[] = {
3469 &dev_attr_active.attr,
3470 NULL
3471};
3472
3473ATTRIBUTE_GROUPS(cons_dev);
3474
3475static struct device *consdev;
3476
3477void console_sysfs_notify(void)
3478{
3479 if (consdev)
3480 sysfs_notify(&consdev->kobj, NULL, "active");
3481}
3482
3483
3484
3485
3486
3487int __init tty_init(void)
3488{
3489 tty_sysctl_init();
3490 cdev_init(&tty_cdev, &tty_fops);
3491 if (cdev_add(&tty_cdev, MKDEV(TTYAUX_MAJOR, 0), 1) ||
3492 register_chrdev_region(MKDEV(TTYAUX_MAJOR, 0), 1, "/dev/tty") < 0)
3493 panic("Couldn't register /dev/tty driver\n");
3494 device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 0), NULL, "tty");
3495
3496 cdev_init(&console_cdev, &console_fops);
3497 if (cdev_add(&console_cdev, MKDEV(TTYAUX_MAJOR, 1), 1) ||
3498 register_chrdev_region(MKDEV(TTYAUX_MAJOR, 1), 1, "/dev/console") < 0)
3499 panic("Couldn't register /dev/console driver\n");
3500 consdev = device_create_with_groups(tty_class, NULL,
3501 MKDEV(TTYAUX_MAJOR, 1), NULL,
3502 cons_dev_groups, "console");
3503 if (IS_ERR(consdev))
3504 consdev = NULL;
3505
3506#ifdef CONFIG_VT
3507 vty_init(&console_fops);
3508#endif
3509 return 0;
3510}
3511
3512