TTY: make tty_add_file non-failing
[deliverable/linux.git] / drivers / tty / tty_io.c
1 /*
2 * Copyright (C) 1991, 1992 Linus Torvalds
3 */
4
5 /*
6 * 'tty_io.c' gives an orthogonal feeling to tty's, be they consoles
7 * or rs-channels. It also implements echoing, cooked mode etc.
8 *
9 * Kill-line thanks to John T Kohl, who also corrected VMIN = VTIME = 0.
10 *
11 * Modified by Theodore Ts'o, 9/14/92, to dynamically allocate the
12 * tty_struct and tty_queue structures. Previously there was an array
13 * of 256 tty_struct's which was statically allocated, and the
14 * tty_queue structures were allocated at boot time. Both are now
15 * dynamically allocated only when the tty is open.
16 *
17 * Also restructured routines so that there is more of a separation
18 * between the high-level tty routines (tty_io.c and tty_ioctl.c) and
19 * the low-level tty routines (serial.c, pty.c, console.c). This
20 * makes for cleaner and more compact code. -TYT, 9/17/92
21 *
22 * Modified by Fred N. van Kempen, 01/29/93, to add line disciplines
23 * which can be dynamically activated and de-activated by the line
24 * discipline handling modules (like SLIP).
25 *
26 * NOTE: pay no attention to the line discipline code (yet); its
27 * interface is still subject to change in this version...
28 * -- TYT, 1/31/92
29 *
30 * Added functionality to the OPOST tty handling. No delays, but all
31 * other bits should be there.
32 * -- Nick Holloway <alfie@dcs.warwick.ac.uk>, 27th May 1993.
33 *
34 * Rewrote canonical mode and added more termios flags.
35 * -- julian@uhunix.uhcc.hawaii.edu (J. Cowley), 13Jan94
36 *
37 * Reorganized FASYNC support so mouse code can share it.
38 * -- ctm@ardi.com, 9Sep95
39 *
40 * New TIOCLINUX variants added.
41 * -- mj@k332.feld.cvut.cz, 19-Nov-95
42 *
43 * Restrict vt switching via ioctl()
44 * -- grif@cs.ucr.edu, 5-Dec-95
45 *
46 * Move console and virtual terminal code to more appropriate files,
47 * implement CONFIG_VT and generalize console device interface.
48 * -- Marko Kohtala <Marko.Kohtala@hut.fi>, March 97
49 *
50 * Rewrote tty_init_dev and tty_release_dev to eliminate races.
51 * -- Bill Hawes <whawes@star.net>, June 97
52 *
53 * Added devfs support.
54 * -- C. Scott Ananian <cananian@alumni.princeton.edu>, 13-Jan-1998
55 *
56 * Added support for a Unix98-style ptmx device.
57 * -- C. Scott Ananian <cananian@alumni.princeton.edu>, 14-Jan-1998
58 *
59 * Reduced memory usage for older ARM systems
60 * -- Russell King <rmk@arm.linux.org.uk>
61 *
62 * Move do_SAK() into process context. Less stack use in devfs functions.
63 * alloc_tty_struct() always uses kmalloc()
64 * -- Andrew Morton <andrewm@uow.edu.eu> 17Mar01
65 */
66
67 #include <linux/types.h>
68 #include <linux/major.h>
69 #include <linux/errno.h>
70 #include <linux/signal.h>
71 #include <linux/fcntl.h>
72 #include <linux/sched.h>
73 #include <linux/interrupt.h>
74 #include <linux/tty.h>
75 #include <linux/tty_driver.h>
76 #include <linux/tty_flip.h>
77 #include <linux/devpts_fs.h>
78 #include <linux/file.h>
79 #include <linux/fdtable.h>
80 #include <linux/console.h>
81 #include <linux/timer.h>
82 #include <linux/ctype.h>
83 #include <linux/kd.h>
84 #include <linux/mm.h>
85 #include <linux/string.h>
86 #include <linux/slab.h>
87 #include <linux/poll.h>
88 #include <linux/proc_fs.h>
89 #include <linux/init.h>
90 #include <linux/module.h>
91 #include <linux/device.h>
92 #include <linux/wait.h>
93 #include <linux/bitops.h>
94 #include <linux/delay.h>
95 #include <linux/seq_file.h>
96 #include <linux/serial.h>
97 #include <linux/ratelimit.h>
98
99 #include <linux/uaccess.h>
100 #include <asm/system.h>
101
102 #include <linux/kbd_kern.h>
103 #include <linux/vt_kern.h>
104 #include <linux/selection.h>
105
106 #include <linux/kmod.h>
107 #include <linux/nsproxy.h>
108
109 #undef TTY_DEBUG_HANGUP
110
111 #define TTY_PARANOIA_CHECK 1
112 #define CHECK_TTY_COUNT 1
113
114 struct ktermios tty_std_termios = { /* for the benefit of tty drivers */
115 .c_iflag = ICRNL | IXON,
116 .c_oflag = OPOST | ONLCR,
117 .c_cflag = B38400 | CS8 | CREAD | HUPCL,
118 .c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK |
119 ECHOCTL | ECHOKE | IEXTEN,
120 .c_cc = INIT_C_CC,
121 .c_ispeed = 38400,
122 .c_ospeed = 38400
123 };
124
125 EXPORT_SYMBOL(tty_std_termios);
126
127 /* This list gets poked at by procfs and various bits of boot up code. This
128 could do with some rationalisation such as pulling the tty proc function
129 into this file */
130
131 LIST_HEAD(tty_drivers); /* linked list of tty drivers */
132
133 /* Mutex to protect creating and releasing a tty. This is shared with
134 vt.c for deeply disgusting hack reasons */
135 DEFINE_MUTEX(tty_mutex);
136 EXPORT_SYMBOL(tty_mutex);
137
138 /* Spinlock to protect the tty->tty_files list */
139 DEFINE_SPINLOCK(tty_files_lock);
140
141 static ssize_t tty_read(struct file *, char __user *, size_t, loff_t *);
142 static ssize_t tty_write(struct file *, const char __user *, size_t, loff_t *);
143 ssize_t redirected_tty_write(struct file *, const char __user *,
144 size_t, loff_t *);
145 static unsigned int tty_poll(struct file *, poll_table *);
146 static int tty_open(struct inode *, struct file *);
147 long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
148 #ifdef CONFIG_COMPAT
149 static long tty_compat_ioctl(struct file *file, unsigned int cmd,
150 unsigned long arg);
151 #else
152 #define tty_compat_ioctl NULL
153 #endif
154 static int __tty_fasync(int fd, struct file *filp, int on);
155 static int tty_fasync(int fd, struct file *filp, int on);
156 static void release_tty(struct tty_struct *tty, int idx);
157 static void __proc_set_tty(struct task_struct *tsk, struct tty_struct *tty);
158 static void proc_set_tty(struct task_struct *tsk, struct tty_struct *tty);
159
160 /**
161 * alloc_tty_struct - allocate a tty object
162 *
163 * Return a new empty tty structure. The data fields have not
164 * been initialized in any way but has been zeroed
165 *
166 * Locking: none
167 */
168
169 struct tty_struct *alloc_tty_struct(void)
170 {
171 return kzalloc(sizeof(struct tty_struct), GFP_KERNEL);
172 }
173
174 /**
175 * free_tty_struct - free a disused tty
176 * @tty: tty struct to free
177 *
178 * Free the write buffers, tty queue and tty memory itself.
179 *
180 * Locking: none. Must be called after tty is definitely unused
181 */
182
183 void free_tty_struct(struct tty_struct *tty)
184 {
185 if (tty->dev)
186 put_device(tty->dev);
187 kfree(tty->write_buf);
188 tty_buffer_free_all(tty);
189 kfree(tty);
190 }
191
192 static inline struct tty_struct *file_tty(struct file *file)
193 {
194 return ((struct tty_file_private *)file->private_data)->tty;
195 }
196
197 int tty_alloc_file(struct file *file)
198 {
199 struct tty_file_private *priv;
200
201 priv = kmalloc(sizeof(*priv), GFP_KERNEL);
202 if (!priv)
203 return -ENOMEM;
204
205 file->private_data = priv;
206
207 return 0;
208 }
209
210 /* Associate a new file with the tty structure */
211 void tty_add_file(struct tty_struct *tty, struct file *file)
212 {
213 struct tty_file_private *priv = file->private_data;
214
215 priv->tty = tty;
216 priv->file = file;
217
218 spin_lock(&tty_files_lock);
219 list_add(&priv->list, &tty->tty_files);
220 spin_unlock(&tty_files_lock);
221 }
222
223 /**
224 * tty_free_file - free file->private_data
225 *
226 * This shall be used only for fail path handling when tty_add_file was not
227 * called yet.
228 */
229 void tty_free_file(struct file *file)
230 {
231 struct tty_file_private *priv = file->private_data;
232
233 file->private_data = NULL;
234 kfree(priv);
235 }
236
237 /* Delete file from its tty */
238 void tty_del_file(struct file *file)
239 {
240 struct tty_file_private *priv = file->private_data;
241
242 spin_lock(&tty_files_lock);
243 list_del(&priv->list);
244 spin_unlock(&tty_files_lock);
245 tty_free_file(file);
246 }
247
248
249 #define TTY_NUMBER(tty) ((tty)->index + (tty)->driver->name_base)
250
251 /**
252 * tty_name - return tty naming
253 * @tty: tty structure
254 * @buf: buffer for output
255 *
256 * Convert a tty structure into a name. The name reflects the kernel
257 * naming policy and if udev is in use may not reflect user space
258 *
259 * Locking: none
260 */
261
262 char *tty_name(struct tty_struct *tty, char *buf)
263 {
264 if (!tty) /* Hmm. NULL pointer. That's fun. */
265 strcpy(buf, "NULL tty");
266 else
267 strcpy(buf, tty->name);
268 return buf;
269 }
270
271 EXPORT_SYMBOL(tty_name);
272
273 int tty_paranoia_check(struct tty_struct *tty, struct inode *inode,
274 const char *routine)
275 {
276 #ifdef TTY_PARANOIA_CHECK
277 if (!tty) {
278 printk(KERN_WARNING
279 "null TTY for (%d:%d) in %s\n",
280 imajor(inode), iminor(inode), routine);
281 return 1;
282 }
283 if (tty->magic != TTY_MAGIC) {
284 printk(KERN_WARNING
285 "bad magic number for tty struct (%d:%d) in %s\n",
286 imajor(inode), iminor(inode), routine);
287 return 1;
288 }
289 #endif
290 return 0;
291 }
292
293 static int check_tty_count(struct tty_struct *tty, const char *routine)
294 {
295 #ifdef CHECK_TTY_COUNT
296 struct list_head *p;
297 int count = 0;
298
299 spin_lock(&tty_files_lock);
300 list_for_each(p, &tty->tty_files) {
301 count++;
302 }
303 spin_unlock(&tty_files_lock);
304 if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
305 tty->driver->subtype == PTY_TYPE_SLAVE &&
306 tty->link && tty->link->count)
307 count++;
308 if (tty->count != count) {
309 printk(KERN_WARNING "Warning: dev (%s) tty->count(%d) "
310 "!= #fd's(%d) in %s\n",
311 tty->name, tty->count, count, routine);
312 return count;
313 }
314 #endif
315 return 0;
316 }
317
318 /**
319 * get_tty_driver - find device of a tty
320 * @dev_t: device identifier
321 * @index: returns the index of the tty
322 *
323 * This routine returns a tty driver structure, given a device number
324 * and also passes back the index number.
325 *
326 * Locking: caller must hold tty_mutex
327 */
328
329 static struct tty_driver *get_tty_driver(dev_t device, int *index)
330 {
331 struct tty_driver *p;
332
333 list_for_each_entry(p, &tty_drivers, tty_drivers) {
334 dev_t base = MKDEV(p->major, p->minor_start);
335 if (device < base || device >= base + p->num)
336 continue;
337 *index = device - base;
338 return tty_driver_kref_get(p);
339 }
340 return NULL;
341 }
342
343 #ifdef CONFIG_CONSOLE_POLL
344
345 /**
346 * tty_find_polling_driver - find device of a polled tty
347 * @name: name string to match
348 * @line: pointer to resulting tty line nr
349 *
350 * This routine returns a tty driver structure, given a name
351 * and the condition that the tty driver is capable of polled
352 * operation.
353 */
354 struct tty_driver *tty_find_polling_driver(char *name, int *line)
355 {
356 struct tty_driver *p, *res = NULL;
357 int tty_line = 0;
358 int len;
359 char *str, *stp;
360
361 for (str = name; *str; str++)
362 if ((*str >= '0' && *str <= '9') || *str == ',')
363 break;
364 if (!*str)
365 return NULL;
366
367 len = str - name;
368 tty_line = simple_strtoul(str, &str, 10);
369
370 mutex_lock(&tty_mutex);
371 /* Search through the tty devices to look for a match */
372 list_for_each_entry(p, &tty_drivers, tty_drivers) {
373 if (strncmp(name, p->name, len) != 0)
374 continue;
375 stp = str;
376 if (*stp == ',')
377 stp++;
378 if (*stp == '\0')
379 stp = NULL;
380
381 if (tty_line >= 0 && tty_line < p->num && p->ops &&
382 p->ops->poll_init && !p->ops->poll_init(p, tty_line, stp)) {
383 res = tty_driver_kref_get(p);
384 *line = tty_line;
385 break;
386 }
387 }
388 mutex_unlock(&tty_mutex);
389
390 return res;
391 }
392 EXPORT_SYMBOL_GPL(tty_find_polling_driver);
393 #endif
394
395 /**
396 * tty_check_change - check for POSIX terminal changes
397 * @tty: tty to check
398 *
399 * If we try to write to, or set the state of, a terminal and we're
400 * not in the foreground, send a SIGTTOU. If the signal is blocked or
401 * ignored, go ahead and perform the operation. (POSIX 7.2)
402 *
403 * Locking: ctrl_lock
404 */
405
406 int tty_check_change(struct tty_struct *tty)
407 {
408 unsigned long flags;
409 int ret = 0;
410
411 if (current->signal->tty != tty)
412 return 0;
413
414 spin_lock_irqsave(&tty->ctrl_lock, flags);
415
416 if (!tty->pgrp) {
417 printk(KERN_WARNING "tty_check_change: tty->pgrp == NULL!\n");
418 goto out_unlock;
419 }
420 if (task_pgrp(current) == tty->pgrp)
421 goto out_unlock;
422 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
423 if (is_ignored(SIGTTOU))
424 goto out;
425 if (is_current_pgrp_orphaned()) {
426 ret = -EIO;
427 goto out;
428 }
429 kill_pgrp(task_pgrp(current), SIGTTOU, 1);
430 set_thread_flag(TIF_SIGPENDING);
431 ret = -ERESTARTSYS;
432 out:
433 return ret;
434 out_unlock:
435 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
436 return ret;
437 }
438
439 EXPORT_SYMBOL(tty_check_change);
440
441 static ssize_t hung_up_tty_read(struct file *file, char __user *buf,
442 size_t count, loff_t *ppos)
443 {
444 return 0;
445 }
446
447 static ssize_t hung_up_tty_write(struct file *file, const char __user *buf,
448 size_t count, loff_t *ppos)
449 {
450 return -EIO;
451 }
452
453 /* No kernel lock held - none needed ;) */
454 static unsigned int hung_up_tty_poll(struct file *filp, poll_table *wait)
455 {
456 return POLLIN | POLLOUT | POLLERR | POLLHUP | POLLRDNORM | POLLWRNORM;
457 }
458
459 static long hung_up_tty_ioctl(struct file *file, unsigned int cmd,
460 unsigned long arg)
461 {
462 return cmd == TIOCSPGRP ? -ENOTTY : -EIO;
463 }
464
465 static long hung_up_tty_compat_ioctl(struct file *file,
466 unsigned int cmd, unsigned long arg)
467 {
468 return cmd == TIOCSPGRP ? -ENOTTY : -EIO;
469 }
470
471 static const struct file_operations tty_fops = {
472 .llseek = no_llseek,
473 .read = tty_read,
474 .write = tty_write,
475 .poll = tty_poll,
476 .unlocked_ioctl = tty_ioctl,
477 .compat_ioctl = tty_compat_ioctl,
478 .open = tty_open,
479 .release = tty_release,
480 .fasync = tty_fasync,
481 };
482
483 static const struct file_operations console_fops = {
484 .llseek = no_llseek,
485 .read = tty_read,
486 .write = redirected_tty_write,
487 .poll = tty_poll,
488 .unlocked_ioctl = tty_ioctl,
489 .compat_ioctl = tty_compat_ioctl,
490 .open = tty_open,
491 .release = tty_release,
492 .fasync = tty_fasync,
493 };
494
495 static const struct file_operations hung_up_tty_fops = {
496 .llseek = no_llseek,
497 .read = hung_up_tty_read,
498 .write = hung_up_tty_write,
499 .poll = hung_up_tty_poll,
500 .unlocked_ioctl = hung_up_tty_ioctl,
501 .compat_ioctl = hung_up_tty_compat_ioctl,
502 .release = tty_release,
503 };
504
505 static DEFINE_SPINLOCK(redirect_lock);
506 static struct file *redirect;
507
508 /**
509 * tty_wakeup - request more data
510 * @tty: terminal
511 *
512 * Internal and external helper for wakeups of tty. This function
513 * informs the line discipline if present that the driver is ready
514 * to receive more output data.
515 */
516
517 void tty_wakeup(struct tty_struct *tty)
518 {
519 struct tty_ldisc *ld;
520
521 if (test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) {
522 ld = tty_ldisc_ref(tty);
523 if (ld) {
524 if (ld->ops->write_wakeup)
525 ld->ops->write_wakeup(tty);
526 tty_ldisc_deref(ld);
527 }
528 }
529 wake_up_interruptible_poll(&tty->write_wait, POLLOUT);
530 }
531
532 EXPORT_SYMBOL_GPL(tty_wakeup);
533
534 /**
535 * __tty_hangup - actual handler for hangup events
536 * @work: tty device
537 *
538 * This can be called by the "eventd" kernel thread. That is process
539 * synchronous but doesn't hold any locks, so we need to make sure we
540 * have the appropriate locks for what we're doing.
541 *
542 * The hangup event clears any pending redirections onto the hung up
543 * device. It ensures future writes will error and it does the needed
544 * line discipline hangup and signal delivery. The tty object itself
545 * remains intact.
546 *
547 * Locking:
548 * BTM
549 * redirect lock for undoing redirection
550 * file list lock for manipulating list of ttys
551 * tty_ldisc_lock from called functions
552 * termios_mutex resetting termios data
553 * tasklist_lock to walk task list for hangup event
554 * ->siglock to protect ->signal/->sighand
555 */
556 void __tty_hangup(struct tty_struct *tty)
557 {
558 struct file *cons_filp = NULL;
559 struct file *filp, *f = NULL;
560 struct task_struct *p;
561 struct tty_file_private *priv;
562 int closecount = 0, n;
563 unsigned long flags;
564 int refs = 0;
565
566 if (!tty)
567 return;
568
569
570 spin_lock(&redirect_lock);
571 if (redirect && file_tty(redirect) == tty) {
572 f = redirect;
573 redirect = NULL;
574 }
575 spin_unlock(&redirect_lock);
576
577 tty_lock();
578
579 /* some functions below drop BTM, so we need this bit */
580 set_bit(TTY_HUPPING, &tty->flags);
581
582 /* inuse_filps is protected by the single tty lock,
583 this really needs to change if we want to flush the
584 workqueue with the lock held */
585 check_tty_count(tty, "tty_hangup");
586
587 spin_lock(&tty_files_lock);
588 /* This breaks for file handles being sent over AF_UNIX sockets ? */
589 list_for_each_entry(priv, &tty->tty_files, list) {
590 filp = priv->file;
591 if (filp->f_op->write == redirected_tty_write)
592 cons_filp = filp;
593 if (filp->f_op->write != tty_write)
594 continue;
595 closecount++;
596 __tty_fasync(-1, filp, 0); /* can't block */
597 filp->f_op = &hung_up_tty_fops;
598 }
599 spin_unlock(&tty_files_lock);
600
601 /*
602 * it drops BTM and thus races with reopen
603 * we protect the race by TTY_HUPPING
604 */
605 tty_ldisc_hangup(tty);
606
607 read_lock(&tasklist_lock);
608 if (tty->session) {
609 do_each_pid_task(tty->session, PIDTYPE_SID, p) {
610 spin_lock_irq(&p->sighand->siglock);
611 if (p->signal->tty == tty) {
612 p->signal->tty = NULL;
613 /* We defer the dereferences outside fo
614 the tasklist lock */
615 refs++;
616 }
617 if (!p->signal->leader) {
618 spin_unlock_irq(&p->sighand->siglock);
619 continue;
620 }
621 __group_send_sig_info(SIGHUP, SEND_SIG_PRIV, p);
622 __group_send_sig_info(SIGCONT, SEND_SIG_PRIV, p);
623 put_pid(p->signal->tty_old_pgrp); /* A noop */
624 spin_lock_irqsave(&tty->ctrl_lock, flags);
625 if (tty->pgrp)
626 p->signal->tty_old_pgrp = get_pid(tty->pgrp);
627 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
628 spin_unlock_irq(&p->sighand->siglock);
629 } while_each_pid_task(tty->session, PIDTYPE_SID, p);
630 }
631 read_unlock(&tasklist_lock);
632
633 spin_lock_irqsave(&tty->ctrl_lock, flags);
634 clear_bit(TTY_THROTTLED, &tty->flags);
635 clear_bit(TTY_PUSH, &tty->flags);
636 clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
637 put_pid(tty->session);
638 put_pid(tty->pgrp);
639 tty->session = NULL;
640 tty->pgrp = NULL;
641 tty->ctrl_status = 0;
642 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
643
644 /* Account for the p->signal references we killed */
645 while (refs--)
646 tty_kref_put(tty);
647
648 /*
649 * If one of the devices matches a console pointer, we
650 * cannot just call hangup() because that will cause
651 * tty->count and state->count to go out of sync.
652 * So we just call close() the right number of times.
653 */
654 if (cons_filp) {
655 if (tty->ops->close)
656 for (n = 0; n < closecount; n++)
657 tty->ops->close(tty, cons_filp);
658 } else if (tty->ops->hangup)
659 (tty->ops->hangup)(tty);
660 /*
661 * We don't want to have driver/ldisc interactions beyond
662 * the ones we did here. The driver layer expects no
663 * calls after ->hangup() from the ldisc side. However we
664 * can't yet guarantee all that.
665 */
666 set_bit(TTY_HUPPED, &tty->flags);
667 clear_bit(TTY_HUPPING, &tty->flags);
668 tty_ldisc_enable(tty);
669
670 tty_unlock();
671
672 if (f)
673 fput(f);
674 }
675
676 static void do_tty_hangup(struct work_struct *work)
677 {
678 struct tty_struct *tty =
679 container_of(work, struct tty_struct, hangup_work);
680
681 __tty_hangup(tty);
682 }
683
684 /**
685 * tty_hangup - trigger a hangup event
686 * @tty: tty to hangup
687 *
688 * A carrier loss (virtual or otherwise) has occurred on this like
689 * schedule a hangup sequence to run after this event.
690 */
691
692 void tty_hangup(struct tty_struct *tty)
693 {
694 #ifdef TTY_DEBUG_HANGUP
695 char buf[64];
696 printk(KERN_DEBUG "%s hangup...\n", tty_name(tty, buf));
697 #endif
698 schedule_work(&tty->hangup_work);
699 }
700
701 EXPORT_SYMBOL(tty_hangup);
702
703 /**
704 * tty_vhangup - process vhangup
705 * @tty: tty to hangup
706 *
707 * The user has asked via system call for the terminal to be hung up.
708 * We do this synchronously so that when the syscall returns the process
709 * is complete. That guarantee is necessary for security reasons.
710 */
711
712 void tty_vhangup(struct tty_struct *tty)
713 {
714 #ifdef TTY_DEBUG_HANGUP
715 char buf[64];
716
717 printk(KERN_DEBUG "%s vhangup...\n", tty_name(tty, buf));
718 #endif
719 __tty_hangup(tty);
720 }
721
722 EXPORT_SYMBOL(tty_vhangup);
723
724
725 /**
726 * tty_vhangup_self - process vhangup for own ctty
727 *
728 * Perform a vhangup on the current controlling tty
729 */
730
731 void tty_vhangup_self(void)
732 {
733 struct tty_struct *tty;
734
735 tty = get_current_tty();
736 if (tty) {
737 tty_vhangup(tty);
738 tty_kref_put(tty);
739 }
740 }
741
742 /**
743 * tty_hung_up_p - was tty hung up
744 * @filp: file pointer of tty
745 *
746 * Return true if the tty has been subject to a vhangup or a carrier
747 * loss
748 */
749
750 int tty_hung_up_p(struct file *filp)
751 {
752 return (filp->f_op == &hung_up_tty_fops);
753 }
754
755 EXPORT_SYMBOL(tty_hung_up_p);
756
757 static void session_clear_tty(struct pid *session)
758 {
759 struct task_struct *p;
760 do_each_pid_task(session, PIDTYPE_SID, p) {
761 proc_clear_tty(p);
762 } while_each_pid_task(session, PIDTYPE_SID, p);
763 }
764
765 /**
766 * disassociate_ctty - disconnect controlling tty
767 * @on_exit: true if exiting so need to "hang up" the session
768 *
769 * This function is typically called only by the session leader, when
770 * it wants to disassociate itself from its controlling tty.
771 *
772 * It performs the following functions:
773 * (1) Sends a SIGHUP and SIGCONT to the foreground process group
774 * (2) Clears the tty from being controlling the session
775 * (3) Clears the controlling tty for all processes in the
776 * session group.
777 *
778 * The argument on_exit is set to 1 if called when a process is
779 * exiting; it is 0 if called by the ioctl TIOCNOTTY.
780 *
781 * Locking:
782 * BTM is taken for hysterical raisins, and held when
783 * called from no_tty().
784 * tty_mutex is taken to protect tty
785 * ->siglock is taken to protect ->signal/->sighand
786 * tasklist_lock is taken to walk process list for sessions
787 * ->siglock is taken to protect ->signal/->sighand
788 */
789
790 void disassociate_ctty(int on_exit)
791 {
792 struct tty_struct *tty;
793 struct pid *tty_pgrp = NULL;
794
795 if (!current->signal->leader)
796 return;
797
798 tty = get_current_tty();
799 if (tty) {
800 tty_pgrp = get_pid(tty->pgrp);
801 if (on_exit) {
802 if (tty->driver->type != TTY_DRIVER_TYPE_PTY)
803 tty_vhangup(tty);
804 }
805 tty_kref_put(tty);
806 } else if (on_exit) {
807 struct pid *old_pgrp;
808 spin_lock_irq(&current->sighand->siglock);
809 old_pgrp = current->signal->tty_old_pgrp;
810 current->signal->tty_old_pgrp = NULL;
811 spin_unlock_irq(&current->sighand->siglock);
812 if (old_pgrp) {
813 kill_pgrp(old_pgrp, SIGHUP, on_exit);
814 kill_pgrp(old_pgrp, SIGCONT, on_exit);
815 put_pid(old_pgrp);
816 }
817 return;
818 }
819 if (tty_pgrp) {
820 kill_pgrp(tty_pgrp, SIGHUP, on_exit);
821 if (!on_exit)
822 kill_pgrp(tty_pgrp, SIGCONT, on_exit);
823 put_pid(tty_pgrp);
824 }
825
826 spin_lock_irq(&current->sighand->siglock);
827 put_pid(current->signal->tty_old_pgrp);
828 current->signal->tty_old_pgrp = NULL;
829 spin_unlock_irq(&current->sighand->siglock);
830
831 tty = get_current_tty();
832 if (tty) {
833 unsigned long flags;
834 spin_lock_irqsave(&tty->ctrl_lock, flags);
835 put_pid(tty->session);
836 put_pid(tty->pgrp);
837 tty->session = NULL;
838 tty->pgrp = NULL;
839 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
840 tty_kref_put(tty);
841 } else {
842 #ifdef TTY_DEBUG_HANGUP
843 printk(KERN_DEBUG "error attempted to write to tty [0x%p]"
844 " = NULL", tty);
845 #endif
846 }
847
848 /* Now clear signal->tty under the lock */
849 read_lock(&tasklist_lock);
850 session_clear_tty(task_session(current));
851 read_unlock(&tasklist_lock);
852 }
853
854 /**
855 *
856 * no_tty - Ensure the current process does not have a controlling tty
857 */
858 void no_tty(void)
859 {
860 struct task_struct *tsk = current;
861 tty_lock();
862 disassociate_ctty(0);
863 tty_unlock();
864 proc_clear_tty(tsk);
865 }
866
867
868 /**
869 * stop_tty - propagate flow control
870 * @tty: tty to stop
871 *
872 * Perform flow control to the driver. For PTY/TTY pairs we
873 * must also propagate the TIOCKPKT status. May be called
874 * on an already stopped device and will not re-call the driver
875 * method.
876 *
877 * This functionality is used by both the line disciplines for
878 * halting incoming flow and by the driver. It may therefore be
879 * called from any context, may be under the tty atomic_write_lock
880 * but not always.
881 *
882 * Locking:
883 * Uses the tty control lock internally
884 */
885
886 void stop_tty(struct tty_struct *tty)
887 {
888 unsigned long flags;
889 spin_lock_irqsave(&tty->ctrl_lock, flags);
890 if (tty->stopped) {
891 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
892 return;
893 }
894 tty->stopped = 1;
895 if (tty->link && tty->link->packet) {
896 tty->ctrl_status &= ~TIOCPKT_START;
897 tty->ctrl_status |= TIOCPKT_STOP;
898 wake_up_interruptible_poll(&tty->link->read_wait, POLLIN);
899 }
900 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
901 if (tty->ops->stop)
902 (tty->ops->stop)(tty);
903 }
904
905 EXPORT_SYMBOL(stop_tty);
906
907 /**
908 * start_tty - propagate flow control
909 * @tty: tty to start
910 *
911 * Start a tty that has been stopped if at all possible. Perform
912 * any necessary wakeups and propagate the TIOCPKT status. If this
913 * is the tty was previous stopped and is being started then the
914 * driver start method is invoked and the line discipline woken.
915 *
916 * Locking:
917 * ctrl_lock
918 */
919
920 void start_tty(struct tty_struct *tty)
921 {
922 unsigned long flags;
923 spin_lock_irqsave(&tty->ctrl_lock, flags);
924 if (!tty->stopped || tty->flow_stopped) {
925 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
926 return;
927 }
928 tty->stopped = 0;
929 if (tty->link && tty->link->packet) {
930 tty->ctrl_status &= ~TIOCPKT_STOP;
931 tty->ctrl_status |= TIOCPKT_START;
932 wake_up_interruptible_poll(&tty->link->read_wait, POLLIN);
933 }
934 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
935 if (tty->ops->start)
936 (tty->ops->start)(tty);
937 /* If we have a running line discipline it may need kicking */
938 tty_wakeup(tty);
939 }
940
941 EXPORT_SYMBOL(start_tty);
942
943 /**
944 * tty_read - read method for tty device files
945 * @file: pointer to tty file
946 * @buf: user buffer
947 * @count: size of user buffer
948 * @ppos: unused
949 *
950 * Perform the read system call function on this terminal device. Checks
951 * for hung up devices before calling the line discipline method.
952 *
953 * Locking:
954 * Locks the line discipline internally while needed. Multiple
955 * read calls may be outstanding in parallel.
956 */
957
958 static ssize_t tty_read(struct file *file, char __user *buf, size_t count,
959 loff_t *ppos)
960 {
961 int i;
962 struct inode *inode = file->f_path.dentry->d_inode;
963 struct tty_struct *tty = file_tty(file);
964 struct tty_ldisc *ld;
965
966 if (tty_paranoia_check(tty, inode, "tty_read"))
967 return -EIO;
968 if (!tty || (test_bit(TTY_IO_ERROR, &tty->flags)))
969 return -EIO;
970
971 /* We want to wait for the line discipline to sort out in this
972 situation */
973 ld = tty_ldisc_ref_wait(tty);
974 if (ld->ops->read)
975 i = (ld->ops->read)(tty, file, buf, count);
976 else
977 i = -EIO;
978 tty_ldisc_deref(ld);
979 if (i > 0)
980 inode->i_atime = current_fs_time(inode->i_sb);
981 return i;
982 }
983
984 void tty_write_unlock(struct tty_struct *tty)
985 __releases(&tty->atomic_write_lock)
986 {
987 mutex_unlock(&tty->atomic_write_lock);
988 wake_up_interruptible_poll(&tty->write_wait, POLLOUT);
989 }
990
991 int tty_write_lock(struct tty_struct *tty, int ndelay)
992 __acquires(&tty->atomic_write_lock)
993 {
994 if (!mutex_trylock(&tty->atomic_write_lock)) {
995 if (ndelay)
996 return -EAGAIN;
997 if (mutex_lock_interruptible(&tty->atomic_write_lock))
998 return -ERESTARTSYS;
999 }
1000 return 0;
1001 }
1002
1003 /*
1004 * Split writes up in sane blocksizes to avoid
1005 * denial-of-service type attacks
1006 */
1007 static inline ssize_t do_tty_write(
1008 ssize_t (*write)(struct tty_struct *, struct file *, const unsigned char *, size_t),
1009 struct tty_struct *tty,
1010 struct file *file,
1011 const char __user *buf,
1012 size_t count)
1013 {
1014 ssize_t ret, written = 0;
1015 unsigned int chunk;
1016
1017 ret = tty_write_lock(tty, file->f_flags & O_NDELAY);
1018 if (ret < 0)
1019 return ret;
1020
1021 /*
1022 * We chunk up writes into a temporary buffer. This
1023 * simplifies low-level drivers immensely, since they
1024 * don't have locking issues and user mode accesses.
1025 *
1026 * But if TTY_NO_WRITE_SPLIT is set, we should use a
1027 * big chunk-size..
1028 *
1029 * The default chunk-size is 2kB, because the NTTY
1030 * layer has problems with bigger chunks. It will
1031 * claim to be able to handle more characters than
1032 * it actually does.
1033 *
1034 * FIXME: This can probably go away now except that 64K chunks
1035 * are too likely to fail unless switched to vmalloc...
1036 */
1037 chunk = 2048;
1038 if (test_bit(TTY_NO_WRITE_SPLIT, &tty->flags))
1039 chunk = 65536;
1040 if (count < chunk)
1041 chunk = count;
1042
1043 /* write_buf/write_cnt is protected by the atomic_write_lock mutex */
1044 if (tty->write_cnt < chunk) {
1045 unsigned char *buf_chunk;
1046
1047 if (chunk < 1024)
1048 chunk = 1024;
1049
1050 buf_chunk = kmalloc(chunk, GFP_KERNEL);
1051 if (!buf_chunk) {
1052 ret = -ENOMEM;
1053 goto out;
1054 }
1055 kfree(tty->write_buf);
1056 tty->write_cnt = chunk;
1057 tty->write_buf = buf_chunk;
1058 }
1059
1060 /* Do the write .. */
1061 for (;;) {
1062 size_t size = count;
1063 if (size > chunk)
1064 size = chunk;
1065 ret = -EFAULT;
1066 if (copy_from_user(tty->write_buf, buf, size))
1067 break;
1068 ret = write(tty, file, tty->write_buf, size);
1069 if (ret <= 0)
1070 break;
1071 written += ret;
1072 buf += ret;
1073 count -= ret;
1074 if (!count)
1075 break;
1076 ret = -ERESTARTSYS;
1077 if (signal_pending(current))
1078 break;
1079 cond_resched();
1080 }
1081 if (written) {
1082 struct inode *inode = file->f_path.dentry->d_inode;
1083 inode->i_mtime = current_fs_time(inode->i_sb);
1084 ret = written;
1085 }
1086 out:
1087 tty_write_unlock(tty);
1088 return ret;
1089 }
1090
1091 /**
1092 * tty_write_message - write a message to a certain tty, not just the console.
1093 * @tty: the destination tty_struct
1094 * @msg: the message to write
1095 *
1096 * This is used for messages that need to be redirected to a specific tty.
1097 * We don't put it into the syslog queue right now maybe in the future if
1098 * really needed.
1099 *
1100 * We must still hold the BTM and test the CLOSING flag for the moment.
1101 */
1102
1103 void tty_write_message(struct tty_struct *tty, char *msg)
1104 {
1105 if (tty) {
1106 mutex_lock(&tty->atomic_write_lock);
1107 tty_lock();
1108 if (tty->ops->write && !test_bit(TTY_CLOSING, &tty->flags)) {
1109 tty_unlock();
1110 tty->ops->write(tty, msg, strlen(msg));
1111 } else
1112 tty_unlock();
1113 tty_write_unlock(tty);
1114 }
1115 return;
1116 }
1117
1118
1119 /**
1120 * tty_write - write method for tty device file
1121 * @file: tty file pointer
1122 * @buf: user data to write
1123 * @count: bytes to write
1124 * @ppos: unused
1125 *
1126 * Write data to a tty device via the line discipline.
1127 *
1128 * Locking:
1129 * Locks the line discipline as required
1130 * Writes to the tty driver are serialized by the atomic_write_lock
1131 * and are then processed in chunks to the device. The line discipline
1132 * write method will not be invoked in parallel for each device.
1133 */
1134
1135 static ssize_t tty_write(struct file *file, const char __user *buf,
1136 size_t count, loff_t *ppos)
1137 {
1138 struct inode *inode = file->f_path.dentry->d_inode;
1139 struct tty_struct *tty = file_tty(file);
1140 struct tty_ldisc *ld;
1141 ssize_t ret;
1142
1143 if (tty_paranoia_check(tty, inode, "tty_write"))
1144 return -EIO;
1145 if (!tty || !tty->ops->write ||
1146 (test_bit(TTY_IO_ERROR, &tty->flags)))
1147 return -EIO;
1148 /* Short term debug to catch buggy drivers */
1149 if (tty->ops->write_room == NULL)
1150 printk(KERN_ERR "tty driver %s lacks a write_room method.\n",
1151 tty->driver->name);
1152 ld = tty_ldisc_ref_wait(tty);
1153 if (!ld->ops->write)
1154 ret = -EIO;
1155 else
1156 ret = do_tty_write(ld->ops->write, tty, file, buf, count);
1157 tty_ldisc_deref(ld);
1158 return ret;
1159 }
1160
1161 ssize_t redirected_tty_write(struct file *file, const char __user *buf,
1162 size_t count, loff_t *ppos)
1163 {
1164 struct file *p = NULL;
1165
1166 spin_lock(&redirect_lock);
1167 if (redirect) {
1168 get_file(redirect);
1169 p = redirect;
1170 }
1171 spin_unlock(&redirect_lock);
1172
1173 if (p) {
1174 ssize_t res;
1175 res = vfs_write(p, buf, count, &p->f_pos);
1176 fput(p);
1177 return res;
1178 }
1179 return tty_write(file, buf, count, ppos);
1180 }
1181
1182 static char ptychar[] = "pqrstuvwxyzabcde";
1183
1184 /**
1185 * pty_line_name - generate name for a pty
1186 * @driver: the tty driver in use
1187 * @index: the minor number
1188 * @p: output buffer of at least 6 bytes
1189 *
1190 * Generate a name from a driver reference and write it to the output
1191 * buffer.
1192 *
1193 * Locking: None
1194 */
1195 static void pty_line_name(struct tty_driver *driver, int index, char *p)
1196 {
1197 int i = index + driver->name_base;
1198 /* ->name is initialized to "ttyp", but "tty" is expected */
1199 sprintf(p, "%s%c%x",
1200 driver->subtype == PTY_TYPE_SLAVE ? "tty" : driver->name,
1201 ptychar[i >> 4 & 0xf], i & 0xf);
1202 }
1203
1204 /**
1205 * tty_line_name - generate name for a tty
1206 * @driver: the tty driver in use
1207 * @index: the minor number
1208 * @p: output buffer of at least 7 bytes
1209 *
1210 * Generate a name from a driver reference and write it to the output
1211 * buffer.
1212 *
1213 * Locking: None
1214 */
1215 static void tty_line_name(struct tty_driver *driver, int index, char *p)
1216 {
1217 sprintf(p, "%s%d", driver->name, index + driver->name_base);
1218 }
1219
1220 /**
1221 * tty_driver_lookup_tty() - find an existing tty, if any
1222 * @driver: the driver for the tty
1223 * @idx: the minor number
1224 *
1225 * Return the tty, if found or ERR_PTR() otherwise.
1226 *
1227 * Locking: tty_mutex must be held. If tty is found, the mutex must
1228 * be held until the 'fast-open' is also done. Will change once we
1229 * have refcounting in the driver and per driver locking
1230 */
1231 static struct tty_struct *tty_driver_lookup_tty(struct tty_driver *driver,
1232 struct inode *inode, int idx)
1233 {
1234 struct tty_struct *tty;
1235
1236 if (driver->ops->lookup)
1237 return driver->ops->lookup(driver, inode, idx);
1238
1239 tty = driver->ttys[idx];
1240 return tty;
1241 }
1242
1243 /**
1244 * tty_init_termios - helper for termios setup
1245 * @tty: the tty to set up
1246 *
1247 * Initialise the termios structures for this tty. Thus runs under
1248 * the tty_mutex currently so we can be relaxed about ordering.
1249 */
1250
1251 int tty_init_termios(struct tty_struct *tty)
1252 {
1253 struct ktermios *tp;
1254 int idx = tty->index;
1255
1256 tp = tty->driver->termios[idx];
1257 if (tp == NULL) {
1258 tp = kzalloc(sizeof(struct ktermios[2]), GFP_KERNEL);
1259 if (tp == NULL)
1260 return -ENOMEM;
1261 memcpy(tp, &tty->driver->init_termios,
1262 sizeof(struct ktermios));
1263 tty->driver->termios[idx] = tp;
1264 }
1265 tty->termios = tp;
1266 tty->termios_locked = tp + 1;
1267
1268 /* Compatibility until drivers always set this */
1269 tty->termios->c_ispeed = tty_termios_input_baud_rate(tty->termios);
1270 tty->termios->c_ospeed = tty_termios_baud_rate(tty->termios);
1271 return 0;
1272 }
1273 EXPORT_SYMBOL_GPL(tty_init_termios);
1274
1275 /**
1276 * tty_driver_install_tty() - install a tty entry in the driver
1277 * @driver: the driver for the tty
1278 * @tty: the tty
1279 *
1280 * Install a tty object into the driver tables. The tty->index field
1281 * will be set by the time this is called. This method is responsible
1282 * for ensuring any need additional structures are allocated and
1283 * configured.
1284 *
1285 * Locking: tty_mutex for now
1286 */
1287 static int tty_driver_install_tty(struct tty_driver *driver,
1288 struct tty_struct *tty)
1289 {
1290 int idx = tty->index;
1291 int ret;
1292
1293 if (driver->ops->install) {
1294 ret = driver->ops->install(driver, tty);
1295 return ret;
1296 }
1297
1298 if (tty_init_termios(tty) == 0) {
1299 tty_driver_kref_get(driver);
1300 tty->count++;
1301 driver->ttys[idx] = tty;
1302 return 0;
1303 }
1304 return -ENOMEM;
1305 }
1306
1307 /**
1308 * tty_driver_remove_tty() - remove a tty from the driver tables
1309 * @driver: the driver for the tty
1310 * @idx: the minor number
1311 *
1312 * Remvoe a tty object from the driver tables. The tty->index field
1313 * will be set by the time this is called.
1314 *
1315 * Locking: tty_mutex for now
1316 */
1317 static void tty_driver_remove_tty(struct tty_driver *driver,
1318 struct tty_struct *tty)
1319 {
1320 if (driver->ops->remove)
1321 driver->ops->remove(driver, tty);
1322 else
1323 driver->ttys[tty->index] = NULL;
1324 }
1325
1326 /*
1327 * tty_reopen() - fast re-open of an open tty
1328 * @tty - the tty to open
1329 *
1330 * Return 0 on success, -errno on error.
1331 *
1332 * Locking: tty_mutex must be held from the time the tty was found
1333 * till this open completes.
1334 */
1335 static int tty_reopen(struct tty_struct *tty)
1336 {
1337 struct tty_driver *driver = tty->driver;
1338
1339 if (test_bit(TTY_CLOSING, &tty->flags) ||
1340 test_bit(TTY_HUPPING, &tty->flags) ||
1341 test_bit(TTY_LDISC_CHANGING, &tty->flags))
1342 return -EIO;
1343
1344 if (driver->type == TTY_DRIVER_TYPE_PTY &&
1345 driver->subtype == PTY_TYPE_MASTER) {
1346 /*
1347 * special case for PTY masters: only one open permitted,
1348 * and the slave side open count is incremented as well.
1349 */
1350 if (tty->count)
1351 return -EIO;
1352
1353 tty->link->count++;
1354 }
1355 tty->count++;
1356 tty->driver = driver; /* N.B. why do this every time?? */
1357
1358 mutex_lock(&tty->ldisc_mutex);
1359 WARN_ON(!test_bit(TTY_LDISC, &tty->flags));
1360 mutex_unlock(&tty->ldisc_mutex);
1361
1362 return 0;
1363 }
1364
1365 /**
1366 * tty_init_dev - initialise a tty device
1367 * @driver: tty driver we are opening a device on
1368 * @idx: device index
1369 * @ret_tty: returned tty structure
1370 * @first_ok: ok to open a new device (used by ptmx)
1371 *
1372 * Prepare a tty device. This may not be a "new" clean device but
1373 * could also be an active device. The pty drivers require special
1374 * handling because of this.
1375 *
1376 * Locking:
1377 * The function is called under the tty_mutex, which
1378 * protects us from the tty struct or driver itself going away.
1379 *
1380 * On exit the tty device has the line discipline attached and
1381 * a reference count of 1. If a pair was created for pty/tty use
1382 * and the other was a pty master then it too has a reference count of 1.
1383 *
1384 * WSH 06/09/97: Rewritten to remove races and properly clean up after a
1385 * failed open. The new code protects the open with a mutex, so it's
1386 * really quite straightforward. The mutex locking can probably be
1387 * relaxed for the (most common) case of reopening a tty.
1388 */
1389
1390 struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx,
1391 int first_ok)
1392 {
1393 struct tty_struct *tty;
1394 int retval;
1395
1396 /* Check if pty master is being opened multiple times */
1397 if (driver->subtype == PTY_TYPE_MASTER &&
1398 (driver->flags & TTY_DRIVER_DEVPTS_MEM) && !first_ok) {
1399 return ERR_PTR(-EIO);
1400 }
1401
1402 /*
1403 * First time open is complex, especially for PTY devices.
1404 * This code guarantees that either everything succeeds and the
1405 * TTY is ready for operation, or else the table slots are vacated
1406 * and the allocated memory released. (Except that the termios
1407 * and locked termios may be retained.)
1408 */
1409
1410 if (!try_module_get(driver->owner))
1411 return ERR_PTR(-ENODEV);
1412
1413 tty = alloc_tty_struct();
1414 if (!tty) {
1415 retval = -ENOMEM;
1416 goto err_module_put;
1417 }
1418 initialize_tty_struct(tty, driver, idx);
1419
1420 retval = tty_driver_install_tty(driver, tty);
1421 if (retval < 0)
1422 goto err_deinit_tty;
1423
1424 /*
1425 * Structures all installed ... call the ldisc open routines.
1426 * If we fail here just call release_tty to clean up. No need
1427 * to decrement the use counts, as release_tty doesn't care.
1428 */
1429 retval = tty_ldisc_setup(tty, tty->link);
1430 if (retval)
1431 goto err_release_tty;
1432 return tty;
1433
1434 err_deinit_tty:
1435 deinitialize_tty_struct(tty);
1436 free_tty_struct(tty);
1437 err_module_put:
1438 module_put(driver->owner);
1439 return ERR_PTR(retval);
1440
1441 /* call the tty release_tty routine to clean out this slot */
1442 err_release_tty:
1443 printk_ratelimited(KERN_INFO "tty_init_dev: ldisc open failed, "
1444 "clearing slot %d\n", idx);
1445 release_tty(tty, idx);
1446 return ERR_PTR(retval);
1447 }
1448
1449 void tty_free_termios(struct tty_struct *tty)
1450 {
1451 struct ktermios *tp;
1452 int idx = tty->index;
1453 /* Kill this flag and push into drivers for locking etc */
1454 if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS) {
1455 /* FIXME: Locking on ->termios array */
1456 tp = tty->termios;
1457 tty->driver->termios[idx] = NULL;
1458 kfree(tp);
1459 }
1460 }
1461 EXPORT_SYMBOL(tty_free_termios);
1462
1463 void tty_shutdown(struct tty_struct *tty)
1464 {
1465 tty_driver_remove_tty(tty->driver, tty);
1466 tty_free_termios(tty);
1467 }
1468 EXPORT_SYMBOL(tty_shutdown);
1469
1470 /**
1471 * release_one_tty - release tty structure memory
1472 * @kref: kref of tty we are obliterating
1473 *
1474 * Releases memory associated with a tty structure, and clears out the
1475 * driver table slots. This function is called when a device is no longer
1476 * in use. It also gets called when setup of a device fails.
1477 *
1478 * Locking:
1479 * tty_mutex - sometimes only
1480 * takes the file list lock internally when working on the list
1481 * of ttys that the driver keeps.
1482 *
1483 * This method gets called from a work queue so that the driver private
1484 * cleanup ops can sleep (needed for USB at least)
1485 */
1486 static void release_one_tty(struct work_struct *work)
1487 {
1488 struct tty_struct *tty =
1489 container_of(work, struct tty_struct, hangup_work);
1490 struct tty_driver *driver = tty->driver;
1491
1492 if (tty->ops->cleanup)
1493 tty->ops->cleanup(tty);
1494
1495 tty->magic = 0;
1496 tty_driver_kref_put(driver);
1497 module_put(driver->owner);
1498
1499 spin_lock(&tty_files_lock);
1500 list_del_init(&tty->tty_files);
1501 spin_unlock(&tty_files_lock);
1502
1503 put_pid(tty->pgrp);
1504 put_pid(tty->session);
1505 free_tty_struct(tty);
1506 }
1507
1508 static void queue_release_one_tty(struct kref *kref)
1509 {
1510 struct tty_struct *tty = container_of(kref, struct tty_struct, kref);
1511
1512 if (tty->ops->shutdown)
1513 tty->ops->shutdown(tty);
1514 else
1515 tty_shutdown(tty);
1516
1517 /* The hangup queue is now free so we can reuse it rather than
1518 waste a chunk of memory for each port */
1519 INIT_WORK(&tty->hangup_work, release_one_tty);
1520 schedule_work(&tty->hangup_work);
1521 }
1522
1523 /**
1524 * tty_kref_put - release a tty kref
1525 * @tty: tty device
1526 *
1527 * Release a reference to a tty device and if need be let the kref
1528 * layer destruct the object for us
1529 */
1530
1531 void tty_kref_put(struct tty_struct *tty)
1532 {
1533 if (tty)
1534 kref_put(&tty->kref, queue_release_one_tty);
1535 }
1536 EXPORT_SYMBOL(tty_kref_put);
1537
1538 /**
1539 * release_tty - release tty structure memory
1540 *
1541 * Release both @tty and a possible linked partner (think pty pair),
1542 * and decrement the refcount of the backing module.
1543 *
1544 * Locking:
1545 * tty_mutex - sometimes only
1546 * takes the file list lock internally when working on the list
1547 * of ttys that the driver keeps.
1548 * FIXME: should we require tty_mutex is held here ??
1549 *
1550 */
1551 static void release_tty(struct tty_struct *tty, int idx)
1552 {
1553 /* This should always be true but check for the moment */
1554 WARN_ON(tty->index != idx);
1555
1556 if (tty->link)
1557 tty_kref_put(tty->link);
1558 tty_kref_put(tty);
1559 }
1560
1561 /**
1562 * tty_release - vfs callback for close
1563 * @inode: inode of tty
1564 * @filp: file pointer for handle to tty
1565 *
1566 * Called the last time each file handle is closed that references
1567 * this tty. There may however be several such references.
1568 *
1569 * Locking:
1570 * Takes bkl. See tty_release_dev
1571 *
1572 * Even releasing the tty structures is a tricky business.. We have
1573 * to be very careful that the structures are all released at the
1574 * same time, as interrupts might otherwise get the wrong pointers.
1575 *
1576 * WSH 09/09/97: rewritten to avoid some nasty race conditions that could
1577 * lead to double frees or releasing memory still in use.
1578 */
1579
1580 int tty_release(struct inode *inode, struct file *filp)
1581 {
1582 struct tty_struct *tty = file_tty(filp);
1583 struct tty_struct *o_tty;
1584 int pty_master, tty_closing, o_tty_closing, do_sleep;
1585 int devpts;
1586 int idx;
1587 char buf[64];
1588
1589 if (tty_paranoia_check(tty, inode, "tty_release_dev"))
1590 return 0;
1591
1592 tty_lock();
1593 check_tty_count(tty, "tty_release_dev");
1594
1595 __tty_fasync(-1, filp, 0);
1596
1597 idx = tty->index;
1598 pty_master = (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
1599 tty->driver->subtype == PTY_TYPE_MASTER);
1600 devpts = (tty->driver->flags & TTY_DRIVER_DEVPTS_MEM) != 0;
1601 o_tty = tty->link;
1602
1603 #ifdef TTY_PARANOIA_CHECK
1604 if (idx < 0 || idx >= tty->driver->num) {
1605 printk(KERN_DEBUG "tty_release_dev: bad idx when trying to "
1606 "free (%s)\n", tty->name);
1607 tty_unlock();
1608 return 0;
1609 }
1610 if (!devpts) {
1611 if (tty != tty->driver->ttys[idx]) {
1612 tty_unlock();
1613 printk(KERN_DEBUG "tty_release_dev: driver.table[%d] not tty "
1614 "for (%s)\n", idx, tty->name);
1615 return 0;
1616 }
1617 if (tty->termios != tty->driver->termios[idx]) {
1618 tty_unlock();
1619 printk(KERN_DEBUG "tty_release_dev: driver.termios[%d] not termios "
1620 "for (%s)\n",
1621 idx, tty->name);
1622 return 0;
1623 }
1624 }
1625 #endif
1626
1627 #ifdef TTY_DEBUG_HANGUP
1628 printk(KERN_DEBUG "tty_release_dev of %s (tty count=%d)...",
1629 tty_name(tty, buf), tty->count);
1630 #endif
1631
1632 #ifdef TTY_PARANOIA_CHECK
1633 if (tty->driver->other &&
1634 !(tty->driver->flags & TTY_DRIVER_DEVPTS_MEM)) {
1635 if (o_tty != tty->driver->other->ttys[idx]) {
1636 tty_unlock();
1637 printk(KERN_DEBUG "tty_release_dev: other->table[%d] "
1638 "not o_tty for (%s)\n",
1639 idx, tty->name);
1640 return 0 ;
1641 }
1642 if (o_tty->termios != tty->driver->other->termios[idx]) {
1643 tty_unlock();
1644 printk(KERN_DEBUG "tty_release_dev: other->termios[%d] "
1645 "not o_termios for (%s)\n",
1646 idx, tty->name);
1647 return 0;
1648 }
1649 if (o_tty->link != tty) {
1650 tty_unlock();
1651 printk(KERN_DEBUG "tty_release_dev: bad pty pointers\n");
1652 return 0;
1653 }
1654 }
1655 #endif
1656 if (tty->ops->close)
1657 tty->ops->close(tty, filp);
1658
1659 tty_unlock();
1660 /*
1661 * Sanity check: if tty->count is going to zero, there shouldn't be
1662 * any waiters on tty->read_wait or tty->write_wait. We test the
1663 * wait queues and kick everyone out _before_ actually starting to
1664 * close. This ensures that we won't block while releasing the tty
1665 * structure.
1666 *
1667 * The test for the o_tty closing is necessary, since the master and
1668 * slave sides may close in any order. If the slave side closes out
1669 * first, its count will be one, since the master side holds an open.
1670 * Thus this test wouldn't be triggered at the time the slave closes,
1671 * so we do it now.
1672 *
1673 * Note that it's possible for the tty to be opened again while we're
1674 * flushing out waiters. By recalculating the closing flags before
1675 * each iteration we avoid any problems.
1676 */
1677 while (1) {
1678 /* Guard against races with tty->count changes elsewhere and
1679 opens on /dev/tty */
1680
1681 mutex_lock(&tty_mutex);
1682 tty_lock();
1683 tty_closing = tty->count <= 1;
1684 o_tty_closing = o_tty &&
1685 (o_tty->count <= (pty_master ? 1 : 0));
1686 do_sleep = 0;
1687
1688 if (tty_closing) {
1689 if (waitqueue_active(&tty->read_wait)) {
1690 wake_up_poll(&tty->read_wait, POLLIN);
1691 do_sleep++;
1692 }
1693 if (waitqueue_active(&tty->write_wait)) {
1694 wake_up_poll(&tty->write_wait, POLLOUT);
1695 do_sleep++;
1696 }
1697 }
1698 if (o_tty_closing) {
1699 if (waitqueue_active(&o_tty->read_wait)) {
1700 wake_up_poll(&o_tty->read_wait, POLLIN);
1701 do_sleep++;
1702 }
1703 if (waitqueue_active(&o_tty->write_wait)) {
1704 wake_up_poll(&o_tty->write_wait, POLLOUT);
1705 do_sleep++;
1706 }
1707 }
1708 if (!do_sleep)
1709 break;
1710
1711 printk(KERN_WARNING "tty_release_dev: %s: read/write wait queue "
1712 "active!\n", tty_name(tty, buf));
1713 tty_unlock();
1714 mutex_unlock(&tty_mutex);
1715 schedule();
1716 }
1717
1718 /*
1719 * The closing flags are now consistent with the open counts on
1720 * both sides, and we've completed the last operation that could
1721 * block, so it's safe to proceed with closing.
1722 */
1723 if (pty_master) {
1724 if (--o_tty->count < 0) {
1725 printk(KERN_WARNING "tty_release_dev: bad pty slave count "
1726 "(%d) for %s\n",
1727 o_tty->count, tty_name(o_tty, buf));
1728 o_tty->count = 0;
1729 }
1730 }
1731 if (--tty->count < 0) {
1732 printk(KERN_WARNING "tty_release_dev: bad tty->count (%d) for %s\n",
1733 tty->count, tty_name(tty, buf));
1734 tty->count = 0;
1735 }
1736
1737 /*
1738 * We've decremented tty->count, so we need to remove this file
1739 * descriptor off the tty->tty_files list; this serves two
1740 * purposes:
1741 * - check_tty_count sees the correct number of file descriptors
1742 * associated with this tty.
1743 * - do_tty_hangup no longer sees this file descriptor as
1744 * something that needs to be handled for hangups.
1745 */
1746 tty_del_file(filp);
1747
1748 /*
1749 * Perform some housekeeping before deciding whether to return.
1750 *
1751 * Set the TTY_CLOSING flag if this was the last open. In the
1752 * case of a pty we may have to wait around for the other side
1753 * to close, and TTY_CLOSING makes sure we can't be reopened.
1754 */
1755 if (tty_closing)
1756 set_bit(TTY_CLOSING, &tty->flags);
1757 if (o_tty_closing)
1758 set_bit(TTY_CLOSING, &o_tty->flags);
1759
1760 /*
1761 * If _either_ side is closing, make sure there aren't any
1762 * processes that still think tty or o_tty is their controlling
1763 * tty.
1764 */
1765 if (tty_closing || o_tty_closing) {
1766 read_lock(&tasklist_lock);
1767 session_clear_tty(tty->session);
1768 if (o_tty)
1769 session_clear_tty(o_tty->session);
1770 read_unlock(&tasklist_lock);
1771 }
1772
1773 mutex_unlock(&tty_mutex);
1774
1775 /* check whether both sides are closing ... */
1776 if (!tty_closing || (o_tty && !o_tty_closing)) {
1777 tty_unlock();
1778 return 0;
1779 }
1780
1781 #ifdef TTY_DEBUG_HANGUP
1782 printk(KERN_DEBUG "freeing tty structure...");
1783 #endif
1784 /*
1785 * Ask the line discipline code to release its structures
1786 */
1787 tty_ldisc_release(tty, o_tty);
1788 /*
1789 * The release_tty function takes care of the details of clearing
1790 * the slots and preserving the termios structure.
1791 */
1792 release_tty(tty, idx);
1793
1794 /* Make this pty number available for reallocation */
1795 if (devpts)
1796 devpts_kill_index(inode, idx);
1797 tty_unlock();
1798 return 0;
1799 }
1800
1801 /**
1802 * tty_open - open a tty device
1803 * @inode: inode of device file
1804 * @filp: file pointer to tty
1805 *
1806 * tty_open and tty_release keep up the tty count that contains the
1807 * number of opens done on a tty. We cannot use the inode-count, as
1808 * different inodes might point to the same tty.
1809 *
1810 * Open-counting is needed for pty masters, as well as for keeping
1811 * track of serial lines: DTR is dropped when the last close happens.
1812 * (This is not done solely through tty->count, now. - Ted 1/27/92)
1813 *
1814 * The termios state of a pty is reset on first open so that
1815 * settings don't persist across reuse.
1816 *
1817 * Locking: tty_mutex protects tty, get_tty_driver and tty_init_dev work.
1818 * tty->count should protect the rest.
1819 * ->siglock protects ->signal/->sighand
1820 */
1821
1822 static int tty_open(struct inode *inode, struct file *filp)
1823 {
1824 struct tty_struct *tty = NULL;
1825 int noctty, retval;
1826 struct tty_driver *driver;
1827 int index;
1828 dev_t device = inode->i_rdev;
1829 unsigned saved_flags = filp->f_flags;
1830
1831 nonseekable_open(inode, filp);
1832
1833 retry_open:
1834 retval = tty_alloc_file(filp);
1835 if (retval)
1836 return -ENOMEM;
1837
1838 noctty = filp->f_flags & O_NOCTTY;
1839 index = -1;
1840 retval = 0;
1841
1842 mutex_lock(&tty_mutex);
1843 tty_lock();
1844
1845 if (device == MKDEV(TTYAUX_MAJOR, 0)) {
1846 tty = get_current_tty();
1847 if (!tty) {
1848 tty_unlock();
1849 mutex_unlock(&tty_mutex);
1850 tty_free_file(filp);
1851 return -ENXIO;
1852 }
1853 driver = tty_driver_kref_get(tty->driver);
1854 index = tty->index;
1855 filp->f_flags |= O_NONBLOCK; /* Don't let /dev/tty block */
1856 /* noctty = 1; */
1857 /* FIXME: Should we take a driver reference ? */
1858 tty_kref_put(tty);
1859 goto got_driver;
1860 }
1861 #ifdef CONFIG_VT
1862 if (device == MKDEV(TTY_MAJOR, 0)) {
1863 extern struct tty_driver *console_driver;
1864 driver = tty_driver_kref_get(console_driver);
1865 index = fg_console;
1866 noctty = 1;
1867 goto got_driver;
1868 }
1869 #endif
1870 if (device == MKDEV(TTYAUX_MAJOR, 1)) {
1871 struct tty_driver *console_driver = console_device(&index);
1872 if (console_driver) {
1873 driver = tty_driver_kref_get(console_driver);
1874 if (driver) {
1875 /* Don't let /dev/console block */
1876 filp->f_flags |= O_NONBLOCK;
1877 noctty = 1;
1878 goto got_driver;
1879 }
1880 }
1881 tty_unlock();
1882 mutex_unlock(&tty_mutex);
1883 tty_free_file(filp);
1884 return -ENODEV;
1885 }
1886
1887 driver = get_tty_driver(device, &index);
1888 if (!driver) {
1889 tty_unlock();
1890 mutex_unlock(&tty_mutex);
1891 tty_free_file(filp);
1892 return -ENODEV;
1893 }
1894 got_driver:
1895 if (!tty) {
1896 /* check whether we're reopening an existing tty */
1897 tty = tty_driver_lookup_tty(driver, inode, index);
1898
1899 if (IS_ERR(tty)) {
1900 tty_unlock();
1901 mutex_unlock(&tty_mutex);
1902 tty_driver_kref_put(driver);
1903 tty_free_file(filp);
1904 return PTR_ERR(tty);
1905 }
1906 }
1907
1908 if (tty) {
1909 retval = tty_reopen(tty);
1910 if (retval)
1911 tty = ERR_PTR(retval);
1912 } else
1913 tty = tty_init_dev(driver, index, 0);
1914
1915 mutex_unlock(&tty_mutex);
1916 tty_driver_kref_put(driver);
1917 if (IS_ERR(tty)) {
1918 tty_unlock();
1919 tty_free_file(filp);
1920 return PTR_ERR(tty);
1921 }
1922
1923 tty_add_file(tty, filp);
1924
1925 check_tty_count(tty, "tty_open");
1926 if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
1927 tty->driver->subtype == PTY_TYPE_MASTER)
1928 noctty = 1;
1929 #ifdef TTY_DEBUG_HANGUP
1930 printk(KERN_DEBUG "opening %s...", tty->name);
1931 #endif
1932 if (tty->ops->open)
1933 retval = tty->ops->open(tty, filp);
1934 else
1935 retval = -ENODEV;
1936 filp->f_flags = saved_flags;
1937
1938 if (!retval && test_bit(TTY_EXCLUSIVE, &tty->flags) &&
1939 !capable(CAP_SYS_ADMIN))
1940 retval = -EBUSY;
1941
1942 if (retval) {
1943 #ifdef TTY_DEBUG_HANGUP
1944 printk(KERN_DEBUG "error %d in opening %s...", retval,
1945 tty->name);
1946 #endif
1947 tty_unlock(); /* need to call tty_release without BTM */
1948 tty_release(inode, filp);
1949 if (retval != -ERESTARTSYS)
1950 return retval;
1951
1952 if (signal_pending(current))
1953 return retval;
1954
1955 schedule();
1956 /*
1957 * Need to reset f_op in case a hangup happened.
1958 */
1959 tty_lock();
1960 if (filp->f_op == &hung_up_tty_fops)
1961 filp->f_op = &tty_fops;
1962 tty_unlock();
1963 goto retry_open;
1964 }
1965 tty_unlock();
1966
1967
1968 mutex_lock(&tty_mutex);
1969 tty_lock();
1970 spin_lock_irq(&current->sighand->siglock);
1971 if (!noctty &&
1972 current->signal->leader &&
1973 !current->signal->tty &&
1974 tty->session == NULL)
1975 __proc_set_tty(current, tty);
1976 spin_unlock_irq(&current->sighand->siglock);
1977 tty_unlock();
1978 mutex_unlock(&tty_mutex);
1979 return 0;
1980 }
1981
1982
1983
1984 /**
1985 * tty_poll - check tty status
1986 * @filp: file being polled
1987 * @wait: poll wait structures to update
1988 *
1989 * Call the line discipline polling method to obtain the poll
1990 * status of the device.
1991 *
1992 * Locking: locks called line discipline but ldisc poll method
1993 * may be re-entered freely by other callers.
1994 */
1995
1996 static unsigned int tty_poll(struct file *filp, poll_table *wait)
1997 {
1998 struct tty_struct *tty = file_tty(filp);
1999 struct tty_ldisc *ld;
2000 int ret = 0;
2001
2002 if (tty_paranoia_check(tty, filp->f_path.dentry->d_inode, "tty_poll"))
2003 return 0;
2004
2005 ld = tty_ldisc_ref_wait(tty);
2006 if (ld->ops->poll)
2007 ret = (ld->ops->poll)(tty, filp, wait);
2008 tty_ldisc_deref(ld);
2009 return ret;
2010 }
2011
2012 static int __tty_fasync(int fd, struct file *filp, int on)
2013 {
2014 struct tty_struct *tty = file_tty(filp);
2015 unsigned long flags;
2016 int retval = 0;
2017
2018 if (tty_paranoia_check(tty, filp->f_path.dentry->d_inode, "tty_fasync"))
2019 goto out;
2020
2021 retval = fasync_helper(fd, filp, on, &tty->fasync);
2022 if (retval <= 0)
2023 goto out;
2024
2025 if (on) {
2026 enum pid_type type;
2027 struct pid *pid;
2028 if (!waitqueue_active(&tty->read_wait))
2029 tty->minimum_to_wake = 1;
2030 spin_lock_irqsave(&tty->ctrl_lock, flags);
2031 if (tty->pgrp) {
2032 pid = tty->pgrp;
2033 type = PIDTYPE_PGID;
2034 } else {
2035 pid = task_pid(current);
2036 type = PIDTYPE_PID;
2037 }
2038 get_pid(pid);
2039 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
2040 retval = __f_setown(filp, pid, type, 0);
2041 put_pid(pid);
2042 if (retval)
2043 goto out;
2044 } else {
2045 if (!tty->fasync && !waitqueue_active(&tty->read_wait))
2046 tty->minimum_to_wake = N_TTY_BUF_SIZE;
2047 }
2048 retval = 0;
2049 out:
2050 return retval;
2051 }
2052
2053 static int tty_fasync(int fd, struct file *filp, int on)
2054 {
2055 int retval;
2056 tty_lock();
2057 retval = __tty_fasync(fd, filp, on);
2058 tty_unlock();
2059 return retval;
2060 }
2061
2062 /**
2063 * tiocsti - fake input character
2064 * @tty: tty to fake input into
2065 * @p: pointer to character
2066 *
2067 * Fake input to a tty device. Does the necessary locking and
2068 * input management.
2069 *
2070 * FIXME: does not honour flow control ??
2071 *
2072 * Locking:
2073 * Called functions take tty_ldisc_lock
2074 * current->signal->tty check is safe without locks
2075 *
2076 * FIXME: may race normal receive processing
2077 */
2078
2079 static int tiocsti(struct tty_struct *tty, char __user *p)
2080 {
2081 char ch, mbz = 0;
2082 struct tty_ldisc *ld;
2083
2084 if ((current->signal->tty != tty) && !capable(CAP_SYS_ADMIN))
2085 return -EPERM;
2086 if (get_user(ch, p))
2087 return -EFAULT;
2088 tty_audit_tiocsti(tty, ch);
2089 ld = tty_ldisc_ref_wait(tty);
2090 ld->ops->receive_buf(tty, &ch, &mbz, 1);
2091 tty_ldisc_deref(ld);
2092 return 0;
2093 }
2094
2095 /**
2096 * tiocgwinsz - implement window query ioctl
2097 * @tty; tty
2098 * @arg: user buffer for result
2099 *
2100 * Copies the kernel idea of the window size into the user buffer.
2101 *
2102 * Locking: tty->termios_mutex is taken to ensure the winsize data
2103 * is consistent.
2104 */
2105
2106 static int tiocgwinsz(struct tty_struct *tty, struct winsize __user *arg)
2107 {
2108 int err;
2109
2110 mutex_lock(&tty->termios_mutex);
2111 err = copy_to_user(arg, &tty->winsize, sizeof(*arg));
2112 mutex_unlock(&tty->termios_mutex);
2113
2114 return err ? -EFAULT: 0;
2115 }
2116
2117 /**
2118 * tty_do_resize - resize event
2119 * @tty: tty being resized
2120 * @rows: rows (character)
2121 * @cols: cols (character)
2122 *
2123 * Update the termios variables and send the necessary signals to
2124 * peform a terminal resize correctly
2125 */
2126
2127 int tty_do_resize(struct tty_struct *tty, struct winsize *ws)
2128 {
2129 struct pid *pgrp;
2130 unsigned long flags;
2131
2132 /* Lock the tty */
2133 mutex_lock(&tty->termios_mutex);
2134 if (!memcmp(ws, &tty->winsize, sizeof(*ws)))
2135 goto done;
2136 /* Get the PID values and reference them so we can
2137 avoid holding the tty ctrl lock while sending signals */
2138 spin_lock_irqsave(&tty->ctrl_lock, flags);
2139 pgrp = get_pid(tty->pgrp);
2140 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
2141
2142 if (pgrp)
2143 kill_pgrp(pgrp, SIGWINCH, 1);
2144 put_pid(pgrp);
2145
2146 tty->winsize = *ws;
2147 done:
2148 mutex_unlock(&tty->termios_mutex);
2149 return 0;
2150 }
2151
2152 /**
2153 * tiocswinsz - implement window size set ioctl
2154 * @tty; tty side of tty
2155 * @arg: user buffer for result
2156 *
2157 * Copies the user idea of the window size to the kernel. Traditionally
2158 * this is just advisory information but for the Linux console it
2159 * actually has driver level meaning and triggers a VC resize.
2160 *
2161 * Locking:
2162 * Driver dependent. The default do_resize method takes the
2163 * tty termios mutex and ctrl_lock. The console takes its own lock
2164 * then calls into the default method.
2165 */
2166
2167 static int tiocswinsz(struct tty_struct *tty, struct winsize __user *arg)
2168 {
2169 struct winsize tmp_ws;
2170 if (copy_from_user(&tmp_ws, arg, sizeof(*arg)))
2171 return -EFAULT;
2172
2173 if (tty->ops->resize)
2174 return tty->ops->resize(tty, &tmp_ws);
2175 else
2176 return tty_do_resize(tty, &tmp_ws);
2177 }
2178
2179 /**
2180 * tioccons - allow admin to move logical console
2181 * @file: the file to become console
2182 *
2183 * Allow the administrator to move the redirected console device
2184 *
2185 * Locking: uses redirect_lock to guard the redirect information
2186 */
2187
2188 static int tioccons(struct file *file)
2189 {
2190 if (!capable(CAP_SYS_ADMIN))
2191 return -EPERM;
2192 if (file->f_op->write == redirected_tty_write) {
2193 struct file *f;
2194 spin_lock(&redirect_lock);
2195 f = redirect;
2196 redirect = NULL;
2197 spin_unlock(&redirect_lock);
2198 if (f)
2199 fput(f);
2200 return 0;
2201 }
2202 spin_lock(&redirect_lock);
2203 if (redirect) {
2204 spin_unlock(&redirect_lock);
2205 return -EBUSY;
2206 }
2207 get_file(file);
2208 redirect = file;
2209 spin_unlock(&redirect_lock);
2210 return 0;
2211 }
2212
2213 /**
2214 * fionbio - non blocking ioctl
2215 * @file: file to set blocking value
2216 * @p: user parameter
2217 *
2218 * Historical tty interfaces had a blocking control ioctl before
2219 * the generic functionality existed. This piece of history is preserved
2220 * in the expected tty API of posix OS's.
2221 *
2222 * Locking: none, the open file handle ensures it won't go away.
2223 */
2224
2225 static int fionbio(struct file *file, int __user *p)
2226 {
2227 int nonblock;
2228
2229 if (get_user(nonblock, p))
2230 return -EFAULT;
2231
2232 spin_lock(&file->f_lock);
2233 if (nonblock)
2234 file->f_flags |= O_NONBLOCK;
2235 else
2236 file->f_flags &= ~O_NONBLOCK;
2237 spin_unlock(&file->f_lock);
2238 return 0;
2239 }
2240
2241 /**
2242 * tiocsctty - set controlling tty
2243 * @tty: tty structure
2244 * @arg: user argument
2245 *
2246 * This ioctl is used to manage job control. It permits a session
2247 * leader to set this tty as the controlling tty for the session.
2248 *
2249 * Locking:
2250 * Takes tty_mutex() to protect tty instance
2251 * Takes tasklist_lock internally to walk sessions
2252 * Takes ->siglock() when updating signal->tty
2253 */
2254
2255 static int tiocsctty(struct tty_struct *tty, int arg)
2256 {
2257 int ret = 0;
2258 if (current->signal->leader && (task_session(current) == tty->session))
2259 return ret;
2260
2261 mutex_lock(&tty_mutex);
2262 /*
2263 * The process must be a session leader and
2264 * not have a controlling tty already.
2265 */
2266 if (!current->signal->leader || current->signal->tty) {
2267 ret = -EPERM;
2268 goto unlock;
2269 }
2270
2271 if (tty->session) {
2272 /*
2273 * This tty is already the controlling
2274 * tty for another session group!
2275 */
2276 if (arg == 1 && capable(CAP_SYS_ADMIN)) {
2277 /*
2278 * Steal it away
2279 */
2280 read_lock(&tasklist_lock);
2281 session_clear_tty(tty->session);
2282 read_unlock(&tasklist_lock);
2283 } else {
2284 ret = -EPERM;
2285 goto unlock;
2286 }
2287 }
2288 proc_set_tty(current, tty);
2289 unlock:
2290 mutex_unlock(&tty_mutex);
2291 return ret;
2292 }
2293
2294 /**
2295 * tty_get_pgrp - return a ref counted pgrp pid
2296 * @tty: tty to read
2297 *
2298 * Returns a refcounted instance of the pid struct for the process
2299 * group controlling the tty.
2300 */
2301
2302 struct pid *tty_get_pgrp(struct tty_struct *tty)
2303 {
2304 unsigned long flags;
2305 struct pid *pgrp;
2306
2307 spin_lock_irqsave(&tty->ctrl_lock, flags);
2308 pgrp = get_pid(tty->pgrp);
2309 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
2310
2311 return pgrp;
2312 }
2313 EXPORT_SYMBOL_GPL(tty_get_pgrp);
2314
2315 /**
2316 * tiocgpgrp - get process group
2317 * @tty: tty passed by user
2318 * @real_tty: tty side of the tty passed by the user if a pty else the tty
2319 * @p: returned pid
2320 *
2321 * Obtain the process group of the tty. If there is no process group
2322 * return an error.
2323 *
2324 * Locking: none. Reference to current->signal->tty is safe.
2325 */
2326
2327 static int tiocgpgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t __user *p)
2328 {
2329 struct pid *pid;
2330 int ret;
2331 /*
2332 * (tty == real_tty) is a cheap way of
2333 * testing if the tty is NOT a master pty.
2334 */
2335 if (tty == real_tty && current->signal->tty != real_tty)
2336 return -ENOTTY;
2337 pid = tty_get_pgrp(real_tty);
2338 ret = put_user(pid_vnr(pid), p);
2339 put_pid(pid);
2340 return ret;
2341 }
2342
2343 /**
2344 * tiocspgrp - attempt to set process group
2345 * @tty: tty passed by user
2346 * @real_tty: tty side device matching tty passed by user
2347 * @p: pid pointer
2348 *
2349 * Set the process group of the tty to the session passed. Only
2350 * permitted where the tty session is our session.
2351 *
2352 * Locking: RCU, ctrl lock
2353 */
2354
2355 static int tiocspgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t __user *p)
2356 {
2357 struct pid *pgrp;
2358 pid_t pgrp_nr;
2359 int retval = tty_check_change(real_tty);
2360 unsigned long flags;
2361
2362 if (retval == -EIO)
2363 return -ENOTTY;
2364 if (retval)
2365 return retval;
2366 if (!current->signal->tty ||
2367 (current->signal->tty != real_tty) ||
2368 (real_tty->session != task_session(current)))
2369 return -ENOTTY;
2370 if (get_user(pgrp_nr, p))
2371 return -EFAULT;
2372 if (pgrp_nr < 0)
2373 return -EINVAL;
2374 rcu_read_lock();
2375 pgrp = find_vpid(pgrp_nr);
2376 retval = -ESRCH;
2377 if (!pgrp)
2378 goto out_unlock;
2379 retval = -EPERM;
2380 if (session_of_pgrp(pgrp) != task_session(current))
2381 goto out_unlock;
2382 retval = 0;
2383 spin_lock_irqsave(&tty->ctrl_lock, flags);
2384 put_pid(real_tty->pgrp);
2385 real_tty->pgrp = get_pid(pgrp);
2386 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
2387 out_unlock:
2388 rcu_read_unlock();
2389 return retval;
2390 }
2391
2392 /**
2393 * tiocgsid - get session id
2394 * @tty: tty passed by user
2395 * @real_tty: tty side of the tty passed by the user if a pty else the tty
2396 * @p: pointer to returned session id
2397 *
2398 * Obtain the session id of the tty. If there is no session
2399 * return an error.
2400 *
2401 * Locking: none. Reference to current->signal->tty is safe.
2402 */
2403
2404 static int tiocgsid(struct tty_struct *tty, struct tty_struct *real_tty, pid_t __user *p)
2405 {
2406 /*
2407 * (tty == real_tty) is a cheap way of
2408 * testing if the tty is NOT a master pty.
2409 */
2410 if (tty == real_tty && current->signal->tty != real_tty)
2411 return -ENOTTY;
2412 if (!real_tty->session)
2413 return -ENOTTY;
2414 return put_user(pid_vnr(real_tty->session), p);
2415 }
2416
2417 /**
2418 * tiocsetd - set line discipline
2419 * @tty: tty device
2420 * @p: pointer to user data
2421 *
2422 * Set the line discipline according to user request.
2423 *
2424 * Locking: see tty_set_ldisc, this function is just a helper
2425 */
2426
2427 static int tiocsetd(struct tty_struct *tty, int __user *p)
2428 {
2429 int ldisc;
2430 int ret;
2431
2432 if (get_user(ldisc, p))
2433 return -EFAULT;
2434
2435 ret = tty_set_ldisc(tty, ldisc);
2436
2437 return ret;
2438 }
2439
2440 /**
2441 * send_break - performed time break
2442 * @tty: device to break on
2443 * @duration: timeout in mS
2444 *
2445 * Perform a timed break on hardware that lacks its own driver level
2446 * timed break functionality.
2447 *
2448 * Locking:
2449 * atomic_write_lock serializes
2450 *
2451 */
2452
2453 static int send_break(struct tty_struct *tty, unsigned int duration)
2454 {
2455 int retval;
2456
2457 if (tty->ops->break_ctl == NULL)
2458 return 0;
2459
2460 if (tty->driver->flags & TTY_DRIVER_HARDWARE_BREAK)
2461 retval = tty->ops->break_ctl(tty, duration);
2462 else {
2463 /* Do the work ourselves */
2464 if (tty_write_lock(tty, 0) < 0)
2465 return -EINTR;
2466 retval = tty->ops->break_ctl(tty, -1);
2467 if (retval)
2468 goto out;
2469 if (!signal_pending(current))
2470 msleep_interruptible(duration);
2471 retval = tty->ops->break_ctl(tty, 0);
2472 out:
2473 tty_write_unlock(tty);
2474 if (signal_pending(current))
2475 retval = -EINTR;
2476 }
2477 return retval;
2478 }
2479
2480 /**
2481 * tty_tiocmget - get modem status
2482 * @tty: tty device
2483 * @file: user file pointer
2484 * @p: pointer to result
2485 *
2486 * Obtain the modem status bits from the tty driver if the feature
2487 * is supported. Return -EINVAL if it is not available.
2488 *
2489 * Locking: none (up to the driver)
2490 */
2491
2492 static int tty_tiocmget(struct tty_struct *tty, int __user *p)
2493 {
2494 int retval = -EINVAL;
2495
2496 if (tty->ops->tiocmget) {
2497 retval = tty->ops->tiocmget(tty);
2498
2499 if (retval >= 0)
2500 retval = put_user(retval, p);
2501 }
2502 return retval;
2503 }
2504
2505 /**
2506 * tty_tiocmset - set modem status
2507 * @tty: tty device
2508 * @cmd: command - clear bits, set bits or set all
2509 * @p: pointer to desired bits
2510 *
2511 * Set the modem status bits from the tty driver if the feature
2512 * is supported. Return -EINVAL if it is not available.
2513 *
2514 * Locking: none (up to the driver)
2515 */
2516
2517 static int tty_tiocmset(struct tty_struct *tty, unsigned int cmd,
2518 unsigned __user *p)
2519 {
2520 int retval;
2521 unsigned int set, clear, val;
2522
2523 if (tty->ops->tiocmset == NULL)
2524 return -EINVAL;
2525
2526 retval = get_user(val, p);
2527 if (retval)
2528 return retval;
2529 set = clear = 0;
2530 switch (cmd) {
2531 case TIOCMBIS:
2532 set = val;
2533 break;
2534 case TIOCMBIC:
2535 clear = val;
2536 break;
2537 case TIOCMSET:
2538 set = val;
2539 clear = ~val;
2540 break;
2541 }
2542 set &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP;
2543 clear &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP;
2544 return tty->ops->tiocmset(tty, set, clear);
2545 }
2546
2547 static int tty_tiocgicount(struct tty_struct *tty, void __user *arg)
2548 {
2549 int retval = -EINVAL;
2550 struct serial_icounter_struct icount;
2551 memset(&icount, 0, sizeof(icount));
2552 if (tty->ops->get_icount)
2553 retval = tty->ops->get_icount(tty, &icount);
2554 if (retval != 0)
2555 return retval;
2556 if (copy_to_user(arg, &icount, sizeof(icount)))
2557 return -EFAULT;
2558 return 0;
2559 }
2560
2561 struct tty_struct *tty_pair_get_tty(struct tty_struct *tty)
2562 {
2563 if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
2564 tty->driver->subtype == PTY_TYPE_MASTER)
2565 tty = tty->link;
2566 return tty;
2567 }
2568 EXPORT_SYMBOL(tty_pair_get_tty);
2569
2570 struct tty_struct *tty_pair_get_pty(struct tty_struct *tty)
2571 {
2572 if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
2573 tty->driver->subtype == PTY_TYPE_MASTER)
2574 return tty;
2575 return tty->link;
2576 }
2577 EXPORT_SYMBOL(tty_pair_get_pty);
2578
2579 /*
2580 * Split this up, as gcc can choke on it otherwise..
2581 */
2582 long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
2583 {
2584 struct tty_struct *tty = file_tty(file);
2585 struct tty_struct *real_tty;
2586 void __user *p = (void __user *)arg;
2587 int retval;
2588 struct tty_ldisc *ld;
2589 struct inode *inode = file->f_dentry->d_inode;
2590
2591 if (tty_paranoia_check(tty, inode, "tty_ioctl"))
2592 return -EINVAL;
2593
2594 real_tty = tty_pair_get_tty(tty);
2595
2596 /*
2597 * Factor out some common prep work
2598 */
2599 switch (cmd) {
2600 case TIOCSETD:
2601 case TIOCSBRK:
2602 case TIOCCBRK:
2603 case TCSBRK:
2604 case TCSBRKP:
2605 retval = tty_check_change(tty);
2606 if (retval)
2607 return retval;
2608 if (cmd != TIOCCBRK) {
2609 tty_wait_until_sent(tty, 0);
2610 if (signal_pending(current))
2611 return -EINTR;
2612 }
2613 break;
2614 }
2615
2616 /*
2617 * Now do the stuff.
2618 */
2619 switch (cmd) {
2620 case TIOCSTI:
2621 return tiocsti(tty, p);
2622 case TIOCGWINSZ:
2623 return tiocgwinsz(real_tty, p);
2624 case TIOCSWINSZ:
2625 return tiocswinsz(real_tty, p);
2626 case TIOCCONS:
2627 return real_tty != tty ? -EINVAL : tioccons(file);
2628 case FIONBIO:
2629 return fionbio(file, p);
2630 case TIOCEXCL:
2631 set_bit(TTY_EXCLUSIVE, &tty->flags);
2632 return 0;
2633 case TIOCNXCL:
2634 clear_bit(TTY_EXCLUSIVE, &tty->flags);
2635 return 0;
2636 case TIOCNOTTY:
2637 if (current->signal->tty != tty)
2638 return -ENOTTY;
2639 no_tty();
2640 return 0;
2641 case TIOCSCTTY:
2642 return tiocsctty(tty, arg);
2643 case TIOCGPGRP:
2644 return tiocgpgrp(tty, real_tty, p);
2645 case TIOCSPGRP:
2646 return tiocspgrp(tty, real_tty, p);
2647 case TIOCGSID:
2648 return tiocgsid(tty, real_tty, p);
2649 case TIOCGETD:
2650 return put_user(tty->ldisc->ops->num, (int __user *)p);
2651 case TIOCSETD:
2652 return tiocsetd(tty, p);
2653 case TIOCVHANGUP:
2654 if (!capable(CAP_SYS_ADMIN))
2655 return -EPERM;
2656 tty_vhangup(tty);
2657 return 0;
2658 case TIOCGDEV:
2659 {
2660 unsigned int ret = new_encode_dev(tty_devnum(real_tty));
2661 return put_user(ret, (unsigned int __user *)p);
2662 }
2663 /*
2664 * Break handling
2665 */
2666 case TIOCSBRK: /* Turn break on, unconditionally */
2667 if (tty->ops->break_ctl)
2668 return tty->ops->break_ctl(tty, -1);
2669 return 0;
2670 case TIOCCBRK: /* Turn break off, unconditionally */
2671 if (tty->ops->break_ctl)
2672 return tty->ops->break_ctl(tty, 0);
2673 return 0;
2674 case TCSBRK: /* SVID version: non-zero arg --> no break */
2675 /* non-zero arg means wait for all output data
2676 * to be sent (performed above) but don't send break.
2677 * This is used by the tcdrain() termios function.
2678 */
2679 if (!arg)
2680 return send_break(tty, 250);
2681 return 0;
2682 case TCSBRKP: /* support for POSIX tcsendbreak() */
2683 return send_break(tty, arg ? arg*100 : 250);
2684
2685 case TIOCMGET:
2686 return tty_tiocmget(tty, p);
2687 case TIOCMSET:
2688 case TIOCMBIC:
2689 case TIOCMBIS:
2690 return tty_tiocmset(tty, cmd, p);
2691 case TIOCGICOUNT:
2692 retval = tty_tiocgicount(tty, p);
2693 /* For the moment allow fall through to the old method */
2694 if (retval != -EINVAL)
2695 return retval;
2696 break;
2697 case TCFLSH:
2698 switch (arg) {
2699 case TCIFLUSH:
2700 case TCIOFLUSH:
2701 /* flush tty buffer and allow ldisc to process ioctl */
2702 tty_buffer_flush(tty);
2703 break;
2704 }
2705 break;
2706 }
2707 if (tty->ops->ioctl) {
2708 retval = (tty->ops->ioctl)(tty, cmd, arg);
2709 if (retval != -ENOIOCTLCMD)
2710 return retval;
2711 }
2712 ld = tty_ldisc_ref_wait(tty);
2713 retval = -EINVAL;
2714 if (ld->ops->ioctl) {
2715 retval = ld->ops->ioctl(tty, file, cmd, arg);
2716 if (retval == -ENOIOCTLCMD)
2717 retval = -EINVAL;
2718 }
2719 tty_ldisc_deref(ld);
2720 return retval;
2721 }
2722
2723 #ifdef CONFIG_COMPAT
2724 static long tty_compat_ioctl(struct file *file, unsigned int cmd,
2725 unsigned long arg)
2726 {
2727 struct inode *inode = file->f_dentry->d_inode;
2728 struct tty_struct *tty = file_tty(file);
2729 struct tty_ldisc *ld;
2730 int retval = -ENOIOCTLCMD;
2731
2732 if (tty_paranoia_check(tty, inode, "tty_ioctl"))
2733 return -EINVAL;
2734
2735 if (tty->ops->compat_ioctl) {
2736 retval = (tty->ops->compat_ioctl)(tty, cmd, arg);
2737 if (retval != -ENOIOCTLCMD)
2738 return retval;
2739 }
2740
2741 ld = tty_ldisc_ref_wait(tty);
2742 if (ld->ops->compat_ioctl)
2743 retval = ld->ops->compat_ioctl(tty, file, cmd, arg);
2744 else
2745 retval = n_tty_compat_ioctl_helper(tty, file, cmd, arg);
2746 tty_ldisc_deref(ld);
2747
2748 return retval;
2749 }
2750 #endif
2751
2752 /*
2753 * This implements the "Secure Attention Key" --- the idea is to
2754 * prevent trojan horses by killing all processes associated with this
2755 * tty when the user hits the "Secure Attention Key". Required for
2756 * super-paranoid applications --- see the Orange Book for more details.
2757 *
2758 * This code could be nicer; ideally it should send a HUP, wait a few
2759 * seconds, then send a INT, and then a KILL signal. But you then
2760 * have to coordinate with the init process, since all processes associated
2761 * with the current tty must be dead before the new getty is allowed
2762 * to spawn.
2763 *
2764 * Now, if it would be correct ;-/ The current code has a nasty hole -
2765 * it doesn't catch files in flight. We may send the descriptor to ourselves
2766 * via AF_UNIX socket, close it and later fetch from socket. FIXME.
2767 *
2768 * Nasty bug: do_SAK is being called in interrupt context. This can
2769 * deadlock. We punt it up to process context. AKPM - 16Mar2001
2770 */
2771 void __do_SAK(struct tty_struct *tty)
2772 {
2773 #ifdef TTY_SOFT_SAK
2774 tty_hangup(tty);
2775 #else
2776 struct task_struct *g, *p;
2777 struct pid *session;
2778 int i;
2779 struct file *filp;
2780 struct fdtable *fdt;
2781
2782 if (!tty)
2783 return;
2784 session = tty->session;
2785
2786 tty_ldisc_flush(tty);
2787
2788 tty_driver_flush_buffer(tty);
2789
2790 read_lock(&tasklist_lock);
2791 /* Kill the entire session */
2792 do_each_pid_task(session, PIDTYPE_SID, p) {
2793 printk(KERN_NOTICE "SAK: killed process %d"
2794 " (%s): task_session(p)==tty->session\n",
2795 task_pid_nr(p), p->comm);
2796 send_sig(SIGKILL, p, 1);
2797 } while_each_pid_task(session, PIDTYPE_SID, p);
2798 /* Now kill any processes that happen to have the
2799 * tty open.
2800 */
2801 do_each_thread(g, p) {
2802 if (p->signal->tty == tty) {
2803 printk(KERN_NOTICE "SAK: killed process %d"
2804 " (%s): task_session(p)==tty->session\n",
2805 task_pid_nr(p), p->comm);
2806 send_sig(SIGKILL, p, 1);
2807 continue;
2808 }
2809 task_lock(p);
2810 if (p->files) {
2811 /*
2812 * We don't take a ref to the file, so we must
2813 * hold ->file_lock instead.
2814 */
2815 spin_lock(&p->files->file_lock);
2816 fdt = files_fdtable(p->files);
2817 for (i = 0; i < fdt->max_fds; i++) {
2818 filp = fcheck_files(p->files, i);
2819 if (!filp)
2820 continue;
2821 if (filp->f_op->read == tty_read &&
2822 file_tty(filp) == tty) {
2823 printk(KERN_NOTICE "SAK: killed process %d"
2824 " (%s): fd#%d opened to the tty\n",
2825 task_pid_nr(p), p->comm, i);
2826 force_sig(SIGKILL, p);
2827 break;
2828 }
2829 }
2830 spin_unlock(&p->files->file_lock);
2831 }
2832 task_unlock(p);
2833 } while_each_thread(g, p);
2834 read_unlock(&tasklist_lock);
2835 #endif
2836 }
2837
2838 static void do_SAK_work(struct work_struct *work)
2839 {
2840 struct tty_struct *tty =
2841 container_of(work, struct tty_struct, SAK_work);
2842 __do_SAK(tty);
2843 }
2844
2845 /*
2846 * The tq handling here is a little racy - tty->SAK_work may already be queued.
2847 * Fortunately we don't need to worry, because if ->SAK_work is already queued,
2848 * the values which we write to it will be identical to the values which it
2849 * already has. --akpm
2850 */
2851 void do_SAK(struct tty_struct *tty)
2852 {
2853 if (!tty)
2854 return;
2855 schedule_work(&tty->SAK_work);
2856 }
2857
2858 EXPORT_SYMBOL(do_SAK);
2859
2860 static int dev_match_devt(struct device *dev, void *data)
2861 {
2862 dev_t *devt = data;
2863 return dev->devt == *devt;
2864 }
2865
2866 /* Must put_device() after it's unused! */
2867 static struct device *tty_get_device(struct tty_struct *tty)
2868 {
2869 dev_t devt = tty_devnum(tty);
2870 return class_find_device(tty_class, NULL, &devt, dev_match_devt);
2871 }
2872
2873
2874 /**
2875 * initialize_tty_struct
2876 * @tty: tty to initialize
2877 *
2878 * This subroutine initializes a tty structure that has been newly
2879 * allocated.
2880 *
2881 * Locking: none - tty in question must not be exposed at this point
2882 */
2883
2884 void initialize_tty_struct(struct tty_struct *tty,
2885 struct tty_driver *driver, int idx)
2886 {
2887 memset(tty, 0, sizeof(struct tty_struct));
2888 kref_init(&tty->kref);
2889 tty->magic = TTY_MAGIC;
2890 tty_ldisc_init(tty);
2891 tty->session = NULL;
2892 tty->pgrp = NULL;
2893 tty->overrun_time = jiffies;
2894 tty->buf.head = tty->buf.tail = NULL;
2895 tty_buffer_init(tty);
2896 mutex_init(&tty->termios_mutex);
2897 mutex_init(&tty->ldisc_mutex);
2898 init_waitqueue_head(&tty->write_wait);
2899 init_waitqueue_head(&tty->read_wait);
2900 INIT_WORK(&tty->hangup_work, do_tty_hangup);
2901 mutex_init(&tty->atomic_read_lock);
2902 mutex_init(&tty->atomic_write_lock);
2903 mutex_init(&tty->output_lock);
2904 mutex_init(&tty->echo_lock);
2905 spin_lock_init(&tty->read_lock);
2906 spin_lock_init(&tty->ctrl_lock);
2907 INIT_LIST_HEAD(&tty->tty_files);
2908 INIT_WORK(&tty->SAK_work, do_SAK_work);
2909
2910 tty->driver = driver;
2911 tty->ops = driver->ops;
2912 tty->index = idx;
2913 tty_line_name(driver, idx, tty->name);
2914 tty->dev = tty_get_device(tty);
2915 }
2916
2917 /**
2918 * deinitialize_tty_struct
2919 * @tty: tty to deinitialize
2920 *
2921 * This subroutine deinitializes a tty structure that has been newly
2922 * allocated but tty_release cannot be called on that yet.
2923 *
2924 * Locking: none - tty in question must not be exposed at this point
2925 */
2926 void deinitialize_tty_struct(struct tty_struct *tty)
2927 {
2928 tty_ldisc_deinit(tty);
2929 }
2930
2931 /**
2932 * tty_put_char - write one character to a tty
2933 * @tty: tty
2934 * @ch: character
2935 *
2936 * Write one byte to the tty using the provided put_char method
2937 * if present. Returns the number of characters successfully output.
2938 *
2939 * Note: the specific put_char operation in the driver layer may go
2940 * away soon. Don't call it directly, use this method
2941 */
2942
2943 int tty_put_char(struct tty_struct *tty, unsigned char ch)
2944 {
2945 if (tty->ops->put_char)
2946 return tty->ops->put_char(tty, ch);
2947 return tty->ops->write(tty, &ch, 1);
2948 }
2949 EXPORT_SYMBOL_GPL(tty_put_char);
2950
2951 struct class *tty_class;
2952
2953 /**
2954 * tty_register_device - register a tty device
2955 * @driver: the tty driver that describes the tty device
2956 * @index: the index in the tty driver for this tty device
2957 * @device: a struct device that is associated with this tty device.
2958 * This field is optional, if there is no known struct device
2959 * for this tty device it can be set to NULL safely.
2960 *
2961 * Returns a pointer to the struct device for this tty device
2962 * (or ERR_PTR(-EFOO) on error).
2963 *
2964 * This call is required to be made to register an individual tty device
2965 * if the tty driver's flags have the TTY_DRIVER_DYNAMIC_DEV bit set. If
2966 * that bit is not set, this function should not be called by a tty
2967 * driver.
2968 *
2969 * Locking: ??
2970 */
2971
2972 struct device *tty_register_device(struct tty_driver *driver, unsigned index,
2973 struct device *device)
2974 {
2975 char name[64];
2976 dev_t dev = MKDEV(driver->major, driver->minor_start) + index;
2977
2978 if (index >= driver->num) {
2979 printk(KERN_ERR "Attempt to register invalid tty line number "
2980 " (%d).\n", index);
2981 return ERR_PTR(-EINVAL);
2982 }
2983
2984 if (driver->type == TTY_DRIVER_TYPE_PTY)
2985 pty_line_name(driver, index, name);
2986 else
2987 tty_line_name(driver, index, name);
2988
2989 return device_create(tty_class, device, dev, NULL, name);
2990 }
2991 EXPORT_SYMBOL(tty_register_device);
2992
2993 /**
2994 * tty_unregister_device - unregister a tty device
2995 * @driver: the tty driver that describes the tty device
2996 * @index: the index in the tty driver for this tty device
2997 *
2998 * If a tty device is registered with a call to tty_register_device() then
2999 * this function must be called when the tty device is gone.
3000 *
3001 * Locking: ??
3002 */
3003
3004 void tty_unregister_device(struct tty_driver *driver, unsigned index)
3005 {
3006 device_destroy(tty_class,
3007 MKDEV(driver->major, driver->minor_start) + index);
3008 }
3009 EXPORT_SYMBOL(tty_unregister_device);
3010
3011 struct tty_driver *alloc_tty_driver(int lines)
3012 {
3013 struct tty_driver *driver;
3014
3015 driver = kzalloc(sizeof(struct tty_driver), GFP_KERNEL);
3016 if (driver) {
3017 kref_init(&driver->kref);
3018 driver->magic = TTY_DRIVER_MAGIC;
3019 driver->num = lines;
3020 /* later we'll move allocation of tables here */
3021 }
3022 return driver;
3023 }
3024 EXPORT_SYMBOL(alloc_tty_driver);
3025
3026 static void destruct_tty_driver(struct kref *kref)
3027 {
3028 struct tty_driver *driver = container_of(kref, struct tty_driver, kref);
3029 int i;
3030 struct ktermios *tp;
3031 void *p;
3032
3033 if (driver->flags & TTY_DRIVER_INSTALLED) {
3034 /*
3035 * Free the termios and termios_locked structures because
3036 * we don't want to get memory leaks when modular tty
3037 * drivers are removed from the kernel.
3038 */
3039 for (i = 0; i < driver->num; i++) {
3040 tp = driver->termios[i];
3041 if (tp) {
3042 driver->termios[i] = NULL;
3043 kfree(tp);
3044 }
3045 if (!(driver->flags & TTY_DRIVER_DYNAMIC_DEV))
3046 tty_unregister_device(driver, i);
3047 }
3048 p = driver->ttys;
3049 proc_tty_unregister_driver(driver);
3050 driver->ttys = NULL;
3051 driver->termios = NULL;
3052 kfree(p);
3053 cdev_del(&driver->cdev);
3054 }
3055 kfree(driver);
3056 }
3057
3058 void tty_driver_kref_put(struct tty_driver *driver)
3059 {
3060 kref_put(&driver->kref, destruct_tty_driver);
3061 }
3062 EXPORT_SYMBOL(tty_driver_kref_put);
3063
3064 void tty_set_operations(struct tty_driver *driver,
3065 const struct tty_operations *op)
3066 {
3067 driver->ops = op;
3068 };
3069 EXPORT_SYMBOL(tty_set_operations);
3070
3071 void put_tty_driver(struct tty_driver *d)
3072 {
3073 tty_driver_kref_put(d);
3074 }
3075 EXPORT_SYMBOL(put_tty_driver);
3076
3077 /*
3078 * Called by a tty driver to register itself.
3079 */
3080 int tty_register_driver(struct tty_driver *driver)
3081 {
3082 int error;
3083 int i;
3084 dev_t dev;
3085 void **p = NULL;
3086 struct device *d;
3087
3088 if (!(driver->flags & TTY_DRIVER_DEVPTS_MEM) && driver->num) {
3089 p = kzalloc(driver->num * 2 * sizeof(void *), GFP_KERNEL);
3090 if (!p)
3091 return -ENOMEM;
3092 }
3093
3094 if (!driver->major) {
3095 error = alloc_chrdev_region(&dev, driver->minor_start,
3096 driver->num, driver->name);
3097 if (!error) {
3098 driver->major = MAJOR(dev);
3099 driver->minor_start = MINOR(dev);
3100 }
3101 } else {
3102 dev = MKDEV(driver->major, driver->minor_start);
3103 error = register_chrdev_region(dev, driver->num, driver->name);
3104 }
3105 if (error < 0) {
3106 kfree(p);
3107 return error;
3108 }
3109
3110 if (p) {
3111 driver->ttys = (struct tty_struct **)p;
3112 driver->termios = (struct ktermios **)(p + driver->num);
3113 } else {
3114 driver->ttys = NULL;
3115 driver->termios = NULL;
3116 }
3117
3118 cdev_init(&driver->cdev, &tty_fops);
3119 driver->cdev.owner = driver->owner;
3120 error = cdev_add(&driver->cdev, dev, driver->num);
3121 if (error) {
3122 unregister_chrdev_region(dev, driver->num);
3123 driver->ttys = NULL;
3124 driver->termios = NULL;
3125 kfree(p);
3126 return error;
3127 }
3128
3129 mutex_lock(&tty_mutex);
3130 list_add(&driver->tty_drivers, &tty_drivers);
3131 mutex_unlock(&tty_mutex);
3132
3133 if (!(driver->flags & TTY_DRIVER_DYNAMIC_DEV)) {
3134 for (i = 0; i < driver->num; i++) {
3135 d = tty_register_device(driver, i, NULL);
3136 if (IS_ERR(d)) {
3137 error = PTR_ERR(d);
3138 goto err;
3139 }
3140 }
3141 }
3142 proc_tty_register_driver(driver);
3143 driver->flags |= TTY_DRIVER_INSTALLED;
3144 return 0;
3145
3146 err:
3147 for (i--; i >= 0; i--)
3148 tty_unregister_device(driver, i);
3149
3150 mutex_lock(&tty_mutex);
3151 list_del(&driver->tty_drivers);
3152 mutex_unlock(&tty_mutex);
3153
3154 unregister_chrdev_region(dev, driver->num);
3155 driver->ttys = NULL;
3156 driver->termios = NULL;
3157 kfree(p);
3158 return error;
3159 }
3160
3161 EXPORT_SYMBOL(tty_register_driver);
3162
3163 /*
3164 * Called by a tty driver to unregister itself.
3165 */
3166 int tty_unregister_driver(struct tty_driver *driver)
3167 {
3168 #if 0
3169 /* FIXME */
3170 if (driver->refcount)
3171 return -EBUSY;
3172 #endif
3173 unregister_chrdev_region(MKDEV(driver->major, driver->minor_start),
3174 driver->num);
3175 mutex_lock(&tty_mutex);
3176 list_del(&driver->tty_drivers);
3177 mutex_unlock(&tty_mutex);
3178 return 0;
3179 }
3180
3181 EXPORT_SYMBOL(tty_unregister_driver);
3182
3183 dev_t tty_devnum(struct tty_struct *tty)
3184 {
3185 return MKDEV(tty->driver->major, tty->driver->minor_start) + tty->index;
3186 }
3187 EXPORT_SYMBOL(tty_devnum);
3188
3189 void proc_clear_tty(struct task_struct *p)
3190 {
3191 unsigned long flags;
3192 struct tty_struct *tty;
3193 spin_lock_irqsave(&p->sighand->siglock, flags);
3194 tty = p->signal->tty;
3195 p->signal->tty = NULL;
3196 spin_unlock_irqrestore(&p->sighand->siglock, flags);
3197 tty_kref_put(tty);
3198 }
3199
3200 /* Called under the sighand lock */
3201
3202 static void __proc_set_tty(struct task_struct *tsk, struct tty_struct *tty)
3203 {
3204 if (tty) {
3205 unsigned long flags;
3206 /* We should not have a session or pgrp to put here but.... */
3207 spin_lock_irqsave(&tty->ctrl_lock, flags);
3208 put_pid(tty->session);
3209 put_pid(tty->pgrp);
3210 tty->pgrp = get_pid(task_pgrp(tsk));
3211 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
3212 tty->session = get_pid(task_session(tsk));
3213 if (tsk->signal->tty) {
3214 printk(KERN_DEBUG "tty not NULL!!\n");
3215 tty_kref_put(tsk->signal->tty);
3216 }
3217 }
3218 put_pid(tsk->signal->tty_old_pgrp);
3219 tsk->signal->tty = tty_kref_get(tty);
3220 tsk->signal->tty_old_pgrp = NULL;
3221 }
3222
3223 static void proc_set_tty(struct task_struct *tsk, struct tty_struct *tty)
3224 {
3225 spin_lock_irq(&tsk->sighand->siglock);
3226 __proc_set_tty(tsk, tty);
3227 spin_unlock_irq(&tsk->sighand->siglock);
3228 }
3229
3230 struct tty_struct *get_current_tty(void)
3231 {
3232 struct tty_struct *tty;
3233 unsigned long flags;
3234
3235 spin_lock_irqsave(&current->sighand->siglock, flags);
3236 tty = tty_kref_get(current->signal->tty);
3237 spin_unlock_irqrestore(&current->sighand->siglock, flags);
3238 return tty;
3239 }
3240 EXPORT_SYMBOL_GPL(get_current_tty);
3241
3242 void tty_default_fops(struct file_operations *fops)
3243 {
3244 *fops = tty_fops;
3245 }
3246
3247 /*
3248 * Initialize the console device. This is called *early*, so
3249 * we can't necessarily depend on lots of kernel help here.
3250 * Just do some early initializations, and do the complex setup
3251 * later.
3252 */
3253 void __init console_init(void)
3254 {
3255 initcall_t *call;
3256
3257 /* Setup the default TTY line discipline. */
3258 tty_ldisc_begin();
3259
3260 /*
3261 * set up the console device so that later boot sequences can
3262 * inform about problems etc..
3263 */
3264 call = __con_initcall_start;
3265 while (call < __con_initcall_end) {
3266 (*call)();
3267 call++;
3268 }
3269 }
3270
3271 static char *tty_devnode(struct device *dev, mode_t *mode)
3272 {
3273 if (!mode)
3274 return NULL;
3275 if (dev->devt == MKDEV(TTYAUX_MAJOR, 0) ||
3276 dev->devt == MKDEV(TTYAUX_MAJOR, 2))
3277 *mode = 0666;
3278 return NULL;
3279 }
3280
3281 static int __init tty_class_init(void)
3282 {
3283 tty_class = class_create(THIS_MODULE, "tty");
3284 if (IS_ERR(tty_class))
3285 return PTR_ERR(tty_class);
3286 tty_class->devnode = tty_devnode;
3287 return 0;
3288 }
3289
3290 postcore_initcall(tty_class_init);
3291
3292 /* 3/2004 jmc: why do these devices exist? */
3293 static struct cdev tty_cdev, console_cdev;
3294
3295 static ssize_t show_cons_active(struct device *dev,
3296 struct device_attribute *attr, char *buf)
3297 {
3298 struct console *cs[16];
3299 int i = 0;
3300 struct console *c;
3301 ssize_t count = 0;
3302
3303 console_lock();
3304 for_each_console(c) {
3305 if (!c->device)
3306 continue;
3307 if (!c->write)
3308 continue;
3309 if ((c->flags & CON_ENABLED) == 0)
3310 continue;
3311 cs[i++] = c;
3312 if (i >= ARRAY_SIZE(cs))
3313 break;
3314 }
3315 while (i--)
3316 count += sprintf(buf + count, "%s%d%c",
3317 cs[i]->name, cs[i]->index, i ? ' ':'\n');
3318 console_unlock();
3319
3320 return count;
3321 }
3322 static DEVICE_ATTR(active, S_IRUGO, show_cons_active, NULL);
3323
3324 static struct device *consdev;
3325
3326 void console_sysfs_notify(void)
3327 {
3328 if (consdev)
3329 sysfs_notify(&consdev->kobj, NULL, "active");
3330 }
3331
3332 /*
3333 * Ok, now we can initialize the rest of the tty devices and can count
3334 * on memory allocations, interrupts etc..
3335 */
3336 int __init tty_init(void)
3337 {
3338 cdev_init(&tty_cdev, &tty_fops);
3339 if (cdev_add(&tty_cdev, MKDEV(TTYAUX_MAJOR, 0), 1) ||
3340 register_chrdev_region(MKDEV(TTYAUX_MAJOR, 0), 1, "/dev/tty") < 0)
3341 panic("Couldn't register /dev/tty driver\n");
3342 device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 0), NULL, "tty");
3343
3344 cdev_init(&console_cdev, &console_fops);
3345 if (cdev_add(&console_cdev, MKDEV(TTYAUX_MAJOR, 1), 1) ||
3346 register_chrdev_region(MKDEV(TTYAUX_MAJOR, 1), 1, "/dev/console") < 0)
3347 panic("Couldn't register /dev/console driver\n");
3348 consdev = device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 1), NULL,
3349 "console");
3350 if (IS_ERR(consdev))
3351 consdev = NULL;
3352 else
3353 WARN_ON(device_create_file(consdev, &dev_attr_active) < 0);
3354
3355 #ifdef CONFIG_VT
3356 vty_init(&console_fops);
3357 #endif
3358 return 0;
3359 }
3360
This page took 0.143631 seconds and 5 git commands to generate.