Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
tty_ldisc.c
Go to the documentation of this file.
1 #include <linux/types.h>
2 #include <linux/errno.h>
3 #include <linux/kmod.h>
4 #include <linux/sched.h>
5 #include <linux/interrupt.h>
6 #include <linux/tty.h>
7 #include <linux/tty_driver.h>
8 #include <linux/file.h>
9 #include <linux/mm.h>
10 #include <linux/string.h>
11 #include <linux/slab.h>
12 #include <linux/poll.h>
13 #include <linux/proc_fs.h>
14 #include <linux/init.h>
15 #include <linux/module.h>
16 #include <linux/device.h>
17 #include <linux/wait.h>
18 #include <linux/bitops.h>
19 #include <linux/seq_file.h>
20 #include <linux/uaccess.h>
21 #include <linux/ratelimit.h>
22 
23 /*
24  * This guards the refcounted line discipline lists. The lock
25  * must be taken with irqs off because there are hangup path
26  * callers who will do ldisc lookups and cannot sleep.
27  */
28 
29 static DEFINE_SPINLOCK(tty_ldisc_lock);
30 static DECLARE_WAIT_QUEUE_HEAD(tty_ldisc_wait);
31 /* Line disc dispatch table */
32 static struct tty_ldisc_ops *tty_ldiscs[NR_LDISCS];
33 
34 static inline struct tty_ldisc *get_ldisc(struct tty_ldisc *ld)
35 {
36  if (ld)
37  atomic_inc(&ld->users);
38  return ld;
39 }
40 
41 static void put_ldisc(struct tty_ldisc *ld)
42 {
43  unsigned long flags;
44 
45  if (WARN_ON_ONCE(!ld))
46  return;
47 
48  /*
49  * If this is the last user, free the ldisc, and
50  * release the ldisc ops.
51  *
52  * We really want an "atomic_dec_and_lock_irqsave()",
53  * but we don't have it, so this does it by hand.
54  */
55  local_irq_save(flags);
56  if (atomic_dec_and_lock(&ld->users, &tty_ldisc_lock)) {
57  struct tty_ldisc_ops *ldo = ld->ops;
58 
59  ldo->refcount--;
60  module_put(ldo->owner);
61  spin_unlock_irqrestore(&tty_ldisc_lock, flags);
62 
63  kfree(ld);
64  return;
65  }
66  local_irq_restore(flags);
67  wake_up(&ld->wq_idle);
68 }
69 
83 int tty_register_ldisc(int disc, struct tty_ldisc_ops *new_ldisc)
84 {
85  unsigned long flags;
86  int ret = 0;
87 
88  if (disc < N_TTY || disc >= NR_LDISCS)
89  return -EINVAL;
90 
91  spin_lock_irqsave(&tty_ldisc_lock, flags);
92  tty_ldiscs[disc] = new_ldisc;
93  new_ldisc->num = disc;
94  new_ldisc->refcount = 0;
95  spin_unlock_irqrestore(&tty_ldisc_lock, flags);
96 
97  return ret;
98 }
100 
113 int tty_unregister_ldisc(int disc)
114 {
115  unsigned long flags;
116  int ret = 0;
117 
118  if (disc < N_TTY || disc >= NR_LDISCS)
119  return -EINVAL;
120 
121  spin_lock_irqsave(&tty_ldisc_lock, flags);
122  if (tty_ldiscs[disc]->refcount)
123  ret = -EBUSY;
124  else
125  tty_ldiscs[disc] = NULL;
126  spin_unlock_irqrestore(&tty_ldisc_lock, flags);
127 
128  return ret;
129 }
131 
132 static struct tty_ldisc_ops *get_ldops(int disc)
133 {
134  unsigned long flags;
135  struct tty_ldisc_ops *ldops, *ret;
136 
137  spin_lock_irqsave(&tty_ldisc_lock, flags);
138  ret = ERR_PTR(-EINVAL);
139  ldops = tty_ldiscs[disc];
140  if (ldops) {
141  ret = ERR_PTR(-EAGAIN);
142  if (try_module_get(ldops->owner)) {
143  ldops->refcount++;
144  ret = ldops;
145  }
146  }
147  spin_unlock_irqrestore(&tty_ldisc_lock, flags);
148  return ret;
149 }
150 
151 static void put_ldops(struct tty_ldisc_ops *ldops)
152 {
153  unsigned long flags;
154 
155  spin_lock_irqsave(&tty_ldisc_lock, flags);
156  ldops->refcount--;
157  module_put(ldops->owner);
158  spin_unlock_irqrestore(&tty_ldisc_lock, flags);
159 }
160 
174 static struct tty_ldisc *tty_ldisc_get(int disc)
175 {
176  struct tty_ldisc *ld;
177  struct tty_ldisc_ops *ldops;
178 
179  if (disc < N_TTY || disc >= NR_LDISCS)
180  return ERR_PTR(-EINVAL);
181 
182  /*
183  * Get the ldisc ops - we may need to request them to be loaded
184  * dynamically and try again.
185  */
186  ldops = get_ldops(disc);
187  if (IS_ERR(ldops)) {
188  request_module("tty-ldisc-%d", disc);
189  ldops = get_ldops(disc);
190  if (IS_ERR(ldops))
191  return ERR_CAST(ldops);
192  }
193 
194  ld = kmalloc(sizeof(struct tty_ldisc), GFP_KERNEL);
195  if (ld == NULL) {
196  put_ldops(ldops);
197  return ERR_PTR(-ENOMEM);
198  }
199 
200  ld->ops = ldops;
201  atomic_set(&ld->users, 1);
203 
204  return ld;
205 }
206 
207 static void *tty_ldiscs_seq_start(struct seq_file *m, loff_t *pos)
208 {
209  return (*pos < NR_LDISCS) ? pos : NULL;
210 }
211 
212 static void *tty_ldiscs_seq_next(struct seq_file *m, void *v, loff_t *pos)
213 {
214  (*pos)++;
215  return (*pos < NR_LDISCS) ? pos : NULL;
216 }
217 
218 static void tty_ldiscs_seq_stop(struct seq_file *m, void *v)
219 {
220 }
221 
222 static int tty_ldiscs_seq_show(struct seq_file *m, void *v)
223 {
224  int i = *(loff_t *)v;
225  struct tty_ldisc_ops *ldops;
226 
227  ldops = get_ldops(i);
228  if (IS_ERR(ldops))
229  return 0;
230  seq_printf(m, "%-10s %2d\n", ldops->name ? ldops->name : "???", i);
231  put_ldops(ldops);
232  return 0;
233 }
234 
235 static const struct seq_operations tty_ldiscs_seq_ops = {
236  .start = tty_ldiscs_seq_start,
237  .next = tty_ldiscs_seq_next,
238  .stop = tty_ldiscs_seq_stop,
239  .show = tty_ldiscs_seq_show,
240 };
241 
242 static int proc_tty_ldiscs_open(struct inode *inode, struct file *file)
243 {
244  return seq_open(file, &tty_ldiscs_seq_ops);
245 }
246 
248  .owner = THIS_MODULE,
249  .open = proc_tty_ldiscs_open,
250  .read = seq_read,
251  .llseek = seq_lseek,
252  .release = seq_release,
253 };
254 
268 static void tty_ldisc_assign(struct tty_struct *tty, struct tty_ldisc *ld)
269 {
270  tty->ldisc = ld;
271 }
272 
285 static struct tty_ldisc *tty_ldisc_try(struct tty_struct *tty)
286 {
287  unsigned long flags;
288  struct tty_ldisc *ld;
289 
290  spin_lock_irqsave(&tty_ldisc_lock, flags);
291  ld = NULL;
292  if (test_bit(TTY_LDISC, &tty->flags))
293  ld = get_ldisc(tty->ldisc);
294  spin_unlock_irqrestore(&tty_ldisc_lock, flags);
295  return ld;
296 }
297 
315 {
316  struct tty_ldisc *ld;
317 
318  /* wait_event is a macro */
319  wait_event(tty_ldisc_wait, (ld = tty_ldisc_try(tty)) != NULL);
320  return ld;
321 }
323 
335 struct tty_ldisc *tty_ldisc_ref(struct tty_struct *tty)
336 {
337  return tty_ldisc_try(tty);
338 }
340 
351 void tty_ldisc_deref(struct tty_ldisc *ld)
352 {
353  put_ldisc(ld);
354 }
356 
357 static inline void tty_ldisc_put(struct tty_ldisc *ld)
358 {
359  put_ldisc(ld);
360 }
361 
374 void tty_ldisc_enable(struct tty_struct *tty)
375 {
376  set_bit(TTY_LDISC, &tty->flags);
378  wake_up(&tty_ldisc_wait);
379 }
380 
389 void tty_ldisc_flush(struct tty_struct *tty)
390 {
391  struct tty_ldisc *ld = tty_ldisc_ref(tty);
392  if (ld) {
393  if (ld->ops->flush_buffer)
394  ld->ops->flush_buffer(tty);
395  tty_ldisc_deref(ld);
396  }
397  tty_buffer_flush(tty);
398 }
400 
413 static void tty_set_termios_ldisc(struct tty_struct *tty, int num)
414 {
415  mutex_lock(&tty->termios_mutex);
416  tty->termios.c_line = num;
418 }
419 
431 static int tty_ldisc_open(struct tty_struct *tty, struct tty_ldisc *ld)
432 {
434  if (ld->ops->open) {
435  int ret;
436  /* BTM here locks versus a hangup event */
437  ret = ld->ops->open(tty);
438  if (ret)
440  return ret;
441  }
442  return 0;
443 }
444 
454 static void tty_ldisc_close(struct tty_struct *tty, struct tty_ldisc *ld)
455 {
458  if (ld->ops->close)
459  ld->ops->close(tty);
460 }
461 
471 static void tty_ldisc_restore(struct tty_struct *tty, struct tty_ldisc *old)
472 {
473  char buf[64];
474  struct tty_ldisc *new_ldisc;
475  int r;
476 
477  /* There is an outstanding reference here so this is safe */
478  old = tty_ldisc_get(old->ops->num);
479  WARN_ON(IS_ERR(old));
480  tty_ldisc_assign(tty, old);
481  tty_set_termios_ldisc(tty, old->ops->num);
482  if (tty_ldisc_open(tty, old) < 0) {
483  tty_ldisc_put(old);
484  /* This driver is always present */
485  new_ldisc = tty_ldisc_get(N_TTY);
486  if (IS_ERR(new_ldisc))
487  panic("n_tty: get");
488  tty_ldisc_assign(tty, new_ldisc);
489  tty_set_termios_ldisc(tty, N_TTY);
490  r = tty_ldisc_open(tty, new_ldisc);
491  if (r < 0)
492  panic("Couldn't open N_TTY ldisc for "
493  "%s --- error %d.",
494  tty_name(tty, buf), r);
495  }
496 }
497 
512 static int tty_ldisc_halt(struct tty_struct *tty)
513 {
514  clear_bit(TTY_LDISC, &tty->flags);
515  return cancel_work_sync(&tty->buf.work);
516 }
517 
524 static void tty_ldisc_flush_works(struct tty_struct *tty)
525 {
526  flush_work(&tty->hangup_work);
527  flush_work(&tty->SAK_work);
528  flush_work(&tty->buf.work);
529 }
530 
539 static int tty_ldisc_wait_idle(struct tty_struct *tty, long timeout)
540 {
541  long ret;
542  ret = wait_event_timeout(tty->ldisc->wq_idle,
543  atomic_read(&tty->ldisc->users) == 1, timeout);
544  return ret > 0 ? 0 : -EBUSY;
545 }
546 
560 int tty_set_ldisc(struct tty_struct *tty, int ldisc)
561 {
562  int retval;
563  struct tty_ldisc *o_ldisc, *new_ldisc;
564  int work, o_work = 0;
565  struct tty_struct *o_tty;
566 
567  new_ldisc = tty_ldisc_get(ldisc);
568  if (IS_ERR(new_ldisc))
569  return PTR_ERR(new_ldisc);
570 
571  tty_lock(tty);
572  /*
573  * We need to look at the tty locking here for pty/tty pairs
574  * when both sides try to change in parallel.
575  */
576 
577  o_tty = tty->link; /* o_tty is the pty side or NULL */
578 
579 
580  /*
581  * Check the no-op case
582  */
583 
584  if (tty->ldisc->ops->num == ldisc) {
585  tty_unlock(tty);
586  tty_ldisc_put(new_ldisc);
587  return 0;
588  }
589 
590  tty_unlock(tty);
591  /*
592  * Problem: What do we do if this blocks ?
593  * We could deadlock here
594  */
595 
596  tty_wait_until_sent(tty, 0);
597 
598  tty_lock(tty);
599  mutex_lock(&tty->ldisc_mutex);
600 
601  /*
602  * We could be midstream of another ldisc change which has
603  * dropped the lock during processing. If so we need to wait.
604  */
605 
606  while (test_bit(TTY_LDISC_CHANGING, &tty->flags)) {
607  mutex_unlock(&tty->ldisc_mutex);
608  tty_unlock(tty);
609  wait_event(tty_ldisc_wait,
610  test_bit(TTY_LDISC_CHANGING, &tty->flags) == 0);
611  tty_lock(tty);
612  mutex_lock(&tty->ldisc_mutex);
613  }
614 
616 
617  /*
618  * No more input please, we are switching. The new ldisc
619  * will update this value in the ldisc open function
620  */
621 
622  tty->receive_room = 0;
623 
624  o_ldisc = tty->ldisc;
625 
626  tty_unlock(tty);
627  /*
628  * Make sure we don't change while someone holds a
629  * reference to the line discipline. The TTY_LDISC bit
630  * prevents anyone taking a reference once it is clear.
631  * We need the lock to avoid racing reference takers.
632  *
633  * We must clear the TTY_LDISC bit here to avoid a livelock
634  * with a userspace app continually trying to use the tty in
635  * parallel to the change and re-referencing the tty.
636  */
637 
638  work = tty_ldisc_halt(tty);
639  if (o_tty)
640  o_work = tty_ldisc_halt(o_tty);
641 
642  /*
643  * Wait for ->hangup_work and ->buf.work handlers to terminate.
644  * We must drop the mutex here in case a hangup is also in process.
645  */
646 
647  mutex_unlock(&tty->ldisc_mutex);
648 
649  tty_ldisc_flush_works(tty);
650 
651  retval = tty_ldisc_wait_idle(tty, 5 * HZ);
652 
653  tty_lock(tty);
654  mutex_lock(&tty->ldisc_mutex);
655 
656  /* handle wait idle failure locked */
657  if (retval) {
658  tty_ldisc_put(new_ldisc);
659  goto enable;
660  }
661 
662  if (test_bit(TTY_HUPPING, &tty->flags)) {
663  /* We were raced by the hangup method. It will have stomped
664  the ldisc data and closed the ldisc down */
666  mutex_unlock(&tty->ldisc_mutex);
667  tty_ldisc_put(new_ldisc);
668  tty_unlock(tty);
669  return -EIO;
670  }
671 
672  /* Shutdown the current discipline. */
673  tty_ldisc_close(tty, o_ldisc);
674 
675  /* Now set up the new line discipline. */
676  tty_ldisc_assign(tty, new_ldisc);
677  tty_set_termios_ldisc(tty, ldisc);
678 
679  retval = tty_ldisc_open(tty, new_ldisc);
680  if (retval < 0) {
681  /* Back to the old one or N_TTY if we can't */
682  tty_ldisc_put(new_ldisc);
683  tty_ldisc_restore(tty, o_ldisc);
684  }
685 
686  /* At this point we hold a reference to the new ldisc and a
687  a reference to the old ldisc. If we ended up flipping back
688  to the existing ldisc we have two references to it */
689 
690  if (tty->ldisc->ops->num != o_ldisc->ops->num && tty->ops->set_ldisc)
691  tty->ops->set_ldisc(tty);
692 
693  tty_ldisc_put(o_ldisc);
694 
695 enable:
696  /*
697  * Allow ldisc referencing to occur again
698  */
699 
700  tty_ldisc_enable(tty);
701  if (o_tty)
702  tty_ldisc_enable(o_tty);
703 
704  /* Restart the work queue in case no characters kick it off. Safe if
705  already running */
706  if (work)
707  schedule_work(&tty->buf.work);
708  if (o_work)
709  schedule_work(&o_tty->buf.work);
710  mutex_unlock(&tty->ldisc_mutex);
711  tty_unlock(tty);
712  return retval;
713 }
714 
722 static void tty_reset_termios(struct tty_struct *tty)
723 {
724  mutex_lock(&tty->termios_mutex);
725  tty->termios = tty->driver->init_termios;
726  tty->termios.c_ispeed = tty_termios_input_baud_rate(&tty->termios);
727  tty->termios.c_ospeed = tty_termios_baud_rate(&tty->termios);
729 }
730 
731 
741 static int tty_ldisc_reinit(struct tty_struct *tty, int ldisc)
742 {
743  struct tty_ldisc *ld = tty_ldisc_get(ldisc);
744 
745  if (IS_ERR(ld))
746  return -1;
747 
748  tty_ldisc_close(tty, tty->ldisc);
749  tty_ldisc_put(tty->ldisc);
750  tty->ldisc = NULL;
751  /*
752  * Switch the line discipline back
753  */
754  tty_ldisc_assign(tty, ld);
755  tty_set_termios_ldisc(tty, ldisc);
756 
757  return 0;
758 }
759 
775 void tty_ldisc_hangup(struct tty_struct *tty)
776 {
777  struct tty_ldisc *ld;
778  int reset = tty->driver->flags & TTY_DRIVER_RESET_TERMIOS;
779  int err = 0;
780 
781  /*
782  * FIXME! What are the locking issues here? This may me overdoing
783  * things... This question is especially important now that we've
784  * removed the irqlock.
785  */
786  ld = tty_ldisc_ref(tty);
787  if (ld != NULL) {
788  /* We may have no line discipline at this point */
789  if (ld->ops->flush_buffer)
790  ld->ops->flush_buffer(tty);
792  if ((test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) &&
793  ld->ops->write_wakeup)
794  ld->ops->write_wakeup(tty);
795  if (ld->ops->hangup)
796  ld->ops->hangup(tty);
797  tty_ldisc_deref(ld);
798  }
799  /*
800  * FIXME: Once we trust the LDISC code better we can wait here for
801  * ldisc completion and fix the driver call race
802  */
805  /*
806  * Shutdown the current line discipline, and reset it to
807  * N_TTY if need be.
808  *
809  * Avoid racing set_ldisc or tty_ldisc_release
810  */
811  mutex_lock(&tty->ldisc_mutex);
812 
813  /*
814  * this is like tty_ldisc_halt, but we need to give up
815  * the BTM before calling cancel_work_sync, which may
816  * need to wait for another function taking the BTM
817  */
818  clear_bit(TTY_LDISC, &tty->flags);
819  tty_unlock(tty);
820  cancel_work_sync(&tty->buf.work);
821  mutex_unlock(&tty->ldisc_mutex);
822 retry:
823  tty_lock(tty);
824  mutex_lock(&tty->ldisc_mutex);
825 
826  /* At this point we have a closed ldisc and we want to
827  reopen it. We could defer this to the next open but
828  it means auditing a lot of other paths so this is
829  a FIXME */
830  if (tty->ldisc) { /* Not yet closed */
831  if (atomic_read(&tty->ldisc->users) != 1) {
832  char cur_n[TASK_COMM_LEN], tty_n[64];
833  long timeout = 3 * HZ;
834  tty_unlock(tty);
835 
836  while (tty_ldisc_wait_idle(tty, timeout) == -EBUSY) {
837  timeout = MAX_SCHEDULE_TIMEOUT;
839  "%s: waiting (%s) for %s took too long, but we keep waiting...\n",
840  __func__, get_task_comm(cur_n, current),
841  tty_name(tty, tty_n));
842  }
843  mutex_unlock(&tty->ldisc_mutex);
844  goto retry;
845  }
846 
847  if (reset == 0) {
848 
849  if (!tty_ldisc_reinit(tty, tty->termios.c_line))
850  err = tty_ldisc_open(tty, tty->ldisc);
851  else
852  err = 1;
853  }
854  /* If the re-open fails or we reset then go to N_TTY. The
855  N_TTY open cannot fail */
856  if (reset || err) {
857  BUG_ON(tty_ldisc_reinit(tty, N_TTY));
858  WARN_ON(tty_ldisc_open(tty, tty->ldisc));
859  }
860  tty_ldisc_enable(tty);
861  }
862  mutex_unlock(&tty->ldisc_mutex);
863  if (reset)
864  tty_reset_termios(tty);
865 }
866 
877 int tty_ldisc_setup(struct tty_struct *tty, struct tty_struct *o_tty)
878 {
879  struct tty_ldisc *ld = tty->ldisc;
880  int retval;
881 
882  retval = tty_ldisc_open(tty, ld);
883  if (retval)
884  return retval;
885 
886  if (o_tty) {
887  retval = tty_ldisc_open(o_tty, o_tty->ldisc);
888  if (retval) {
889  tty_ldisc_close(tty, ld);
890  return retval;
891  }
892  tty_ldisc_enable(o_tty);
893  }
894  tty_ldisc_enable(tty);
895  return 0;
896 }
897 
898 static void tty_ldisc_kill(struct tty_struct *tty)
899 {
900  mutex_lock(&tty->ldisc_mutex);
901  /*
902  * Now kill off the ldisc
903  */
904  tty_ldisc_close(tty, tty->ldisc);
905  tty_ldisc_put(tty->ldisc);
906  /* Force an oops if we mess this up */
907  tty->ldisc = NULL;
908 
909  /* Ensure the next open requests the N_TTY ldisc */
910  tty_set_termios_ldisc(tty, N_TTY);
911  mutex_unlock(&tty->ldisc_mutex);
912 }
913 
924 void tty_ldisc_release(struct tty_struct *tty, struct tty_struct *o_tty)
925 {
926  /*
927  * Prevent flush_to_ldisc() from rescheduling the work for later. Then
928  * kill any delayed work. As this is the final close it does not
929  * race with the set_ldisc code path.
930  */
931 
932  tty_lock_pair(tty, o_tty);
933  tty_ldisc_halt(tty);
934  tty_ldisc_flush_works(tty);
935  if (o_tty) {
936  tty_ldisc_halt(o_tty);
937  tty_ldisc_flush_works(o_tty);
938  }
939 
940  /* This will need doing differently if we need to lock */
941  tty_ldisc_kill(tty);
942 
943  if (o_tty)
944  tty_ldisc_kill(o_tty);
945 
946  tty_unlock_pair(tty, o_tty);
947  /* And the memory resources remaining (buffers, termios) will be
948  disposed of when the kref hits zero */
949 }
950 
959 void tty_ldisc_init(struct tty_struct *tty)
960 {
961  struct tty_ldisc *ld = tty_ldisc_get(N_TTY);
962  if (IS_ERR(ld))
963  panic("n_tty: init_tty");
964  tty_ldisc_assign(tty, ld);
965 }
966 
974 void tty_ldisc_deinit(struct tty_struct *tty)
975 {
976  put_ldisc(tty->ldisc);
977  tty_ldisc_assign(tty, NULL);
978 }
979 
980 void tty_ldisc_begin(void)
981 {
982  /* Setup the default TTY line discipline. */
984 }