tty: Split ldisc code into its own file
[linux-2.6/sactl.git] / drivers / char / tty_io.c
blobd27a08b374d050da20be594e332ffe026191b506
1 /*
2 * linux/drivers/char/tty_io.c
4 * Copyright (C) 1991, 1992 Linus Torvalds
5 */
7 /*
8 * 'tty_io.c' gives an orthogonal feeling to tty's, be they consoles
9 * or rs-channels. It also implements echoing, cooked mode etc.
11 * Kill-line thanks to John T Kohl, who also corrected VMIN = VTIME = 0.
13 * Modified by Theodore Ts'o, 9/14/92, to dynamically allocate the
14 * tty_struct and tty_queue structures. Previously there was an array
15 * of 256 tty_struct's which was statically allocated, and the
16 * tty_queue structures were allocated at boot time. Both are now
17 * dynamically allocated only when the tty is open.
19 * Also restructured routines so that there is more of a separation
20 * between the high-level tty routines (tty_io.c and tty_ioctl.c) and
21 * the low-level tty routines (serial.c, pty.c, console.c). This
22 * makes for cleaner and more compact code. -TYT, 9/17/92
24 * Modified by Fred N. van Kempen, 01/29/93, to add line disciplines
25 * which can be dynamically activated and de-activated by the line
26 * discipline handling modules (like SLIP).
28 * NOTE: pay no attention to the line discipline code (yet); its
29 * interface is still subject to change in this version...
30 * -- TYT, 1/31/92
32 * Added functionality to the OPOST tty handling. No delays, but all
33 * other bits should be there.
34 * -- Nick Holloway <alfie@dcs.warwick.ac.uk>, 27th May 1993.
36 * Rewrote canonical mode and added more termios flags.
37 * -- julian@uhunix.uhcc.hawaii.edu (J. Cowley), 13Jan94
39 * Reorganized FASYNC support so mouse code can share it.
40 * -- ctm@ardi.com, 9Sep95
42 * New TIOCLINUX variants added.
43 * -- mj@k332.feld.cvut.cz, 19-Nov-95
45 * Restrict vt switching via ioctl()
46 * -- grif@cs.ucr.edu, 5-Dec-95
48 * Move console and virtual terminal code to more appropriate files,
49 * implement CONFIG_VT and generalize console device interface.
50 * -- Marko Kohtala <Marko.Kohtala@hut.fi>, March 97
52 * Rewrote init_dev and release_dev to eliminate races.
53 * -- Bill Hawes <whawes@star.net>, June 97
55 * Added devfs support.
56 * -- C. Scott Ananian <cananian@alumni.princeton.edu>, 13-Jan-1998
58 * Added support for a Unix98-style ptmx device.
59 * -- C. Scott Ananian <cananian@alumni.princeton.edu>, 14-Jan-1998
61 * Reduced memory usage for older ARM systems
62 * -- Russell King <rmk@arm.linux.org.uk>
64 * Move do_SAK() into process context. Less stack use in devfs functions.
65 * alloc_tty_struct() always uses kmalloc()
66 * -- Andrew Morton <andrewm@uow.edu.eu> 17Mar01
69 #include <linux/types.h>
70 #include <linux/major.h>
71 #include <linux/errno.h>
72 #include <linux/signal.h>
73 #include <linux/fcntl.h>
74 #include <linux/sched.h>
75 #include <linux/interrupt.h>
76 #include <linux/tty.h>
77 #include <linux/tty_driver.h>
78 #include <linux/tty_flip.h>
79 #include <linux/devpts_fs.h>
80 #include <linux/file.h>
81 #include <linux/fdtable.h>
82 #include <linux/console.h>
83 #include <linux/timer.h>
84 #include <linux/ctype.h>
85 #include <linux/kd.h>
86 #include <linux/mm.h>
87 #include <linux/string.h>
88 #include <linux/slab.h>
89 #include <linux/poll.h>
90 #include <linux/proc_fs.h>
91 #include <linux/init.h>
92 #include <linux/module.h>
93 #include <linux/smp_lock.h>
94 #include <linux/device.h>
95 #include <linux/wait.h>
96 #include <linux/bitops.h>
97 #include <linux/delay.h>
98 #include <linux/seq_file.h>
100 #include <linux/uaccess.h>
101 #include <asm/system.h>
103 #include <linux/kbd_kern.h>
104 #include <linux/vt_kern.h>
105 #include <linux/selection.h>
107 #include <linux/kmod.h>
108 #include <linux/nsproxy.h>
110 #undef TTY_DEBUG_HANGUP
112 #define TTY_PARANOIA_CHECK 1
113 #define CHECK_TTY_COUNT 1
115 struct ktermios tty_std_termios = { /* for the benefit of tty drivers */
116 .c_iflag = ICRNL | IXON,
117 .c_oflag = OPOST | ONLCR,
118 .c_cflag = B38400 | CS8 | CREAD | HUPCL,
119 .c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK |
120 ECHOCTL | ECHOKE | IEXTEN,
121 .c_cc = INIT_C_CC,
122 .c_ispeed = 38400,
123 .c_ospeed = 38400
126 EXPORT_SYMBOL(tty_std_termios);
128 /* This list gets poked at by procfs and various bits of boot up code. This
129 could do with some rationalisation such as pulling the tty proc function
130 into this file */
132 LIST_HEAD(tty_drivers); /* linked list of tty drivers */
134 /* Mutex to protect creating and releasing a tty. This is shared with
135 vt.c for deeply disgusting hack reasons */
136 DEFINE_MUTEX(tty_mutex);
137 EXPORT_SYMBOL(tty_mutex);
139 #ifdef CONFIG_UNIX98_PTYS
140 extern struct tty_driver *ptm_driver; /* Unix98 pty masters; for /dev/ptmx */
141 static int ptmx_open(struct inode *, struct file *);
142 #endif
144 static void initialize_tty_struct(struct tty_struct *tty);
146 static ssize_t tty_read(struct file *, char __user *, size_t, loff_t *);
147 static ssize_t tty_write(struct file *, const char __user *, size_t, loff_t *);
148 ssize_t redirected_tty_write(struct file *, const char __user *,
149 size_t, loff_t *);
150 static unsigned int tty_poll(struct file *, poll_table *);
151 static int tty_open(struct inode *, struct file *);
152 static int tty_release(struct inode *, struct file *);
153 long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
154 #ifdef CONFIG_COMPAT
155 static long tty_compat_ioctl(struct file *file, unsigned int cmd,
156 unsigned long arg);
157 #else
158 #define tty_compat_ioctl NULL
159 #endif
160 static int tty_fasync(int fd, struct file *filp, int on);
161 static void release_tty(struct tty_struct *tty, int idx);
162 static void __proc_set_tty(struct task_struct *tsk, struct tty_struct *tty);
163 static void proc_set_tty(struct task_struct *tsk, struct tty_struct *tty);
166 * alloc_tty_struct - allocate a tty object
168 * Return a new empty tty structure. The data fields have not
169 * been initialized in any way but has been zeroed
171 * Locking: none
174 static struct tty_struct *alloc_tty_struct(void)
176 return kzalloc(sizeof(struct tty_struct), GFP_KERNEL);
179 static void tty_buffer_free_all(struct tty_struct *);
182 * free_tty_struct - free a disused tty
183 * @tty: tty struct to free
185 * Free the write buffers, tty queue and tty memory itself.
187 * Locking: none. Must be called after tty is definitely unused
190 static inline void free_tty_struct(struct tty_struct *tty)
192 kfree(tty->write_buf);
193 tty_buffer_free_all(tty);
194 kfree(tty);
197 #define TTY_NUMBER(tty) ((tty)->index + (tty)->driver->name_base)
200 * tty_name - return tty naming
201 * @tty: tty structure
202 * @buf: buffer for output
204 * Convert a tty structure into a name. The name reflects the kernel
205 * naming policy and if udev is in use may not reflect user space
207 * Locking: none
210 char *tty_name(struct tty_struct *tty, char *buf)
212 if (!tty) /* Hmm. NULL pointer. That's fun. */
213 strcpy(buf, "NULL tty");
214 else
215 strcpy(buf, tty->name);
216 return buf;
219 EXPORT_SYMBOL(tty_name);
221 int tty_paranoia_check(struct tty_struct *tty, struct inode *inode,
222 const char *routine)
224 #ifdef TTY_PARANOIA_CHECK
225 if (!tty) {
226 printk(KERN_WARNING
227 "null TTY for (%d:%d) in %s\n",
228 imajor(inode), iminor(inode), routine);
229 return 1;
231 if (tty->magic != TTY_MAGIC) {
232 printk(KERN_WARNING
233 "bad magic number for tty struct (%d:%d) in %s\n",
234 imajor(inode), iminor(inode), routine);
235 return 1;
237 #endif
238 return 0;
241 static int check_tty_count(struct tty_struct *tty, const char *routine)
243 #ifdef CHECK_TTY_COUNT
244 struct list_head *p;
245 int count = 0;
247 file_list_lock();
248 list_for_each(p, &tty->tty_files) {
249 count++;
251 file_list_unlock();
252 if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
253 tty->driver->subtype == PTY_TYPE_SLAVE &&
254 tty->link && tty->link->count)
255 count++;
256 if (tty->count != count) {
257 printk(KERN_WARNING "Warning: dev (%s) tty->count(%d) "
258 "!= #fd's(%d) in %s\n",
259 tty->name, tty->count, count, routine);
260 return count;
262 #endif
263 return 0;
267 * Tty buffer allocation management
271 * tty_buffer_free_all - free buffers used by a tty
272 * @tty: tty to free from
274 * Remove all the buffers pending on a tty whether queued with data
275 * or in the free ring. Must be called when the tty is no longer in use
277 * Locking: none
280 static void tty_buffer_free_all(struct tty_struct *tty)
282 struct tty_buffer *thead;
283 while ((thead = tty->buf.head) != NULL) {
284 tty->buf.head = thead->next;
285 kfree(thead);
287 while ((thead = tty->buf.free) != NULL) {
288 tty->buf.free = thead->next;
289 kfree(thead);
291 tty->buf.tail = NULL;
292 tty->buf.memory_used = 0;
296 * tty_buffer_init - prepare a tty buffer structure
297 * @tty: tty to initialise
299 * Set up the initial state of the buffer management for a tty device.
300 * Must be called before the other tty buffer functions are used.
302 * Locking: none
305 static void tty_buffer_init(struct tty_struct *tty)
307 spin_lock_init(&tty->buf.lock);
308 tty->buf.head = NULL;
309 tty->buf.tail = NULL;
310 tty->buf.free = NULL;
311 tty->buf.memory_used = 0;
315 * tty_buffer_alloc - allocate a tty buffer
316 * @tty: tty device
317 * @size: desired size (characters)
319 * Allocate a new tty buffer to hold the desired number of characters.
320 * Return NULL if out of memory or the allocation would exceed the
321 * per device queue
323 * Locking: Caller must hold tty->buf.lock
326 static struct tty_buffer *tty_buffer_alloc(struct tty_struct *tty, size_t size)
328 struct tty_buffer *p;
330 if (tty->buf.memory_used + size > 65536)
331 return NULL;
332 p = kmalloc(sizeof(struct tty_buffer) + 2 * size, GFP_ATOMIC);
333 if (p == NULL)
334 return NULL;
335 p->used = 0;
336 p->size = size;
337 p->next = NULL;
338 p->commit = 0;
339 p->read = 0;
340 p->char_buf_ptr = (char *)(p->data);
341 p->flag_buf_ptr = (unsigned char *)p->char_buf_ptr + size;
342 tty->buf.memory_used += size;
343 return p;
347 * tty_buffer_free - free a tty buffer
348 * @tty: tty owning the buffer
349 * @b: the buffer to free
351 * Free a tty buffer, or add it to the free list according to our
352 * internal strategy
354 * Locking: Caller must hold tty->buf.lock
357 static void tty_buffer_free(struct tty_struct *tty, struct tty_buffer *b)
359 /* Dumb strategy for now - should keep some stats */
360 tty->buf.memory_used -= b->size;
361 WARN_ON(tty->buf.memory_used < 0);
363 if (b->size >= 512)
364 kfree(b);
365 else {
366 b->next = tty->buf.free;
367 tty->buf.free = b;
372 * __tty_buffer_flush - flush full tty buffers
373 * @tty: tty to flush
375 * flush all the buffers containing receive data. Caller must
376 * hold the buffer lock and must have ensured no parallel flush to
377 * ldisc is running.
379 * Locking: Caller must hold tty->buf.lock
382 static void __tty_buffer_flush(struct tty_struct *tty)
384 struct tty_buffer *thead;
386 while ((thead = tty->buf.head) != NULL) {
387 tty->buf.head = thead->next;
388 tty_buffer_free(tty, thead);
390 tty->buf.tail = NULL;
394 * tty_buffer_flush - flush full tty buffers
395 * @tty: tty to flush
397 * flush all the buffers containing receive data. If the buffer is
398 * being processed by flush_to_ldisc then we defer the processing
399 * to that function
401 * Locking: none
404 static void tty_buffer_flush(struct tty_struct *tty)
406 unsigned long flags;
407 spin_lock_irqsave(&tty->buf.lock, flags);
409 /* If the data is being pushed to the tty layer then we can't
410 process it here. Instead set a flag and the flush_to_ldisc
411 path will process the flush request before it exits */
412 if (test_bit(TTY_FLUSHING, &tty->flags)) {
413 set_bit(TTY_FLUSHPENDING, &tty->flags);
414 spin_unlock_irqrestore(&tty->buf.lock, flags);
415 wait_event(tty->read_wait,
416 test_bit(TTY_FLUSHPENDING, &tty->flags) == 0);
417 return;
418 } else
419 __tty_buffer_flush(tty);
420 spin_unlock_irqrestore(&tty->buf.lock, flags);
424 * tty_buffer_find - find a free tty buffer
425 * @tty: tty owning the buffer
426 * @size: characters wanted
428 * Locate an existing suitable tty buffer or if we are lacking one then
429 * allocate a new one. We round our buffers off in 256 character chunks
430 * to get better allocation behaviour.
432 * Locking: Caller must hold tty->buf.lock
435 static struct tty_buffer *tty_buffer_find(struct tty_struct *tty, size_t size)
437 struct tty_buffer **tbh = &tty->buf.free;
438 while ((*tbh) != NULL) {
439 struct tty_buffer *t = *tbh;
440 if (t->size >= size) {
441 *tbh = t->next;
442 t->next = NULL;
443 t->used = 0;
444 t->commit = 0;
445 t->read = 0;
446 tty->buf.memory_used += t->size;
447 return t;
449 tbh = &((*tbh)->next);
451 /* Round the buffer size out */
452 size = (size + 0xFF) & ~0xFF;
453 return tty_buffer_alloc(tty, size);
454 /* Should possibly check if this fails for the largest buffer we
455 have queued and recycle that ? */
459 * tty_buffer_request_room - grow tty buffer if needed
460 * @tty: tty structure
461 * @size: size desired
463 * Make at least size bytes of linear space available for the tty
464 * buffer. If we fail return the size we managed to find.
466 * Locking: Takes tty->buf.lock
468 int tty_buffer_request_room(struct tty_struct *tty, size_t size)
470 struct tty_buffer *b, *n;
471 int left;
472 unsigned long flags;
474 spin_lock_irqsave(&tty->buf.lock, flags);
476 /* OPTIMISATION: We could keep a per tty "zero" sized buffer to
477 remove this conditional if its worth it. This would be invisible
478 to the callers */
479 if ((b = tty->buf.tail) != NULL)
480 left = b->size - b->used;
481 else
482 left = 0;
484 if (left < size) {
485 /* This is the slow path - looking for new buffers to use */
486 if ((n = tty_buffer_find(tty, size)) != NULL) {
487 if (b != NULL) {
488 b->next = n;
489 b->commit = b->used;
490 } else
491 tty->buf.head = n;
492 tty->buf.tail = n;
493 } else
494 size = left;
497 spin_unlock_irqrestore(&tty->buf.lock, flags);
498 return size;
500 EXPORT_SYMBOL_GPL(tty_buffer_request_room);
503 * tty_insert_flip_string - Add characters to the tty buffer
504 * @tty: tty structure
505 * @chars: characters
506 * @size: size
508 * Queue a series of bytes to the tty buffering. All the characters
509 * passed are marked as without error. Returns the number added.
511 * Locking: Called functions may take tty->buf.lock
514 int tty_insert_flip_string(struct tty_struct *tty, const unsigned char *chars,
515 size_t size)
517 int copied = 0;
518 do {
519 int space = tty_buffer_request_room(tty, size - copied);
520 struct tty_buffer *tb = tty->buf.tail;
521 /* If there is no space then tb may be NULL */
522 if (unlikely(space == 0))
523 break;
524 memcpy(tb->char_buf_ptr + tb->used, chars, space);
525 memset(tb->flag_buf_ptr + tb->used, TTY_NORMAL, space);
526 tb->used += space;
527 copied += space;
528 chars += space;
529 /* There is a small chance that we need to split the data over
530 several buffers. If this is the case we must loop */
531 } while (unlikely(size > copied));
532 return copied;
534 EXPORT_SYMBOL(tty_insert_flip_string);
537 * tty_insert_flip_string_flags - Add characters to the tty buffer
538 * @tty: tty structure
539 * @chars: characters
540 * @flags: flag bytes
541 * @size: size
543 * Queue a series of bytes to the tty buffering. For each character
544 * the flags array indicates the status of the character. Returns the
545 * number added.
547 * Locking: Called functions may take tty->buf.lock
550 int tty_insert_flip_string_flags(struct tty_struct *tty,
551 const unsigned char *chars, const char *flags, size_t size)
553 int copied = 0;
554 do {
555 int space = tty_buffer_request_room(tty, size - copied);
556 struct tty_buffer *tb = tty->buf.tail;
557 /* If there is no space then tb may be NULL */
558 if (unlikely(space == 0))
559 break;
560 memcpy(tb->char_buf_ptr + tb->used, chars, space);
561 memcpy(tb->flag_buf_ptr + tb->used, flags, space);
562 tb->used += space;
563 copied += space;
564 chars += space;
565 flags += space;
566 /* There is a small chance that we need to split the data over
567 several buffers. If this is the case we must loop */
568 } while (unlikely(size > copied));
569 return copied;
571 EXPORT_SYMBOL(tty_insert_flip_string_flags);
574 * tty_schedule_flip - push characters to ldisc
575 * @tty: tty to push from
577 * Takes any pending buffers and transfers their ownership to the
578 * ldisc side of the queue. It then schedules those characters for
579 * processing by the line discipline.
581 * Locking: Takes tty->buf.lock
584 void tty_schedule_flip(struct tty_struct *tty)
586 unsigned long flags;
587 spin_lock_irqsave(&tty->buf.lock, flags);
588 if (tty->buf.tail != NULL)
589 tty->buf.tail->commit = tty->buf.tail->used;
590 spin_unlock_irqrestore(&tty->buf.lock, flags);
591 schedule_delayed_work(&tty->buf.work, 1);
593 EXPORT_SYMBOL(tty_schedule_flip);
596 * tty_prepare_flip_string - make room for characters
597 * @tty: tty
598 * @chars: return pointer for character write area
599 * @size: desired size
601 * Prepare a block of space in the buffer for data. Returns the length
602 * available and buffer pointer to the space which is now allocated and
603 * accounted for as ready for normal characters. This is used for drivers
604 * that need their own block copy routines into the buffer. There is no
605 * guarantee the buffer is a DMA target!
607 * Locking: May call functions taking tty->buf.lock
610 int tty_prepare_flip_string(struct tty_struct *tty, unsigned char **chars,
611 size_t size)
613 int space = tty_buffer_request_room(tty, size);
614 if (likely(space)) {
615 struct tty_buffer *tb = tty->buf.tail;
616 *chars = tb->char_buf_ptr + tb->used;
617 memset(tb->flag_buf_ptr + tb->used, TTY_NORMAL, space);
618 tb->used += space;
620 return space;
623 EXPORT_SYMBOL_GPL(tty_prepare_flip_string);
626 * tty_prepare_flip_string_flags - make room for characters
627 * @tty: tty
628 * @chars: return pointer for character write area
629 * @flags: return pointer for status flag write area
630 * @size: desired size
632 * Prepare a block of space in the buffer for data. Returns the length
633 * available and buffer pointer to the space which is now allocated and
634 * accounted for as ready for characters. This is used for drivers
635 * that need their own block copy routines into the buffer. There is no
636 * guarantee the buffer is a DMA target!
638 * Locking: May call functions taking tty->buf.lock
641 int tty_prepare_flip_string_flags(struct tty_struct *tty,
642 unsigned char **chars, char **flags, size_t size)
644 int space = tty_buffer_request_room(tty, size);
645 if (likely(space)) {
646 struct tty_buffer *tb = tty->buf.tail;
647 *chars = tb->char_buf_ptr + tb->used;
648 *flags = tb->flag_buf_ptr + tb->used;
649 tb->used += space;
651 return space;
654 EXPORT_SYMBOL_GPL(tty_prepare_flip_string_flags);
659 * get_tty_driver - find device of a tty
660 * @dev_t: device identifier
661 * @index: returns the index of the tty
663 * This routine returns a tty driver structure, given a device number
664 * and also passes back the index number.
666 * Locking: caller must hold tty_mutex
669 static struct tty_driver *get_tty_driver(dev_t device, int *index)
671 struct tty_driver *p;
673 list_for_each_entry(p, &tty_drivers, tty_drivers) {
674 dev_t base = MKDEV(p->major, p->minor_start);
675 if (device < base || device >= base + p->num)
676 continue;
677 *index = device - base;
678 return p;
680 return NULL;
683 #ifdef CONFIG_CONSOLE_POLL
686 * tty_find_polling_driver - find device of a polled tty
687 * @name: name string to match
688 * @line: pointer to resulting tty line nr
690 * This routine returns a tty driver structure, given a name
691 * and the condition that the tty driver is capable of polled
692 * operation.
694 struct tty_driver *tty_find_polling_driver(char *name, int *line)
696 struct tty_driver *p, *res = NULL;
697 int tty_line = 0;
698 char *str;
700 mutex_lock(&tty_mutex);
701 /* Search through the tty devices to look for a match */
702 list_for_each_entry(p, &tty_drivers, tty_drivers) {
703 str = name + strlen(p->name);
704 tty_line = simple_strtoul(str, &str, 10);
705 if (*str == ',')
706 str++;
707 if (*str == '\0')
708 str = NULL;
710 if (tty_line >= 0 && tty_line <= p->num && p->ops &&
711 p->ops->poll_init && !p->ops->poll_init(p, tty_line, str)) {
712 res = p;
713 *line = tty_line;
714 break;
717 mutex_unlock(&tty_mutex);
719 return res;
721 EXPORT_SYMBOL_GPL(tty_find_polling_driver);
722 #endif
725 * tty_check_change - check for POSIX terminal changes
726 * @tty: tty to check
728 * If we try to write to, or set the state of, a terminal and we're
729 * not in the foreground, send a SIGTTOU. If the signal is blocked or
730 * ignored, go ahead and perform the operation. (POSIX 7.2)
732 * Locking: ctrl_lock
735 int tty_check_change(struct tty_struct *tty)
737 unsigned long flags;
738 int ret = 0;
740 if (current->signal->tty != tty)
741 return 0;
743 spin_lock_irqsave(&tty->ctrl_lock, flags);
745 if (!tty->pgrp) {
746 printk(KERN_WARNING "tty_check_change: tty->pgrp == NULL!\n");
747 goto out_unlock;
749 if (task_pgrp(current) == tty->pgrp)
750 goto out_unlock;
751 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
752 if (is_ignored(SIGTTOU))
753 goto out;
754 if (is_current_pgrp_orphaned()) {
755 ret = -EIO;
756 goto out;
758 kill_pgrp(task_pgrp(current), SIGTTOU, 1);
759 set_thread_flag(TIF_SIGPENDING);
760 ret = -ERESTARTSYS;
761 out:
762 return ret;
763 out_unlock:
764 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
765 return ret;
768 EXPORT_SYMBOL(tty_check_change);
770 static ssize_t hung_up_tty_read(struct file *file, char __user *buf,
771 size_t count, loff_t *ppos)
773 return 0;
776 static ssize_t hung_up_tty_write(struct file *file, const char __user *buf,
777 size_t count, loff_t *ppos)
779 return -EIO;
782 /* No kernel lock held - none needed ;) */
783 static unsigned int hung_up_tty_poll(struct file *filp, poll_table *wait)
785 return POLLIN | POLLOUT | POLLERR | POLLHUP | POLLRDNORM | POLLWRNORM;
788 static long hung_up_tty_ioctl(struct file *file, unsigned int cmd,
789 unsigned long arg)
791 return cmd == TIOCSPGRP ? -ENOTTY : -EIO;
794 static long hung_up_tty_compat_ioctl(struct file *file,
795 unsigned int cmd, unsigned long arg)
797 return cmd == TIOCSPGRP ? -ENOTTY : -EIO;
800 static const struct file_operations tty_fops = {
801 .llseek = no_llseek,
802 .read = tty_read,
803 .write = tty_write,
804 .poll = tty_poll,
805 .unlocked_ioctl = tty_ioctl,
806 .compat_ioctl = tty_compat_ioctl,
807 .open = tty_open,
808 .release = tty_release,
809 .fasync = tty_fasync,
812 #ifdef CONFIG_UNIX98_PTYS
813 static const struct file_operations ptmx_fops = {
814 .llseek = no_llseek,
815 .read = tty_read,
816 .write = tty_write,
817 .poll = tty_poll,
818 .unlocked_ioctl = tty_ioctl,
819 .compat_ioctl = tty_compat_ioctl,
820 .open = ptmx_open,
821 .release = tty_release,
822 .fasync = tty_fasync,
824 #endif
826 static const struct file_operations console_fops = {
827 .llseek = no_llseek,
828 .read = tty_read,
829 .write = redirected_tty_write,
830 .poll = tty_poll,
831 .unlocked_ioctl = tty_ioctl,
832 .compat_ioctl = tty_compat_ioctl,
833 .open = tty_open,
834 .release = tty_release,
835 .fasync = tty_fasync,
838 static const struct file_operations hung_up_tty_fops = {
839 .llseek = no_llseek,
840 .read = hung_up_tty_read,
841 .write = hung_up_tty_write,
842 .poll = hung_up_tty_poll,
843 .unlocked_ioctl = hung_up_tty_ioctl,
844 .compat_ioctl = hung_up_tty_compat_ioctl,
845 .release = tty_release,
848 static DEFINE_SPINLOCK(redirect_lock);
849 static struct file *redirect;
852 * tty_wakeup - request more data
853 * @tty: terminal
855 * Internal and external helper for wakeups of tty. This function
856 * informs the line discipline if present that the driver is ready
857 * to receive more output data.
860 void tty_wakeup(struct tty_struct *tty)
862 struct tty_ldisc *ld;
864 if (test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) {
865 ld = tty_ldisc_ref(tty);
866 if (ld) {
867 if (ld->ops->write_wakeup)
868 ld->ops->write_wakeup(tty);
869 tty_ldisc_deref(ld);
872 wake_up_interruptible(&tty->write_wait);
875 EXPORT_SYMBOL_GPL(tty_wakeup);
878 * tty_ldisc_flush - flush line discipline queue
879 * @tty: tty
881 * Flush the line discipline queue (if any) for this tty. If there
882 * is no line discipline active this is a no-op.
885 void tty_ldisc_flush(struct tty_struct *tty)
887 struct tty_ldisc *ld = tty_ldisc_ref(tty);
888 if (ld) {
889 if (ld->ops->flush_buffer)
890 ld->ops->flush_buffer(tty);
891 tty_ldisc_deref(ld);
893 tty_buffer_flush(tty);
896 EXPORT_SYMBOL_GPL(tty_ldisc_flush);
899 * tty_reset_termios - reset terminal state
900 * @tty: tty to reset
902 * Restore a terminal to the driver default state
905 static void tty_reset_termios(struct tty_struct *tty)
907 mutex_lock(&tty->termios_mutex);
908 *tty->termios = tty->driver->init_termios;
909 tty->termios->c_ispeed = tty_termios_input_baud_rate(tty->termios);
910 tty->termios->c_ospeed = tty_termios_baud_rate(tty->termios);
911 mutex_unlock(&tty->termios_mutex);
915 * do_tty_hangup - actual handler for hangup events
916 * @work: tty device
918 k * This can be called by the "eventd" kernel thread. That is process
919 * synchronous but doesn't hold any locks, so we need to make sure we
920 * have the appropriate locks for what we're doing.
922 * The hangup event clears any pending redirections onto the hung up
923 * device. It ensures future writes will error and it does the needed
924 * line discipline hangup and signal delivery. The tty object itself
925 * remains intact.
927 * Locking:
928 * BKL
929 * redirect lock for undoing redirection
930 * file list lock for manipulating list of ttys
931 * tty_ldisc_lock from called functions
932 * termios_mutex resetting termios data
933 * tasklist_lock to walk task list for hangup event
934 * ->siglock to protect ->signal/->sighand
936 static void do_tty_hangup(struct work_struct *work)
938 struct tty_struct *tty =
939 container_of(work, struct tty_struct, hangup_work);
940 struct file *cons_filp = NULL;
941 struct file *filp, *f = NULL;
942 struct task_struct *p;
943 struct tty_ldisc *ld;
944 int closecount = 0, n;
945 unsigned long flags;
947 if (!tty)
948 return;
950 /* inuse_filps is protected by the single kernel lock */
951 lock_kernel();
953 spin_lock(&redirect_lock);
954 if (redirect && redirect->private_data == tty) {
955 f = redirect;
956 redirect = NULL;
958 spin_unlock(&redirect_lock);
960 check_tty_count(tty, "do_tty_hangup");
961 file_list_lock();
962 /* This breaks for file handles being sent over AF_UNIX sockets ? */
963 list_for_each_entry(filp, &tty->tty_files, f_u.fu_list) {
964 if (filp->f_op->write == redirected_tty_write)
965 cons_filp = filp;
966 if (filp->f_op->write != tty_write)
967 continue;
968 closecount++;
969 tty_fasync(-1, filp, 0); /* can't block */
970 filp->f_op = &hung_up_tty_fops;
972 file_list_unlock();
974 * FIXME! What are the locking issues here? This may me overdoing
975 * things... This question is especially important now that we've
976 * removed the irqlock.
978 ld = tty_ldisc_ref(tty);
979 if (ld != NULL) {
980 /* We may have no line discipline at this point */
981 if (ld->ops->flush_buffer)
982 ld->ops->flush_buffer(tty);
983 tty_driver_flush_buffer(tty);
984 if ((test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) &&
985 ld->ops->write_wakeup)
986 ld->ops->write_wakeup(tty);
987 if (ld->ops->hangup)
988 ld->ops->hangup(tty);
991 * FIXME: Once we trust the LDISC code better we can wait here for
992 * ldisc completion and fix the driver call race
994 wake_up_interruptible(&tty->write_wait);
995 wake_up_interruptible(&tty->read_wait);
997 * Shutdown the current line discipline, and reset it to
998 * N_TTY.
1000 if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS)
1001 tty_reset_termios(tty);
1002 /* Defer ldisc switch */
1003 /* tty_deferred_ldisc_switch(N_TTY);
1005 This should get done automatically when the port closes and
1006 tty_release is called */
1008 read_lock(&tasklist_lock);
1009 if (tty->session) {
1010 do_each_pid_task(tty->session, PIDTYPE_SID, p) {
1011 spin_lock_irq(&p->sighand->siglock);
1012 if (p->signal->tty == tty)
1013 p->signal->tty = NULL;
1014 if (!p->signal->leader) {
1015 spin_unlock_irq(&p->sighand->siglock);
1016 continue;
1018 __group_send_sig_info(SIGHUP, SEND_SIG_PRIV, p);
1019 __group_send_sig_info(SIGCONT, SEND_SIG_PRIV, p);
1020 put_pid(p->signal->tty_old_pgrp); /* A noop */
1021 spin_lock_irqsave(&tty->ctrl_lock, flags);
1022 if (tty->pgrp)
1023 p->signal->tty_old_pgrp = get_pid(tty->pgrp);
1024 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
1025 spin_unlock_irq(&p->sighand->siglock);
1026 } while_each_pid_task(tty->session, PIDTYPE_SID, p);
1028 read_unlock(&tasklist_lock);
1030 spin_lock_irqsave(&tty->ctrl_lock, flags);
1031 tty->flags = 0;
1032 put_pid(tty->session);
1033 put_pid(tty->pgrp);
1034 tty->session = NULL;
1035 tty->pgrp = NULL;
1036 tty->ctrl_status = 0;
1037 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
1040 * If one of the devices matches a console pointer, we
1041 * cannot just call hangup() because that will cause
1042 * tty->count and state->count to go out of sync.
1043 * So we just call close() the right number of times.
1045 if (cons_filp) {
1046 if (tty->ops->close)
1047 for (n = 0; n < closecount; n++)
1048 tty->ops->close(tty, cons_filp);
1049 } else if (tty->ops->hangup)
1050 (tty->ops->hangup)(tty);
1052 * We don't want to have driver/ldisc interactions beyond
1053 * the ones we did here. The driver layer expects no
1054 * calls after ->hangup() from the ldisc side. However we
1055 * can't yet guarantee all that.
1057 set_bit(TTY_HUPPED, &tty->flags);
1058 if (ld) {
1059 tty_ldisc_enable(tty);
1060 tty_ldisc_deref(ld);
1062 unlock_kernel();
1063 if (f)
1064 fput(f);
1068 * tty_hangup - trigger a hangup event
1069 * @tty: tty to hangup
1071 * A carrier loss (virtual or otherwise) has occurred on this like
1072 * schedule a hangup sequence to run after this event.
1075 void tty_hangup(struct tty_struct *tty)
1077 #ifdef TTY_DEBUG_HANGUP
1078 char buf[64];
1079 printk(KERN_DEBUG "%s hangup...\n", tty_name(tty, buf));
1080 #endif
1081 schedule_work(&tty->hangup_work);
1084 EXPORT_SYMBOL(tty_hangup);
1087 * tty_vhangup - process vhangup
1088 * @tty: tty to hangup
1090 * The user has asked via system call for the terminal to be hung up.
1091 * We do this synchronously so that when the syscall returns the process
1092 * is complete. That guarantee is necessary for security reasons.
1095 void tty_vhangup(struct tty_struct *tty)
1097 #ifdef TTY_DEBUG_HANGUP
1098 char buf[64];
1100 printk(KERN_DEBUG "%s vhangup...\n", tty_name(tty, buf));
1101 #endif
1102 do_tty_hangup(&tty->hangup_work);
1105 EXPORT_SYMBOL(tty_vhangup);
1108 * tty_hung_up_p - was tty hung up
1109 * @filp: file pointer of tty
1111 * Return true if the tty has been subject to a vhangup or a carrier
1112 * loss
1115 int tty_hung_up_p(struct file *filp)
1117 return (filp->f_op == &hung_up_tty_fops);
1120 EXPORT_SYMBOL(tty_hung_up_p);
1123 * is_tty - checker whether file is a TTY
1124 * @filp: file handle that may be a tty
1126 * Check if the file handle is a tty handle.
1129 int is_tty(struct file *filp)
1131 return filp->f_op->read == tty_read
1132 || filp->f_op->read == hung_up_tty_read;
1135 static void session_clear_tty(struct pid *session)
1137 struct task_struct *p;
1138 do_each_pid_task(session, PIDTYPE_SID, p) {
1139 proc_clear_tty(p);
1140 } while_each_pid_task(session, PIDTYPE_SID, p);
1144 * disassociate_ctty - disconnect controlling tty
1145 * @on_exit: true if exiting so need to "hang up" the session
1147 * This function is typically called only by the session leader, when
1148 * it wants to disassociate itself from its controlling tty.
1150 * It performs the following functions:
1151 * (1) Sends a SIGHUP and SIGCONT to the foreground process group
1152 * (2) Clears the tty from being controlling the session
1153 * (3) Clears the controlling tty for all processes in the
1154 * session group.
1156 * The argument on_exit is set to 1 if called when a process is
1157 * exiting; it is 0 if called by the ioctl TIOCNOTTY.
1159 * Locking:
1160 * BKL is taken for hysterical raisins
1161 * tty_mutex is taken to protect tty
1162 * ->siglock is taken to protect ->signal/->sighand
1163 * tasklist_lock is taken to walk process list for sessions
1164 * ->siglock is taken to protect ->signal/->sighand
1167 void disassociate_ctty(int on_exit)
1169 struct tty_struct *tty;
1170 struct pid *tty_pgrp = NULL;
1173 mutex_lock(&tty_mutex);
1174 tty = get_current_tty();
1175 if (tty) {
1176 tty_pgrp = get_pid(tty->pgrp);
1177 mutex_unlock(&tty_mutex);
1178 lock_kernel();
1179 /* XXX: here we race, there is nothing protecting tty */
1180 if (on_exit && tty->driver->type != TTY_DRIVER_TYPE_PTY)
1181 tty_vhangup(tty);
1182 unlock_kernel();
1183 } else if (on_exit) {
1184 struct pid *old_pgrp;
1185 spin_lock_irq(&current->sighand->siglock);
1186 old_pgrp = current->signal->tty_old_pgrp;
1187 current->signal->tty_old_pgrp = NULL;
1188 spin_unlock_irq(&current->sighand->siglock);
1189 if (old_pgrp) {
1190 kill_pgrp(old_pgrp, SIGHUP, on_exit);
1191 kill_pgrp(old_pgrp, SIGCONT, on_exit);
1192 put_pid(old_pgrp);
1194 mutex_unlock(&tty_mutex);
1195 return;
1197 if (tty_pgrp) {
1198 kill_pgrp(tty_pgrp, SIGHUP, on_exit);
1199 if (!on_exit)
1200 kill_pgrp(tty_pgrp, SIGCONT, on_exit);
1201 put_pid(tty_pgrp);
1204 spin_lock_irq(&current->sighand->siglock);
1205 put_pid(current->signal->tty_old_pgrp);
1206 current->signal->tty_old_pgrp = NULL;
1207 spin_unlock_irq(&current->sighand->siglock);
1209 mutex_lock(&tty_mutex);
1210 /* It is possible that do_tty_hangup has free'd this tty */
1211 tty = get_current_tty();
1212 if (tty) {
1213 unsigned long flags;
1214 spin_lock_irqsave(&tty->ctrl_lock, flags);
1215 put_pid(tty->session);
1216 put_pid(tty->pgrp);
1217 tty->session = NULL;
1218 tty->pgrp = NULL;
1219 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
1220 } else {
1221 #ifdef TTY_DEBUG_HANGUP
1222 printk(KERN_DEBUG "error attempted to write to tty [0x%p]"
1223 " = NULL", tty);
1224 #endif
1226 mutex_unlock(&tty_mutex);
1228 /* Now clear signal->tty under the lock */
1229 read_lock(&tasklist_lock);
1230 session_clear_tty(task_session(current));
1231 read_unlock(&tasklist_lock);
1236 * no_tty - Ensure the current process does not have a controlling tty
1238 void no_tty(void)
1240 struct task_struct *tsk = current;
1241 lock_kernel();
1242 if (tsk->signal->leader)
1243 disassociate_ctty(0);
1244 unlock_kernel();
1245 proc_clear_tty(tsk);
1250 * stop_tty - propagate flow control
1251 * @tty: tty to stop
1253 * Perform flow control to the driver. For PTY/TTY pairs we
1254 * must also propagate the TIOCKPKT status. May be called
1255 * on an already stopped device and will not re-call the driver
1256 * method.
1258 * This functionality is used by both the line disciplines for
1259 * halting incoming flow and by the driver. It may therefore be
1260 * called from any context, may be under the tty atomic_write_lock
1261 * but not always.
1263 * Locking:
1264 * Uses the tty control lock internally
1267 void stop_tty(struct tty_struct *tty)
1269 unsigned long flags;
1270 spin_lock_irqsave(&tty->ctrl_lock, flags);
1271 if (tty->stopped) {
1272 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
1273 return;
1275 tty->stopped = 1;
1276 if (tty->link && tty->link->packet) {
1277 tty->ctrl_status &= ~TIOCPKT_START;
1278 tty->ctrl_status |= TIOCPKT_STOP;
1279 wake_up_interruptible(&tty->link->read_wait);
1281 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
1282 if (tty->ops->stop)
1283 (tty->ops->stop)(tty);
1286 EXPORT_SYMBOL(stop_tty);
1289 * start_tty - propagate flow control
1290 * @tty: tty to start
1292 * Start a tty that has been stopped if at all possible. Perform
1293 * any necessary wakeups and propagate the TIOCPKT status. If this
1294 * is the tty was previous stopped and is being started then the
1295 * driver start method is invoked and the line discipline woken.
1297 * Locking:
1298 * ctrl_lock
1301 void start_tty(struct tty_struct *tty)
1303 unsigned long flags;
1304 spin_lock_irqsave(&tty->ctrl_lock, flags);
1305 if (!tty->stopped || tty->flow_stopped) {
1306 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
1307 return;
1309 tty->stopped = 0;
1310 if (tty->link && tty->link->packet) {
1311 tty->ctrl_status &= ~TIOCPKT_STOP;
1312 tty->ctrl_status |= TIOCPKT_START;
1313 wake_up_interruptible(&tty->link->read_wait);
1315 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
1316 if (tty->ops->start)
1317 (tty->ops->start)(tty);
1318 /* If we have a running line discipline it may need kicking */
1319 tty_wakeup(tty);
1322 EXPORT_SYMBOL(start_tty);
1325 * tty_read - read method for tty device files
1326 * @file: pointer to tty file
1327 * @buf: user buffer
1328 * @count: size of user buffer
1329 * @ppos: unused
1331 * Perform the read system call function on this terminal device. Checks
1332 * for hung up devices before calling the line discipline method.
1334 * Locking:
1335 * Locks the line discipline internally while needed. Multiple
1336 * read calls may be outstanding in parallel.
1339 static ssize_t tty_read(struct file *file, char __user *buf, size_t count,
1340 loff_t *ppos)
1342 int i;
1343 struct tty_struct *tty;
1344 struct inode *inode;
1345 struct tty_ldisc *ld;
1347 tty = (struct tty_struct *)file->private_data;
1348 inode = file->f_path.dentry->d_inode;
1349 if (tty_paranoia_check(tty, inode, "tty_read"))
1350 return -EIO;
1351 if (!tty || (test_bit(TTY_IO_ERROR, &tty->flags)))
1352 return -EIO;
1354 /* We want to wait for the line discipline to sort out in this
1355 situation */
1356 ld = tty_ldisc_ref_wait(tty);
1357 if (ld->ops->read)
1358 i = (ld->ops->read)(tty, file, buf, count);
1359 else
1360 i = -EIO;
1361 tty_ldisc_deref(ld);
1362 if (i > 0)
1363 inode->i_atime = current_fs_time(inode->i_sb);
1364 return i;
1367 void tty_write_unlock(struct tty_struct *tty)
1369 mutex_unlock(&tty->atomic_write_lock);
1370 wake_up_interruptible(&tty->write_wait);
1373 int tty_write_lock(struct tty_struct *tty, int ndelay)
1375 if (!mutex_trylock(&tty->atomic_write_lock)) {
1376 if (ndelay)
1377 return -EAGAIN;
1378 if (mutex_lock_interruptible(&tty->atomic_write_lock))
1379 return -ERESTARTSYS;
1381 return 0;
1385 * Split writes up in sane blocksizes to avoid
1386 * denial-of-service type attacks
1388 static inline ssize_t do_tty_write(
1389 ssize_t (*write)(struct tty_struct *, struct file *, const unsigned char *, size_t),
1390 struct tty_struct *tty,
1391 struct file *file,
1392 const char __user *buf,
1393 size_t count)
1395 ssize_t ret, written = 0;
1396 unsigned int chunk;
1398 ret = tty_write_lock(tty, file->f_flags & O_NDELAY);
1399 if (ret < 0)
1400 return ret;
1403 * We chunk up writes into a temporary buffer. This
1404 * simplifies low-level drivers immensely, since they
1405 * don't have locking issues and user mode accesses.
1407 * But if TTY_NO_WRITE_SPLIT is set, we should use a
1408 * big chunk-size..
1410 * The default chunk-size is 2kB, because the NTTY
1411 * layer has problems with bigger chunks. It will
1412 * claim to be able to handle more characters than
1413 * it actually does.
1415 * FIXME: This can probably go away now except that 64K chunks
1416 * are too likely to fail unless switched to vmalloc...
1418 chunk = 2048;
1419 if (test_bit(TTY_NO_WRITE_SPLIT, &tty->flags))
1420 chunk = 65536;
1421 if (count < chunk)
1422 chunk = count;
1424 /* write_buf/write_cnt is protected by the atomic_write_lock mutex */
1425 if (tty->write_cnt < chunk) {
1426 unsigned char *buf;
1428 if (chunk < 1024)
1429 chunk = 1024;
1431 buf = kmalloc(chunk, GFP_KERNEL);
1432 if (!buf) {
1433 ret = -ENOMEM;
1434 goto out;
1436 kfree(tty->write_buf);
1437 tty->write_cnt = chunk;
1438 tty->write_buf = buf;
1441 /* Do the write .. */
1442 for (;;) {
1443 size_t size = count;
1444 if (size > chunk)
1445 size = chunk;
1446 ret = -EFAULT;
1447 if (copy_from_user(tty->write_buf, buf, size))
1448 break;
1449 ret = write(tty, file, tty->write_buf, size);
1450 if (ret <= 0)
1451 break;
1452 written += ret;
1453 buf += ret;
1454 count -= ret;
1455 if (!count)
1456 break;
1457 ret = -ERESTARTSYS;
1458 if (signal_pending(current))
1459 break;
1460 cond_resched();
1462 if (written) {
1463 struct inode *inode = file->f_path.dentry->d_inode;
1464 inode->i_mtime = current_fs_time(inode->i_sb);
1465 ret = written;
1467 out:
1468 tty_write_unlock(tty);
1469 return ret;
1474 * tty_write - write method for tty device file
1475 * @file: tty file pointer
1476 * @buf: user data to write
1477 * @count: bytes to write
1478 * @ppos: unused
1480 * Write data to a tty device via the line discipline.
1482 * Locking:
1483 * Locks the line discipline as required
1484 * Writes to the tty driver are serialized by the atomic_write_lock
1485 * and are then processed in chunks to the device. The line discipline
1486 * write method will not be involked in parallel for each device
1487 * The line discipline write method is called under the big
1488 * kernel lock for historical reasons. New code should not rely on this.
1491 static ssize_t tty_write(struct file *file, const char __user *buf,
1492 size_t count, loff_t *ppos)
1494 struct tty_struct *tty;
1495 struct inode *inode = file->f_path.dentry->d_inode;
1496 ssize_t ret;
1497 struct tty_ldisc *ld;
1499 tty = (struct tty_struct *)file->private_data;
1500 if (tty_paranoia_check(tty, inode, "tty_write"))
1501 return -EIO;
1502 if (!tty || !tty->ops->write ||
1503 (test_bit(TTY_IO_ERROR, &tty->flags)))
1504 return -EIO;
1505 /* Short term debug to catch buggy drivers */
1506 if (tty->ops->write_room == NULL)
1507 printk(KERN_ERR "tty driver %s lacks a write_room method.\n",
1508 tty->driver->name);
1509 ld = tty_ldisc_ref_wait(tty);
1510 if (!ld->ops->write)
1511 ret = -EIO;
1512 else
1513 ret = do_tty_write(ld->ops->write, tty, file, buf, count);
1514 tty_ldisc_deref(ld);
1515 return ret;
1518 ssize_t redirected_tty_write(struct file *file, const char __user *buf,
1519 size_t count, loff_t *ppos)
1521 struct file *p = NULL;
1523 spin_lock(&redirect_lock);
1524 if (redirect) {
1525 get_file(redirect);
1526 p = redirect;
1528 spin_unlock(&redirect_lock);
1530 if (p) {
1531 ssize_t res;
1532 res = vfs_write(p, buf, count, &p->f_pos);
1533 fput(p);
1534 return res;
1536 return tty_write(file, buf, count, ppos);
1539 void tty_port_init(struct tty_port *port)
1541 memset(port, 0, sizeof(*port));
1542 init_waitqueue_head(&port->open_wait);
1543 init_waitqueue_head(&port->close_wait);
1544 mutex_init(&port->mutex);
1545 port->close_delay = (50 * HZ) / 100;
1546 port->closing_wait = (3000 * HZ) / 100;
1548 EXPORT_SYMBOL(tty_port_init);
1550 int tty_port_alloc_xmit_buf(struct tty_port *port)
1552 /* We may sleep in get_zeroed_page() */
1553 mutex_lock(&port->mutex);
1554 if (port->xmit_buf == NULL)
1555 port->xmit_buf = (unsigned char *)get_zeroed_page(GFP_KERNEL);
1556 mutex_unlock(&port->mutex);
1557 if (port->xmit_buf == NULL)
1558 return -ENOMEM;
1559 return 0;
1561 EXPORT_SYMBOL(tty_port_alloc_xmit_buf);
1563 void tty_port_free_xmit_buf(struct tty_port *port)
1565 mutex_lock(&port->mutex);
1566 if (port->xmit_buf != NULL) {
1567 free_page((unsigned long)port->xmit_buf);
1568 port->xmit_buf = NULL;
1570 mutex_unlock(&port->mutex);
1572 EXPORT_SYMBOL(tty_port_free_xmit_buf);
1575 static char ptychar[] = "pqrstuvwxyzabcde";
1578 * pty_line_name - generate name for a pty
1579 * @driver: the tty driver in use
1580 * @index: the minor number
1581 * @p: output buffer of at least 6 bytes
1583 * Generate a name from a driver reference and write it to the output
1584 * buffer.
1586 * Locking: None
1588 static void pty_line_name(struct tty_driver *driver, int index, char *p)
1590 int i = index + driver->name_base;
1591 /* ->name is initialized to "ttyp", but "tty" is expected */
1592 sprintf(p, "%s%c%x",
1593 driver->subtype == PTY_TYPE_SLAVE ? "tty" : driver->name,
1594 ptychar[i >> 4 & 0xf], i & 0xf);
1598 * pty_line_name - generate name for a tty
1599 * @driver: the tty driver in use
1600 * @index: the minor number
1601 * @p: output buffer of at least 7 bytes
1603 * Generate a name from a driver reference and write it to the output
1604 * buffer.
1606 * Locking: None
1608 static void tty_line_name(struct tty_driver *driver, int index, char *p)
1610 sprintf(p, "%s%d", driver->name, index + driver->name_base);
1614 * init_dev - initialise a tty device
1615 * @driver: tty driver we are opening a device on
1616 * @idx: device index
1617 * @tty: returned tty structure
1619 * Prepare a tty device. This may not be a "new" clean device but
1620 * could also be an active device. The pty drivers require special
1621 * handling because of this.
1623 * Locking:
1624 * The function is called under the tty_mutex, which
1625 * protects us from the tty struct or driver itself going away.
1627 * On exit the tty device has the line discipline attached and
1628 * a reference count of 1. If a pair was created for pty/tty use
1629 * and the other was a pty master then it too has a reference count of 1.
1631 * WSH 06/09/97: Rewritten to remove races and properly clean up after a
1632 * failed open. The new code protects the open with a mutex, so it's
1633 * really quite straightforward. The mutex locking can probably be
1634 * relaxed for the (most common) case of reopening a tty.
1637 static int init_dev(struct tty_driver *driver, int idx,
1638 struct tty_struct **ret_tty)
1640 struct tty_struct *tty, *o_tty;
1641 struct ktermios *tp, **tp_loc, *o_tp, **o_tp_loc;
1642 struct ktermios *ltp, **ltp_loc, *o_ltp, **o_ltp_loc;
1643 int retval = 0;
1645 /* check whether we're reopening an existing tty */
1646 if (driver->flags & TTY_DRIVER_DEVPTS_MEM) {
1647 tty = devpts_get_tty(idx);
1649 * If we don't have a tty here on a slave open, it's because
1650 * the master already started the close process and there's
1651 * no relation between devpts file and tty anymore.
1653 if (!tty && driver->subtype == PTY_TYPE_SLAVE) {
1654 retval = -EIO;
1655 goto end_init;
1658 * It's safe from now on because init_dev() is called with
1659 * tty_mutex held and release_dev() won't change tty->count
1660 * or tty->flags without having to grab tty_mutex
1662 if (tty && driver->subtype == PTY_TYPE_MASTER)
1663 tty = tty->link;
1664 } else {
1665 tty = driver->ttys[idx];
1667 if (tty) goto fast_track;
1670 * First time open is complex, especially for PTY devices.
1671 * This code guarantees that either everything succeeds and the
1672 * TTY is ready for operation, or else the table slots are vacated
1673 * and the allocated memory released. (Except that the termios
1674 * and locked termios may be retained.)
1677 if (!try_module_get(driver->owner)) {
1678 retval = -ENODEV;
1679 goto end_init;
1682 o_tty = NULL;
1683 tp = o_tp = NULL;
1684 ltp = o_ltp = NULL;
1686 tty = alloc_tty_struct();
1687 if (!tty)
1688 goto fail_no_mem;
1689 initialize_tty_struct(tty);
1690 tty->driver = driver;
1691 tty->ops = driver->ops;
1692 tty->index = idx;
1693 tty_line_name(driver, idx, tty->name);
1695 if (driver->flags & TTY_DRIVER_DEVPTS_MEM) {
1696 tp_loc = &tty->termios;
1697 ltp_loc = &tty->termios_locked;
1698 } else {
1699 tp_loc = &driver->termios[idx];
1700 ltp_loc = &driver->termios_locked[idx];
1703 if (!*tp_loc) {
1704 tp = kmalloc(sizeof(struct ktermios), GFP_KERNEL);
1705 if (!tp)
1706 goto free_mem_out;
1707 *tp = driver->init_termios;
1710 if (!*ltp_loc) {
1711 ltp = kzalloc(sizeof(struct ktermios), GFP_KERNEL);
1712 if (!ltp)
1713 goto free_mem_out;
1716 if (driver->type == TTY_DRIVER_TYPE_PTY) {
1717 o_tty = alloc_tty_struct();
1718 if (!o_tty)
1719 goto free_mem_out;
1720 initialize_tty_struct(o_tty);
1721 o_tty->driver = driver->other;
1722 o_tty->ops = driver->ops;
1723 o_tty->index = idx;
1724 tty_line_name(driver->other, idx, o_tty->name);
1726 if (driver->flags & TTY_DRIVER_DEVPTS_MEM) {
1727 o_tp_loc = &o_tty->termios;
1728 o_ltp_loc = &o_tty->termios_locked;
1729 } else {
1730 o_tp_loc = &driver->other->termios[idx];
1731 o_ltp_loc = &driver->other->termios_locked[idx];
1734 if (!*o_tp_loc) {
1735 o_tp = kmalloc(sizeof(struct ktermios), GFP_KERNEL);
1736 if (!o_tp)
1737 goto free_mem_out;
1738 *o_tp = driver->other->init_termios;
1741 if (!*o_ltp_loc) {
1742 o_ltp = kzalloc(sizeof(struct ktermios), GFP_KERNEL);
1743 if (!o_ltp)
1744 goto free_mem_out;
1748 * Everything allocated ... set up the o_tty structure.
1750 if (!(driver->other->flags & TTY_DRIVER_DEVPTS_MEM))
1751 driver->other->ttys[idx] = o_tty;
1752 if (!*o_tp_loc)
1753 *o_tp_loc = o_tp;
1754 if (!*o_ltp_loc)
1755 *o_ltp_loc = o_ltp;
1756 o_tty->termios = *o_tp_loc;
1757 o_tty->termios_locked = *o_ltp_loc;
1758 driver->other->refcount++;
1759 if (driver->subtype == PTY_TYPE_MASTER)
1760 o_tty->count++;
1762 /* Establish the links in both directions */
1763 tty->link = o_tty;
1764 o_tty->link = tty;
1768 * All structures have been allocated, so now we install them.
1769 * Failures after this point use release_tty to clean up, so
1770 * there's no need to null out the local pointers.
1772 if (!(driver->flags & TTY_DRIVER_DEVPTS_MEM))
1773 driver->ttys[idx] = tty;
1775 if (!*tp_loc)
1776 *tp_loc = tp;
1777 if (!*ltp_loc)
1778 *ltp_loc = ltp;
1779 tty->termios = *tp_loc;
1780 tty->termios_locked = *ltp_loc;
1781 /* Compatibility until drivers always set this */
1782 tty->termios->c_ispeed = tty_termios_input_baud_rate(tty->termios);
1783 tty->termios->c_ospeed = tty_termios_baud_rate(tty->termios);
1784 driver->refcount++;
1785 tty->count++;
1788 * Structures all installed ... call the ldisc open routines.
1789 * If we fail here just call release_tty to clean up. No need
1790 * to decrement the use counts, as release_tty doesn't care.
1793 retval = tty_ldisc_setup(tty, o_tty);
1795 if (retval)
1796 goto release_mem_out;
1797 goto success;
1800 * This fast open can be used if the tty is already open.
1801 * No memory is allocated, and the only failures are from
1802 * attempting to open a closing tty or attempting multiple
1803 * opens on a pty master.
1805 fast_track:
1806 if (test_bit(TTY_CLOSING, &tty->flags)) {
1807 retval = -EIO;
1808 goto end_init;
1810 if (driver->type == TTY_DRIVER_TYPE_PTY &&
1811 driver->subtype == PTY_TYPE_MASTER) {
1813 * special case for PTY masters: only one open permitted,
1814 * and the slave side open count is incremented as well.
1816 if (tty->count) {
1817 retval = -EIO;
1818 goto end_init;
1820 tty->link->count++;
1822 tty->count++;
1823 tty->driver = driver; /* N.B. why do this every time?? */
1825 /* FIXME */
1826 if (!test_bit(TTY_LDISC, &tty->flags))
1827 printk(KERN_ERR "init_dev but no ldisc\n");
1828 success:
1829 *ret_tty = tty;
1831 /* All paths come through here to release the mutex */
1832 end_init:
1833 return retval;
1835 /* Release locally allocated memory ... nothing placed in slots */
1836 free_mem_out:
1837 kfree(o_tp);
1838 if (o_tty)
1839 free_tty_struct(o_tty);
1840 kfree(ltp);
1841 kfree(tp);
1842 free_tty_struct(tty);
1844 fail_no_mem:
1845 module_put(driver->owner);
1846 retval = -ENOMEM;
1847 goto end_init;
1849 /* call the tty release_tty routine to clean out this slot */
1850 release_mem_out:
1851 if (printk_ratelimit())
1852 printk(KERN_INFO "init_dev: ldisc open failed, "
1853 "clearing slot %d\n", idx);
1854 release_tty(tty, idx);
1855 goto end_init;
1859 * release_one_tty - release tty structure memory
1861 * Releases memory associated with a tty structure, and clears out the
1862 * driver table slots. This function is called when a device is no longer
1863 * in use. It also gets called when setup of a device fails.
1865 * Locking:
1866 * tty_mutex - sometimes only
1867 * takes the file list lock internally when working on the list
1868 * of ttys that the driver keeps.
1869 * FIXME: should we require tty_mutex is held here ??
1871 static void release_one_tty(struct tty_struct *tty, int idx)
1873 int devpts = tty->driver->flags & TTY_DRIVER_DEVPTS_MEM;
1874 struct ktermios *tp;
1876 if (!devpts)
1877 tty->driver->ttys[idx] = NULL;
1879 if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS) {
1880 tp = tty->termios;
1881 if (!devpts)
1882 tty->driver->termios[idx] = NULL;
1883 kfree(tp);
1885 tp = tty->termios_locked;
1886 if (!devpts)
1887 tty->driver->termios_locked[idx] = NULL;
1888 kfree(tp);
1892 tty->magic = 0;
1893 tty->driver->refcount--;
1895 file_list_lock();
1896 list_del_init(&tty->tty_files);
1897 file_list_unlock();
1899 free_tty_struct(tty);
1903 * release_tty - release tty structure memory
1905 * Release both @tty and a possible linked partner (think pty pair),
1906 * and decrement the refcount of the backing module.
1908 * Locking:
1909 * tty_mutex - sometimes only
1910 * takes the file list lock internally when working on the list
1911 * of ttys that the driver keeps.
1912 * FIXME: should we require tty_mutex is held here ??
1914 static void release_tty(struct tty_struct *tty, int idx)
1916 struct tty_driver *driver = tty->driver;
1918 if (tty->link)
1919 release_one_tty(tty->link, idx);
1920 release_one_tty(tty, idx);
1921 module_put(driver->owner);
1925 * Even releasing the tty structures is a tricky business.. We have
1926 * to be very careful that the structures are all released at the
1927 * same time, as interrupts might otherwise get the wrong pointers.
1929 * WSH 09/09/97: rewritten to avoid some nasty race conditions that could
1930 * lead to double frees or releasing memory still in use.
1932 static void release_dev(struct file *filp)
1934 struct tty_struct *tty, *o_tty;
1935 int pty_master, tty_closing, o_tty_closing, do_sleep;
1936 int devpts;
1937 int idx;
1938 char buf[64];
1940 tty = (struct tty_struct *)filp->private_data;
1941 if (tty_paranoia_check(tty, filp->f_path.dentry->d_inode,
1942 "release_dev"))
1943 return;
1945 check_tty_count(tty, "release_dev");
1947 tty_fasync(-1, filp, 0);
1949 idx = tty->index;
1950 pty_master = (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
1951 tty->driver->subtype == PTY_TYPE_MASTER);
1952 devpts = (tty->driver->flags & TTY_DRIVER_DEVPTS_MEM) != 0;
1953 o_tty = tty->link;
1955 #ifdef TTY_PARANOIA_CHECK
1956 if (idx < 0 || idx >= tty->driver->num) {
1957 printk(KERN_DEBUG "release_dev: bad idx when trying to "
1958 "free (%s)\n", tty->name);
1959 return;
1961 if (!(tty->driver->flags & TTY_DRIVER_DEVPTS_MEM)) {
1962 if (tty != tty->driver->ttys[idx]) {
1963 printk(KERN_DEBUG "release_dev: driver.table[%d] not tty "
1964 "for (%s)\n", idx, tty->name);
1965 return;
1967 if (tty->termios != tty->driver->termios[idx]) {
1968 printk(KERN_DEBUG "release_dev: driver.termios[%d] not termios "
1969 "for (%s)\n",
1970 idx, tty->name);
1971 return;
1973 if (tty->termios_locked != tty->driver->termios_locked[idx]) {
1974 printk(KERN_DEBUG "release_dev: driver.termios_locked[%d] not "
1975 "termios_locked for (%s)\n",
1976 idx, tty->name);
1977 return;
1980 #endif
1982 #ifdef TTY_DEBUG_HANGUP
1983 printk(KERN_DEBUG "release_dev of %s (tty count=%d)...",
1984 tty_name(tty, buf), tty->count);
1985 #endif
1987 #ifdef TTY_PARANOIA_CHECK
1988 if (tty->driver->other &&
1989 !(tty->driver->flags & TTY_DRIVER_DEVPTS_MEM)) {
1990 if (o_tty != tty->driver->other->ttys[idx]) {
1991 printk(KERN_DEBUG "release_dev: other->table[%d] "
1992 "not o_tty for (%s)\n",
1993 idx, tty->name);
1994 return;
1996 if (o_tty->termios != tty->driver->other->termios[idx]) {
1997 printk(KERN_DEBUG "release_dev: other->termios[%d] "
1998 "not o_termios for (%s)\n",
1999 idx, tty->name);
2000 return;
2002 if (o_tty->termios_locked !=
2003 tty->driver->other->termios_locked[idx]) {
2004 printk(KERN_DEBUG "release_dev: other->termios_locked["
2005 "%d] not o_termios_locked for (%s)\n",
2006 idx, tty->name);
2007 return;
2009 if (o_tty->link != tty) {
2010 printk(KERN_DEBUG "release_dev: bad pty pointers\n");
2011 return;
2014 #endif
2015 if (tty->ops->close)
2016 tty->ops->close(tty, filp);
2019 * Sanity check: if tty->count is going to zero, there shouldn't be
2020 * any waiters on tty->read_wait or tty->write_wait. We test the
2021 * wait queues and kick everyone out _before_ actually starting to
2022 * close. This ensures that we won't block while releasing the tty
2023 * structure.
2025 * The test for the o_tty closing is necessary, since the master and
2026 * slave sides may close in any order. If the slave side closes out
2027 * first, its count will be one, since the master side holds an open.
2028 * Thus this test wouldn't be triggered at the time the slave closes,
2029 * so we do it now.
2031 * Note that it's possible for the tty to be opened again while we're
2032 * flushing out waiters. By recalculating the closing flags before
2033 * each iteration we avoid any problems.
2035 while (1) {
2036 /* Guard against races with tty->count changes elsewhere and
2037 opens on /dev/tty */
2039 mutex_lock(&tty_mutex);
2040 tty_closing = tty->count <= 1;
2041 o_tty_closing = o_tty &&
2042 (o_tty->count <= (pty_master ? 1 : 0));
2043 do_sleep = 0;
2045 if (tty_closing) {
2046 if (waitqueue_active(&tty->read_wait)) {
2047 wake_up(&tty->read_wait);
2048 do_sleep++;
2050 if (waitqueue_active(&tty->write_wait)) {
2051 wake_up(&tty->write_wait);
2052 do_sleep++;
2055 if (o_tty_closing) {
2056 if (waitqueue_active(&o_tty->read_wait)) {
2057 wake_up(&o_tty->read_wait);
2058 do_sleep++;
2060 if (waitqueue_active(&o_tty->write_wait)) {
2061 wake_up(&o_tty->write_wait);
2062 do_sleep++;
2065 if (!do_sleep)
2066 break;
2068 printk(KERN_WARNING "release_dev: %s: read/write wait queue "
2069 "active!\n", tty_name(tty, buf));
2070 mutex_unlock(&tty_mutex);
2071 schedule();
2075 * The closing flags are now consistent with the open counts on
2076 * both sides, and we've completed the last operation that could
2077 * block, so it's safe to proceed with closing.
2079 if (pty_master) {
2080 if (--o_tty->count < 0) {
2081 printk(KERN_WARNING "release_dev: bad pty slave count "
2082 "(%d) for %s\n",
2083 o_tty->count, tty_name(o_tty, buf));
2084 o_tty->count = 0;
2087 if (--tty->count < 0) {
2088 printk(KERN_WARNING "release_dev: bad tty->count (%d) for %s\n",
2089 tty->count, tty_name(tty, buf));
2090 tty->count = 0;
2094 * We've decremented tty->count, so we need to remove this file
2095 * descriptor off the tty->tty_files list; this serves two
2096 * purposes:
2097 * - check_tty_count sees the correct number of file descriptors
2098 * associated with this tty.
2099 * - do_tty_hangup no longer sees this file descriptor as
2100 * something that needs to be handled for hangups.
2102 file_kill(filp);
2103 filp->private_data = NULL;
2106 * Perform some housekeeping before deciding whether to return.
2108 * Set the TTY_CLOSING flag if this was the last open. In the
2109 * case of a pty we may have to wait around for the other side
2110 * to close, and TTY_CLOSING makes sure we can't be reopened.
2112 if (tty_closing)
2113 set_bit(TTY_CLOSING, &tty->flags);
2114 if (o_tty_closing)
2115 set_bit(TTY_CLOSING, &o_tty->flags);
2118 * If _either_ side is closing, make sure there aren't any
2119 * processes that still think tty or o_tty is their controlling
2120 * tty.
2122 if (tty_closing || o_tty_closing) {
2123 read_lock(&tasklist_lock);
2124 session_clear_tty(tty->session);
2125 if (o_tty)
2126 session_clear_tty(o_tty->session);
2127 read_unlock(&tasklist_lock);
2130 mutex_unlock(&tty_mutex);
2132 /* check whether both sides are closing ... */
2133 if (!tty_closing || (o_tty && !o_tty_closing))
2134 return;
2136 #ifdef TTY_DEBUG_HANGUP
2137 printk(KERN_DEBUG "freeing tty structure...");
2138 #endif
2140 * Ask the line discipline code to release its structures
2142 tty_ldisc_release(tty, o_tty);
2144 * The release_tty function takes care of the details of clearing
2145 * the slots and preserving the termios structure.
2147 release_tty(tty, idx);
2149 /* Make this pty number available for reallocation */
2150 if (devpts)
2151 devpts_kill_index(idx);
2155 * tty_open - open a tty device
2156 * @inode: inode of device file
2157 * @filp: file pointer to tty
2159 * tty_open and tty_release keep up the tty count that contains the
2160 * number of opens done on a tty. We cannot use the inode-count, as
2161 * different inodes might point to the same tty.
2163 * Open-counting is needed for pty masters, as well as for keeping
2164 * track of serial lines: DTR is dropped when the last close happens.
2165 * (This is not done solely through tty->count, now. - Ted 1/27/92)
2167 * The termios state of a pty is reset on first open so that
2168 * settings don't persist across reuse.
2170 * Locking: tty_mutex protects tty, get_tty_driver and init_dev work.
2171 * tty->count should protect the rest.
2172 * ->siglock protects ->signal/->sighand
2175 static int __tty_open(struct inode *inode, struct file *filp)
2177 struct tty_struct *tty;
2178 int noctty, retval;
2179 struct tty_driver *driver;
2180 int index;
2181 dev_t device = inode->i_rdev;
2182 unsigned short saved_flags = filp->f_flags;
2184 nonseekable_open(inode, filp);
2186 retry_open:
2187 noctty = filp->f_flags & O_NOCTTY;
2188 index = -1;
2189 retval = 0;
2191 mutex_lock(&tty_mutex);
2193 if (device == MKDEV(TTYAUX_MAJOR, 0)) {
2194 tty = get_current_tty();
2195 if (!tty) {
2196 mutex_unlock(&tty_mutex);
2197 return -ENXIO;
2199 driver = tty->driver;
2200 index = tty->index;
2201 filp->f_flags |= O_NONBLOCK; /* Don't let /dev/tty block */
2202 /* noctty = 1; */
2203 goto got_driver;
2205 #ifdef CONFIG_VT
2206 if (device == MKDEV(TTY_MAJOR, 0)) {
2207 extern struct tty_driver *console_driver;
2208 driver = console_driver;
2209 index = fg_console;
2210 noctty = 1;
2211 goto got_driver;
2213 #endif
2214 if (device == MKDEV(TTYAUX_MAJOR, 1)) {
2215 driver = console_device(&index);
2216 if (driver) {
2217 /* Don't let /dev/console block */
2218 filp->f_flags |= O_NONBLOCK;
2219 noctty = 1;
2220 goto got_driver;
2222 mutex_unlock(&tty_mutex);
2223 return -ENODEV;
2226 driver = get_tty_driver(device, &index);
2227 if (!driver) {
2228 mutex_unlock(&tty_mutex);
2229 return -ENODEV;
2231 got_driver:
2232 retval = init_dev(driver, index, &tty);
2233 mutex_unlock(&tty_mutex);
2234 if (retval)
2235 return retval;
2237 filp->private_data = tty;
2238 file_move(filp, &tty->tty_files);
2239 check_tty_count(tty, "tty_open");
2240 if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
2241 tty->driver->subtype == PTY_TYPE_MASTER)
2242 noctty = 1;
2243 #ifdef TTY_DEBUG_HANGUP
2244 printk(KERN_DEBUG "opening %s...", tty->name);
2245 #endif
2246 if (!retval) {
2247 if (tty->ops->open)
2248 retval = tty->ops->open(tty, filp);
2249 else
2250 retval = -ENODEV;
2252 filp->f_flags = saved_flags;
2254 if (!retval && test_bit(TTY_EXCLUSIVE, &tty->flags) &&
2255 !capable(CAP_SYS_ADMIN))
2256 retval = -EBUSY;
2258 if (retval) {
2259 #ifdef TTY_DEBUG_HANGUP
2260 printk(KERN_DEBUG "error %d in opening %s...", retval,
2261 tty->name);
2262 #endif
2263 release_dev(filp);
2264 if (retval != -ERESTARTSYS)
2265 return retval;
2266 if (signal_pending(current))
2267 return retval;
2268 schedule();
2270 * Need to reset f_op in case a hangup happened.
2272 if (filp->f_op == &hung_up_tty_fops)
2273 filp->f_op = &tty_fops;
2274 goto retry_open;
2277 mutex_lock(&tty_mutex);
2278 spin_lock_irq(&current->sighand->siglock);
2279 if (!noctty &&
2280 current->signal->leader &&
2281 !current->signal->tty &&
2282 tty->session == NULL)
2283 __proc_set_tty(current, tty);
2284 spin_unlock_irq(&current->sighand->siglock);
2285 mutex_unlock(&tty_mutex);
2286 return 0;
2289 /* BKL pushdown: scary code avoidance wrapper */
2290 static int tty_open(struct inode *inode, struct file *filp)
2292 int ret;
2294 lock_kernel();
2295 ret = __tty_open(inode, filp);
2296 unlock_kernel();
2297 return ret;
2302 #ifdef CONFIG_UNIX98_PTYS
2304 * ptmx_open - open a unix 98 pty master
2305 * @inode: inode of device file
2306 * @filp: file pointer to tty
2308 * Allocate a unix98 pty master device from the ptmx driver.
2310 * Locking: tty_mutex protects theinit_dev work. tty->count should
2311 * protect the rest.
2312 * allocated_ptys_lock handles the list of free pty numbers
2315 static int __ptmx_open(struct inode *inode, struct file *filp)
2317 struct tty_struct *tty;
2318 int retval;
2319 int index;
2321 nonseekable_open(inode, filp);
2323 /* find a device that is not in use. */
2324 index = devpts_new_index();
2325 if (index < 0)
2326 return index;
2328 mutex_lock(&tty_mutex);
2329 retval = init_dev(ptm_driver, index, &tty);
2330 mutex_unlock(&tty_mutex);
2332 if (retval)
2333 goto out;
2335 set_bit(TTY_PTY_LOCK, &tty->flags); /* LOCK THE SLAVE */
2336 filp->private_data = tty;
2337 file_move(filp, &tty->tty_files);
2339 retval = devpts_pty_new(tty->link);
2340 if (retval)
2341 goto out1;
2343 check_tty_count(tty, "ptmx_open");
2344 retval = ptm_driver->ops->open(tty, filp);
2345 if (!retval)
2346 return 0;
2347 out1:
2348 release_dev(filp);
2349 return retval;
2350 out:
2351 devpts_kill_index(index);
2352 return retval;
2355 static int ptmx_open(struct inode *inode, struct file *filp)
2357 int ret;
2359 lock_kernel();
2360 ret = __ptmx_open(inode, filp);
2361 unlock_kernel();
2362 return ret;
2364 #endif
2367 * tty_release - vfs callback for close
2368 * @inode: inode of tty
2369 * @filp: file pointer for handle to tty
2371 * Called the last time each file handle is closed that references
2372 * this tty. There may however be several such references.
2374 * Locking:
2375 * Takes bkl. See release_dev
2378 static int tty_release(struct inode *inode, struct file *filp)
2380 lock_kernel();
2381 release_dev(filp);
2382 unlock_kernel();
2383 return 0;
2387 * tty_poll - check tty status
2388 * @filp: file being polled
2389 * @wait: poll wait structures to update
2391 * Call the line discipline polling method to obtain the poll
2392 * status of the device.
2394 * Locking: locks called line discipline but ldisc poll method
2395 * may be re-entered freely by other callers.
2398 static unsigned int tty_poll(struct file *filp, poll_table *wait)
2400 struct tty_struct *tty;
2401 struct tty_ldisc *ld;
2402 int ret = 0;
2404 tty = (struct tty_struct *)filp->private_data;
2405 if (tty_paranoia_check(tty, filp->f_path.dentry->d_inode, "tty_poll"))
2406 return 0;
2408 ld = tty_ldisc_ref_wait(tty);
2409 if (ld->ops->poll)
2410 ret = (ld->ops->poll)(tty, filp, wait);
2411 tty_ldisc_deref(ld);
2412 return ret;
2415 static int tty_fasync(int fd, struct file *filp, int on)
2417 struct tty_struct *tty;
2418 unsigned long flags;
2419 int retval = 0;
2421 lock_kernel();
2422 tty = (struct tty_struct *)filp->private_data;
2423 if (tty_paranoia_check(tty, filp->f_path.dentry->d_inode, "tty_fasync"))
2424 goto out;
2426 retval = fasync_helper(fd, filp, on, &tty->fasync);
2427 if (retval <= 0)
2428 goto out;
2430 if (on) {
2431 enum pid_type type;
2432 struct pid *pid;
2433 if (!waitqueue_active(&tty->read_wait))
2434 tty->minimum_to_wake = 1;
2435 spin_lock_irqsave(&tty->ctrl_lock, flags);
2436 if (tty->pgrp) {
2437 pid = tty->pgrp;
2438 type = PIDTYPE_PGID;
2439 } else {
2440 pid = task_pid(current);
2441 type = PIDTYPE_PID;
2443 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
2444 retval = __f_setown(filp, pid, type, 0);
2445 if (retval)
2446 goto out;
2447 } else {
2448 if (!tty->fasync && !waitqueue_active(&tty->read_wait))
2449 tty->minimum_to_wake = N_TTY_BUF_SIZE;
2451 retval = 0;
2452 out:
2453 unlock_kernel();
2454 return retval;
2458 * tiocsti - fake input character
2459 * @tty: tty to fake input into
2460 * @p: pointer to character
2462 * Fake input to a tty device. Does the necessary locking and
2463 * input management.
2465 * FIXME: does not honour flow control ??
2467 * Locking:
2468 * Called functions take tty_ldisc_lock
2469 * current->signal->tty check is safe without locks
2471 * FIXME: may race normal receive processing
2474 static int tiocsti(struct tty_struct *tty, char __user *p)
2476 char ch, mbz = 0;
2477 struct tty_ldisc *ld;
2479 if ((current->signal->tty != tty) && !capable(CAP_SYS_ADMIN))
2480 return -EPERM;
2481 if (get_user(ch, p))
2482 return -EFAULT;
2483 ld = tty_ldisc_ref_wait(tty);
2484 ld->ops->receive_buf(tty, &ch, &mbz, 1);
2485 tty_ldisc_deref(ld);
2486 return 0;
2490 * tiocgwinsz - implement window query ioctl
2491 * @tty; tty
2492 * @arg: user buffer for result
2494 * Copies the kernel idea of the window size into the user buffer.
2496 * Locking: tty->termios_mutex is taken to ensure the winsize data
2497 * is consistent.
2500 static int tiocgwinsz(struct tty_struct *tty, struct winsize __user *arg)
2502 int err;
2504 mutex_lock(&tty->termios_mutex);
2505 err = copy_to_user(arg, &tty->winsize, sizeof(*arg));
2506 mutex_unlock(&tty->termios_mutex);
2508 return err ? -EFAULT: 0;
2512 * tiocswinsz - implement window size set ioctl
2513 * @tty; tty
2514 * @arg: user buffer for result
2516 * Copies the user idea of the window size to the kernel. Traditionally
2517 * this is just advisory information but for the Linux console it
2518 * actually has driver level meaning and triggers a VC resize.
2520 * Locking:
2521 * Called function use the console_sem is used to ensure we do
2522 * not try and resize the console twice at once.
2523 * The tty->termios_mutex is used to ensure we don't double
2524 * resize and get confused. Lock order - tty->termios_mutex before
2525 * console sem
2528 static int tiocswinsz(struct tty_struct *tty, struct tty_struct *real_tty,
2529 struct winsize __user *arg)
2531 struct winsize tmp_ws;
2532 struct pid *pgrp, *rpgrp;
2533 unsigned long flags;
2535 if (copy_from_user(&tmp_ws, arg, sizeof(*arg)))
2536 return -EFAULT;
2538 mutex_lock(&tty->termios_mutex);
2539 if (!memcmp(&tmp_ws, &tty->winsize, sizeof(*arg)))
2540 goto done;
2542 #ifdef CONFIG_VT
2543 if (tty->driver->type == TTY_DRIVER_TYPE_CONSOLE) {
2544 if (vc_lock_resize(tty->driver_data, tmp_ws.ws_col,
2545 tmp_ws.ws_row)) {
2546 mutex_unlock(&tty->termios_mutex);
2547 return -ENXIO;
2550 #endif
2551 /* Get the PID values and reference them so we can
2552 avoid holding the tty ctrl lock while sending signals */
2553 spin_lock_irqsave(&tty->ctrl_lock, flags);
2554 pgrp = get_pid(tty->pgrp);
2555 rpgrp = get_pid(real_tty->pgrp);
2556 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
2558 if (pgrp)
2559 kill_pgrp(pgrp, SIGWINCH, 1);
2560 if (rpgrp != pgrp && rpgrp)
2561 kill_pgrp(rpgrp, SIGWINCH, 1);
2563 put_pid(pgrp);
2564 put_pid(rpgrp);
2566 tty->winsize = tmp_ws;
2567 real_tty->winsize = tmp_ws;
2568 done:
2569 mutex_unlock(&tty->termios_mutex);
2570 return 0;
2574 * tioccons - allow admin to move logical console
2575 * @file: the file to become console
2577 * Allow the adminstrator to move the redirected console device
2579 * Locking: uses redirect_lock to guard the redirect information
2582 static int tioccons(struct file *file)
2584 if (!capable(CAP_SYS_ADMIN))
2585 return -EPERM;
2586 if (file->f_op->write == redirected_tty_write) {
2587 struct file *f;
2588 spin_lock(&redirect_lock);
2589 f = redirect;
2590 redirect = NULL;
2591 spin_unlock(&redirect_lock);
2592 if (f)
2593 fput(f);
2594 return 0;
2596 spin_lock(&redirect_lock);
2597 if (redirect) {
2598 spin_unlock(&redirect_lock);
2599 return -EBUSY;
2601 get_file(file);
2602 redirect = file;
2603 spin_unlock(&redirect_lock);
2604 return 0;
2608 * fionbio - non blocking ioctl
2609 * @file: file to set blocking value
2610 * @p: user parameter
2612 * Historical tty interfaces had a blocking control ioctl before
2613 * the generic functionality existed. This piece of history is preserved
2614 * in the expected tty API of posix OS's.
2616 * Locking: none, the open fle handle ensures it won't go away.
2619 static int fionbio(struct file *file, int __user *p)
2621 int nonblock;
2623 if (get_user(nonblock, p))
2624 return -EFAULT;
2626 /* file->f_flags is still BKL protected in the fs layer - vomit */
2627 lock_kernel();
2628 if (nonblock)
2629 file->f_flags |= O_NONBLOCK;
2630 else
2631 file->f_flags &= ~O_NONBLOCK;
2632 unlock_kernel();
2633 return 0;
2637 * tiocsctty - set controlling tty
2638 * @tty: tty structure
2639 * @arg: user argument
2641 * This ioctl is used to manage job control. It permits a session
2642 * leader to set this tty as the controlling tty for the session.
2644 * Locking:
2645 * Takes tty_mutex() to protect tty instance
2646 * Takes tasklist_lock internally to walk sessions
2647 * Takes ->siglock() when updating signal->tty
2650 static int tiocsctty(struct tty_struct *tty, int arg)
2652 int ret = 0;
2653 if (current->signal->leader && (task_session(current) == tty->session))
2654 return ret;
2656 mutex_lock(&tty_mutex);
2658 * The process must be a session leader and
2659 * not have a controlling tty already.
2661 if (!current->signal->leader || current->signal->tty) {
2662 ret = -EPERM;
2663 goto unlock;
2666 if (tty->session) {
2668 * This tty is already the controlling
2669 * tty for another session group!
2671 if (arg == 1 && capable(CAP_SYS_ADMIN)) {
2673 * Steal it away
2675 read_lock(&tasklist_lock);
2676 session_clear_tty(tty->session);
2677 read_unlock(&tasklist_lock);
2678 } else {
2679 ret = -EPERM;
2680 goto unlock;
2683 proc_set_tty(current, tty);
2684 unlock:
2685 mutex_unlock(&tty_mutex);
2686 return ret;
2690 * tty_get_pgrp - return a ref counted pgrp pid
2691 * @tty: tty to read
2693 * Returns a refcounted instance of the pid struct for the process
2694 * group controlling the tty.
2697 struct pid *tty_get_pgrp(struct tty_struct *tty)
2699 unsigned long flags;
2700 struct pid *pgrp;
2702 spin_lock_irqsave(&tty->ctrl_lock, flags);
2703 pgrp = get_pid(tty->pgrp);
2704 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
2706 return pgrp;
2708 EXPORT_SYMBOL_GPL(tty_get_pgrp);
2711 * tiocgpgrp - get process group
2712 * @tty: tty passed by user
2713 * @real_tty: tty side of the tty pased by the user if a pty else the tty
2714 * @p: returned pid
2716 * Obtain the process group of the tty. If there is no process group
2717 * return an error.
2719 * Locking: none. Reference to current->signal->tty is safe.
2722 static int tiocgpgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t __user *p)
2724 struct pid *pid;
2725 int ret;
2727 * (tty == real_tty) is a cheap way of
2728 * testing if the tty is NOT a master pty.
2730 if (tty == real_tty && current->signal->tty != real_tty)
2731 return -ENOTTY;
2732 pid = tty_get_pgrp(real_tty);
2733 ret = put_user(pid_vnr(pid), p);
2734 put_pid(pid);
2735 return ret;
2739 * tiocspgrp - attempt to set process group
2740 * @tty: tty passed by user
2741 * @real_tty: tty side device matching tty passed by user
2742 * @p: pid pointer
2744 * Set the process group of the tty to the session passed. Only
2745 * permitted where the tty session is our session.
2747 * Locking: RCU, ctrl lock
2750 static int tiocspgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t __user *p)
2752 struct pid *pgrp;
2753 pid_t pgrp_nr;
2754 int retval = tty_check_change(real_tty);
2755 unsigned long flags;
2757 if (retval == -EIO)
2758 return -ENOTTY;
2759 if (retval)
2760 return retval;
2761 if (!current->signal->tty ||
2762 (current->signal->tty != real_tty) ||
2763 (real_tty->session != task_session(current)))
2764 return -ENOTTY;
2765 if (get_user(pgrp_nr, p))
2766 return -EFAULT;
2767 if (pgrp_nr < 0)
2768 return -EINVAL;
2769 rcu_read_lock();
2770 pgrp = find_vpid(pgrp_nr);
2771 retval = -ESRCH;
2772 if (!pgrp)
2773 goto out_unlock;
2774 retval = -EPERM;
2775 if (session_of_pgrp(pgrp) != task_session(current))
2776 goto out_unlock;
2777 retval = 0;
2778 spin_lock_irqsave(&tty->ctrl_lock, flags);
2779 put_pid(real_tty->pgrp);
2780 real_tty->pgrp = get_pid(pgrp);
2781 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
2782 out_unlock:
2783 rcu_read_unlock();
2784 return retval;
2788 * tiocgsid - get session id
2789 * @tty: tty passed by user
2790 * @real_tty: tty side of the tty pased by the user if a pty else the tty
2791 * @p: pointer to returned session id
2793 * Obtain the session id of the tty. If there is no session
2794 * return an error.
2796 * Locking: none. Reference to current->signal->tty is safe.
2799 static int tiocgsid(struct tty_struct *tty, struct tty_struct *real_tty, pid_t __user *p)
2802 * (tty == real_tty) is a cheap way of
2803 * testing if the tty is NOT a master pty.
2805 if (tty == real_tty && current->signal->tty != real_tty)
2806 return -ENOTTY;
2807 if (!real_tty->session)
2808 return -ENOTTY;
2809 return put_user(pid_vnr(real_tty->session), p);
2813 * tiocsetd - set line discipline
2814 * @tty: tty device
2815 * @p: pointer to user data
2817 * Set the line discipline according to user request.
2819 * Locking: see tty_set_ldisc, this function is just a helper
2822 static int tiocsetd(struct tty_struct *tty, int __user *p)
2824 int ldisc;
2825 int ret;
2827 if (get_user(ldisc, p))
2828 return -EFAULT;
2830 lock_kernel();
2831 ret = tty_set_ldisc(tty, ldisc);
2832 unlock_kernel();
2834 return ret;
2838 * send_break - performed time break
2839 * @tty: device to break on
2840 * @duration: timeout in mS
2842 * Perform a timed break on hardware that lacks its own driver level
2843 * timed break functionality.
2845 * Locking:
2846 * atomic_write_lock serializes
2850 static int send_break(struct tty_struct *tty, unsigned int duration)
2852 if (tty_write_lock(tty, 0) < 0)
2853 return -EINTR;
2854 tty->ops->break_ctl(tty, -1);
2855 if (!signal_pending(current))
2856 msleep_interruptible(duration);
2857 tty->ops->break_ctl(tty, 0);
2858 tty_write_unlock(tty);
2859 if (signal_pending(current))
2860 return -EINTR;
2861 return 0;
2865 * tty_tiocmget - get modem status
2866 * @tty: tty device
2867 * @file: user file pointer
2868 * @p: pointer to result
2870 * Obtain the modem status bits from the tty driver if the feature
2871 * is supported. Return -EINVAL if it is not available.
2873 * Locking: none (up to the driver)
2876 static int tty_tiocmget(struct tty_struct *tty, struct file *file, int __user *p)
2878 int retval = -EINVAL;
2880 if (tty->ops->tiocmget) {
2881 retval = tty->ops->tiocmget(tty, file);
2883 if (retval >= 0)
2884 retval = put_user(retval, p);
2886 return retval;
2890 * tty_tiocmset - set modem status
2891 * @tty: tty device
2892 * @file: user file pointer
2893 * @cmd: command - clear bits, set bits or set all
2894 * @p: pointer to desired bits
2896 * Set the modem status bits from the tty driver if the feature
2897 * is supported. Return -EINVAL if it is not available.
2899 * Locking: none (up to the driver)
2902 static int tty_tiocmset(struct tty_struct *tty, struct file *file, unsigned int cmd,
2903 unsigned __user *p)
2905 int retval;
2906 unsigned int set, clear, val;
2908 if (tty->ops->tiocmset == NULL)
2909 return -EINVAL;
2911 retval = get_user(val, p);
2912 if (retval)
2913 return retval;
2914 set = clear = 0;
2915 switch (cmd) {
2916 case TIOCMBIS:
2917 set = val;
2918 break;
2919 case TIOCMBIC:
2920 clear = val;
2921 break;
2922 case TIOCMSET:
2923 set = val;
2924 clear = ~val;
2925 break;
2927 set &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP;
2928 clear &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP;
2929 return tty->ops->tiocmset(tty, file, set, clear);
2933 * Split this up, as gcc can choke on it otherwise..
2935 long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
2937 struct tty_struct *tty, *real_tty;
2938 void __user *p = (void __user *)arg;
2939 int retval;
2940 struct tty_ldisc *ld;
2941 struct inode *inode = file->f_dentry->d_inode;
2943 tty = (struct tty_struct *)file->private_data;
2944 if (tty_paranoia_check(tty, inode, "tty_ioctl"))
2945 return -EINVAL;
2947 real_tty = tty;
2948 if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
2949 tty->driver->subtype == PTY_TYPE_MASTER)
2950 real_tty = tty->link;
2953 * Break handling by driver
2956 retval = -EINVAL;
2958 if (!tty->ops->break_ctl) {
2959 switch (cmd) {
2960 case TIOCSBRK:
2961 case TIOCCBRK:
2962 if (tty->ops->ioctl)
2963 retval = tty->ops->ioctl(tty, file, cmd, arg);
2964 if (retval != -EINVAL && retval != -ENOIOCTLCMD)
2965 printk(KERN_WARNING "tty: driver %s needs updating to use break_ctl\n", tty->driver->name);
2966 return retval;
2968 /* These two ioctl's always return success; even if */
2969 /* the driver doesn't support them. */
2970 case TCSBRK:
2971 case TCSBRKP:
2972 if (!tty->ops->ioctl)
2973 return 0;
2974 retval = tty->ops->ioctl(tty, file, cmd, arg);
2975 if (retval != -EINVAL && retval != -ENOIOCTLCMD)
2976 printk(KERN_WARNING "tty: driver %s needs updating to use break_ctl\n", tty->driver->name);
2977 if (retval == -ENOIOCTLCMD)
2978 retval = 0;
2979 return retval;
2984 * Factor out some common prep work
2986 switch (cmd) {
2987 case TIOCSETD:
2988 case TIOCSBRK:
2989 case TIOCCBRK:
2990 case TCSBRK:
2991 case TCSBRKP:
2992 retval = tty_check_change(tty);
2993 if (retval)
2994 return retval;
2995 if (cmd != TIOCCBRK) {
2996 tty_wait_until_sent(tty, 0);
2997 if (signal_pending(current))
2998 return -EINTR;
3000 break;
3003 switch (cmd) {
3004 case TIOCSTI:
3005 return tiocsti(tty, p);
3006 case TIOCGWINSZ:
3007 return tiocgwinsz(tty, p);
3008 case TIOCSWINSZ:
3009 return tiocswinsz(tty, real_tty, p);
3010 case TIOCCONS:
3011 return real_tty != tty ? -EINVAL : tioccons(file);
3012 case FIONBIO:
3013 return fionbio(file, p);
3014 case TIOCEXCL:
3015 set_bit(TTY_EXCLUSIVE, &tty->flags);
3016 return 0;
3017 case TIOCNXCL:
3018 clear_bit(TTY_EXCLUSIVE, &tty->flags);
3019 return 0;
3020 case TIOCNOTTY:
3021 if (current->signal->tty != tty)
3022 return -ENOTTY;
3023 no_tty();
3024 return 0;
3025 case TIOCSCTTY:
3026 return tiocsctty(tty, arg);
3027 case TIOCGPGRP:
3028 return tiocgpgrp(tty, real_tty, p);
3029 case TIOCSPGRP:
3030 return tiocspgrp(tty, real_tty, p);
3031 case TIOCGSID:
3032 return tiocgsid(tty, real_tty, p);
3033 case TIOCGETD:
3034 return put_user(tty->ldisc.ops->num, (int __user *)p);
3035 case TIOCSETD:
3036 return tiocsetd(tty, p);
3037 #ifdef CONFIG_VT
3038 case TIOCLINUX:
3039 return tioclinux(tty, arg);
3040 #endif
3042 * Break handling
3044 case TIOCSBRK: /* Turn break on, unconditionally */
3045 if (tty->ops->break_ctl)
3046 tty->ops->break_ctl(tty, -1);
3047 return 0;
3049 case TIOCCBRK: /* Turn break off, unconditionally */
3050 if (tty->ops->break_ctl)
3051 tty->ops->break_ctl(tty, 0);
3052 return 0;
3053 case TCSBRK: /* SVID version: non-zero arg --> no break */
3054 /* non-zero arg means wait for all output data
3055 * to be sent (performed above) but don't send break.
3056 * This is used by the tcdrain() termios function.
3058 if (!arg)
3059 return send_break(tty, 250);
3060 return 0;
3061 case TCSBRKP: /* support for POSIX tcsendbreak() */
3062 return send_break(tty, arg ? arg*100 : 250);
3064 case TIOCMGET:
3065 return tty_tiocmget(tty, file, p);
3066 case TIOCMSET:
3067 case TIOCMBIC:
3068 case TIOCMBIS:
3069 return tty_tiocmset(tty, file, cmd, p);
3070 case TCFLSH:
3071 switch (arg) {
3072 case TCIFLUSH:
3073 case TCIOFLUSH:
3074 /* flush tty buffer and allow ldisc to process ioctl */
3075 tty_buffer_flush(tty);
3076 break;
3078 break;
3080 if (tty->ops->ioctl) {
3081 retval = (tty->ops->ioctl)(tty, file, cmd, arg);
3082 if (retval != -ENOIOCTLCMD)
3083 return retval;
3085 ld = tty_ldisc_ref_wait(tty);
3086 retval = -EINVAL;
3087 if (ld->ops->ioctl) {
3088 retval = ld->ops->ioctl(tty, file, cmd, arg);
3089 if (retval == -ENOIOCTLCMD)
3090 retval = -EINVAL;
3092 tty_ldisc_deref(ld);
3093 return retval;
3096 #ifdef CONFIG_COMPAT
3097 static long tty_compat_ioctl(struct file *file, unsigned int cmd,
3098 unsigned long arg)
3100 struct inode *inode = file->f_dentry->d_inode;
3101 struct tty_struct *tty = file->private_data;
3102 struct tty_ldisc *ld;
3103 int retval = -ENOIOCTLCMD;
3105 if (tty_paranoia_check(tty, inode, "tty_ioctl"))
3106 return -EINVAL;
3108 if (tty->ops->compat_ioctl) {
3109 retval = (tty->ops->compat_ioctl)(tty, file, cmd, arg);
3110 if (retval != -ENOIOCTLCMD)
3111 return retval;
3114 ld = tty_ldisc_ref_wait(tty);
3115 if (ld->ops->compat_ioctl)
3116 retval = ld->ops->compat_ioctl(tty, file, cmd, arg);
3117 tty_ldisc_deref(ld);
3119 return retval;
3121 #endif
3124 * This implements the "Secure Attention Key" --- the idea is to
3125 * prevent trojan horses by killing all processes associated with this
3126 * tty when the user hits the "Secure Attention Key". Required for
3127 * super-paranoid applications --- see the Orange Book for more details.
3129 * This code could be nicer; ideally it should send a HUP, wait a few
3130 * seconds, then send a INT, and then a KILL signal. But you then
3131 * have to coordinate with the init process, since all processes associated
3132 * with the current tty must be dead before the new getty is allowed
3133 * to spawn.
3135 * Now, if it would be correct ;-/ The current code has a nasty hole -
3136 * it doesn't catch files in flight. We may send the descriptor to ourselves
3137 * via AF_UNIX socket, close it and later fetch from socket. FIXME.
3139 * Nasty bug: do_SAK is being called in interrupt context. This can
3140 * deadlock. We punt it up to process context. AKPM - 16Mar2001
3142 void __do_SAK(struct tty_struct *tty)
3144 #ifdef TTY_SOFT_SAK
3145 tty_hangup(tty);
3146 #else
3147 struct task_struct *g, *p;
3148 struct pid *session;
3149 int i;
3150 struct file *filp;
3151 struct fdtable *fdt;
3153 if (!tty)
3154 return;
3155 session = tty->session;
3157 tty_ldisc_flush(tty);
3159 tty_driver_flush_buffer(tty);
3161 read_lock(&tasklist_lock);
3162 /* Kill the entire session */
3163 do_each_pid_task(session, PIDTYPE_SID, p) {
3164 printk(KERN_NOTICE "SAK: killed process %d"
3165 " (%s): task_session_nr(p)==tty->session\n",
3166 task_pid_nr(p), p->comm);
3167 send_sig(SIGKILL, p, 1);
3168 } while_each_pid_task(session, PIDTYPE_SID, p);
3169 /* Now kill any processes that happen to have the
3170 * tty open.
3172 do_each_thread(g, p) {
3173 if (p->signal->tty == tty) {
3174 printk(KERN_NOTICE "SAK: killed process %d"
3175 " (%s): task_session_nr(p)==tty->session\n",
3176 task_pid_nr(p), p->comm);
3177 send_sig(SIGKILL, p, 1);
3178 continue;
3180 task_lock(p);
3181 if (p->files) {
3183 * We don't take a ref to the file, so we must
3184 * hold ->file_lock instead.
3186 spin_lock(&p->files->file_lock);
3187 fdt = files_fdtable(p->files);
3188 for (i = 0; i < fdt->max_fds; i++) {
3189 filp = fcheck_files(p->files, i);
3190 if (!filp)
3191 continue;
3192 if (filp->f_op->read == tty_read &&
3193 filp->private_data == tty) {
3194 printk(KERN_NOTICE "SAK: killed process %d"
3195 " (%s): fd#%d opened to the tty\n",
3196 task_pid_nr(p), p->comm, i);
3197 force_sig(SIGKILL, p);
3198 break;
3201 spin_unlock(&p->files->file_lock);
3203 task_unlock(p);
3204 } while_each_thread(g, p);
3205 read_unlock(&tasklist_lock);
3206 #endif
3209 static void do_SAK_work(struct work_struct *work)
3211 struct tty_struct *tty =
3212 container_of(work, struct tty_struct, SAK_work);
3213 __do_SAK(tty);
3217 * The tq handling here is a little racy - tty->SAK_work may already be queued.
3218 * Fortunately we don't need to worry, because if ->SAK_work is already queued,
3219 * the values which we write to it will be identical to the values which it
3220 * already has. --akpm
3222 void do_SAK(struct tty_struct *tty)
3224 if (!tty)
3225 return;
3226 schedule_work(&tty->SAK_work);
3229 EXPORT_SYMBOL(do_SAK);
3232 * flush_to_ldisc
3233 * @work: tty structure passed from work queue.
3235 * This routine is called out of the software interrupt to flush data
3236 * from the buffer chain to the line discipline.
3238 * Locking: holds tty->buf.lock to guard buffer list. Drops the lock
3239 * while invoking the line discipline receive_buf method. The
3240 * receive_buf method is single threaded for each tty instance.
3243 static void flush_to_ldisc(struct work_struct *work)
3245 struct tty_struct *tty =
3246 container_of(work, struct tty_struct, buf.work.work);
3247 unsigned long flags;
3248 struct tty_ldisc *disc;
3249 struct tty_buffer *tbuf, *head;
3250 char *char_buf;
3251 unsigned char *flag_buf;
3253 disc = tty_ldisc_ref(tty);
3254 if (disc == NULL) /* !TTY_LDISC */
3255 return;
3257 spin_lock_irqsave(&tty->buf.lock, flags);
3258 /* So we know a flush is running */
3259 set_bit(TTY_FLUSHING, &tty->flags);
3260 head = tty->buf.head;
3261 if (head != NULL) {
3262 tty->buf.head = NULL;
3263 for (;;) {
3264 int count = head->commit - head->read;
3265 if (!count) {
3266 if (head->next == NULL)
3267 break;
3268 tbuf = head;
3269 head = head->next;
3270 tty_buffer_free(tty, tbuf);
3271 continue;
3273 /* Ldisc or user is trying to flush the buffers
3274 we are feeding to the ldisc, stop feeding the
3275 line discipline as we want to empty the queue */
3276 if (test_bit(TTY_FLUSHPENDING, &tty->flags))
3277 break;
3278 if (!tty->receive_room) {
3279 schedule_delayed_work(&tty->buf.work, 1);
3280 break;
3282 if (count > tty->receive_room)
3283 count = tty->receive_room;
3284 char_buf = head->char_buf_ptr + head->read;
3285 flag_buf = head->flag_buf_ptr + head->read;
3286 head->read += count;
3287 spin_unlock_irqrestore(&tty->buf.lock, flags);
3288 disc->ops->receive_buf(tty, char_buf,
3289 flag_buf, count);
3290 spin_lock_irqsave(&tty->buf.lock, flags);
3292 /* Restore the queue head */
3293 tty->buf.head = head;
3295 /* We may have a deferred request to flush the input buffer,
3296 if so pull the chain under the lock and empty the queue */
3297 if (test_bit(TTY_FLUSHPENDING, &tty->flags)) {
3298 __tty_buffer_flush(tty);
3299 clear_bit(TTY_FLUSHPENDING, &tty->flags);
3300 wake_up(&tty->read_wait);
3302 clear_bit(TTY_FLUSHING, &tty->flags);
3303 spin_unlock_irqrestore(&tty->buf.lock, flags);
3305 tty_ldisc_deref(disc);
3309 * tty_flip_buffer_push - terminal
3310 * @tty: tty to push
3312 * Queue a push of the terminal flip buffers to the line discipline. This
3313 * function must not be called from IRQ context if tty->low_latency is set.
3315 * In the event of the queue being busy for flipping the work will be
3316 * held off and retried later.
3318 * Locking: tty buffer lock. Driver locks in low latency mode.
3321 void tty_flip_buffer_push(struct tty_struct *tty)
3323 unsigned long flags;
3324 spin_lock_irqsave(&tty->buf.lock, flags);
3325 if (tty->buf.tail != NULL)
3326 tty->buf.tail->commit = tty->buf.tail->used;
3327 spin_unlock_irqrestore(&tty->buf.lock, flags);
3329 if (tty->low_latency)
3330 flush_to_ldisc(&tty->buf.work.work);
3331 else
3332 schedule_delayed_work(&tty->buf.work, 1);
3335 EXPORT_SYMBOL(tty_flip_buffer_push);
3339 * initialize_tty_struct
3340 * @tty: tty to initialize
3342 * This subroutine initializes a tty structure that has been newly
3343 * allocated.
3345 * Locking: none - tty in question must not be exposed at this point
3348 static void initialize_tty_struct(struct tty_struct *tty)
3350 memset(tty, 0, sizeof(struct tty_struct));
3351 tty->magic = TTY_MAGIC;
3352 tty_ldisc_init(tty);
3353 tty->session = NULL;
3354 tty->pgrp = NULL;
3355 tty->overrun_time = jiffies;
3356 tty->buf.head = tty->buf.tail = NULL;
3357 tty_buffer_init(tty);
3358 INIT_DELAYED_WORK(&tty->buf.work, flush_to_ldisc);
3359 mutex_init(&tty->termios_mutex);
3360 init_waitqueue_head(&tty->write_wait);
3361 init_waitqueue_head(&tty->read_wait);
3362 INIT_WORK(&tty->hangup_work, do_tty_hangup);
3363 mutex_init(&tty->atomic_read_lock);
3364 mutex_init(&tty->atomic_write_lock);
3365 spin_lock_init(&tty->read_lock);
3366 spin_lock_init(&tty->ctrl_lock);
3367 INIT_LIST_HEAD(&tty->tty_files);
3368 INIT_WORK(&tty->SAK_work, do_SAK_work);
3372 * tty_put_char - write one character to a tty
3373 * @tty: tty
3374 * @ch: character
3376 * Write one byte to the tty using the provided put_char method
3377 * if present. Returns the number of characters successfully output.
3379 * Note: the specific put_char operation in the driver layer may go
3380 * away soon. Don't call it directly, use this method
3383 int tty_put_char(struct tty_struct *tty, unsigned char ch)
3385 if (tty->ops->put_char)
3386 return tty->ops->put_char(tty, ch);
3387 return tty->ops->write(tty, &ch, 1);
3390 EXPORT_SYMBOL_GPL(tty_put_char);
3392 static struct class *tty_class;
3395 * tty_register_device - register a tty device
3396 * @driver: the tty driver that describes the tty device
3397 * @index: the index in the tty driver for this tty device
3398 * @device: a struct device that is associated with this tty device.
3399 * This field is optional, if there is no known struct device
3400 * for this tty device it can be set to NULL safely.
3402 * Returns a pointer to the struct device for this tty device
3403 * (or ERR_PTR(-EFOO) on error).
3405 * This call is required to be made to register an individual tty device
3406 * if the tty driver's flags have the TTY_DRIVER_DYNAMIC_DEV bit set. If
3407 * that bit is not set, this function should not be called by a tty
3408 * driver.
3410 * Locking: ??
3413 struct device *tty_register_device(struct tty_driver *driver, unsigned index,
3414 struct device *device)
3416 char name[64];
3417 dev_t dev = MKDEV(driver->major, driver->minor_start) + index;
3419 if (index >= driver->num) {
3420 printk(KERN_ERR "Attempt to register invalid tty line number "
3421 " (%d).\n", index);
3422 return ERR_PTR(-EINVAL);
3425 if (driver->type == TTY_DRIVER_TYPE_PTY)
3426 pty_line_name(driver, index, name);
3427 else
3428 tty_line_name(driver, index, name);
3430 return device_create(tty_class, device, dev, name);
3434 * tty_unregister_device - unregister a tty device
3435 * @driver: the tty driver that describes the tty device
3436 * @index: the index in the tty driver for this tty device
3438 * If a tty device is registered with a call to tty_register_device() then
3439 * this function must be called when the tty device is gone.
3441 * Locking: ??
3444 void tty_unregister_device(struct tty_driver *driver, unsigned index)
3446 device_destroy(tty_class,
3447 MKDEV(driver->major, driver->minor_start) + index);
3450 EXPORT_SYMBOL(tty_register_device);
3451 EXPORT_SYMBOL(tty_unregister_device);
3453 struct tty_driver *alloc_tty_driver(int lines)
3455 struct tty_driver *driver;
3457 driver = kzalloc(sizeof(struct tty_driver), GFP_KERNEL);
3458 if (driver) {
3459 driver->magic = TTY_DRIVER_MAGIC;
3460 driver->num = lines;
3461 /* later we'll move allocation of tables here */
3463 return driver;
3466 void put_tty_driver(struct tty_driver *driver)
3468 kfree(driver);
3471 void tty_set_operations(struct tty_driver *driver,
3472 const struct tty_operations *op)
3474 driver->ops = op;
3477 EXPORT_SYMBOL(alloc_tty_driver);
3478 EXPORT_SYMBOL(put_tty_driver);
3479 EXPORT_SYMBOL(tty_set_operations);
3482 * Called by a tty driver to register itself.
3484 int tty_register_driver(struct tty_driver *driver)
3486 int error;
3487 int i;
3488 dev_t dev;
3489 void **p = NULL;
3491 if (driver->flags & TTY_DRIVER_INSTALLED)
3492 return 0;
3494 if (!(driver->flags & TTY_DRIVER_DEVPTS_MEM) && driver->num) {
3495 p = kzalloc(driver->num * 3 * sizeof(void *), GFP_KERNEL);
3496 if (!p)
3497 return -ENOMEM;
3500 if (!driver->major) {
3501 error = alloc_chrdev_region(&dev, driver->minor_start,
3502 driver->num, driver->name);
3503 if (!error) {
3504 driver->major = MAJOR(dev);
3505 driver->minor_start = MINOR(dev);
3507 } else {
3508 dev = MKDEV(driver->major, driver->minor_start);
3509 error = register_chrdev_region(dev, driver->num, driver->name);
3511 if (error < 0) {
3512 kfree(p);
3513 return error;
3516 if (p) {
3517 driver->ttys = (struct tty_struct **)p;
3518 driver->termios = (struct ktermios **)(p + driver->num);
3519 driver->termios_locked = (struct ktermios **)
3520 (p + driver->num * 2);
3521 } else {
3522 driver->ttys = NULL;
3523 driver->termios = NULL;
3524 driver->termios_locked = NULL;
3527 cdev_init(&driver->cdev, &tty_fops);
3528 driver->cdev.owner = driver->owner;
3529 error = cdev_add(&driver->cdev, dev, driver->num);
3530 if (error) {
3531 unregister_chrdev_region(dev, driver->num);
3532 driver->ttys = NULL;
3533 driver->termios = driver->termios_locked = NULL;
3534 kfree(p);
3535 return error;
3538 mutex_lock(&tty_mutex);
3539 list_add(&driver->tty_drivers, &tty_drivers);
3540 mutex_unlock(&tty_mutex);
3542 if (!(driver->flags & TTY_DRIVER_DYNAMIC_DEV)) {
3543 for (i = 0; i < driver->num; i++)
3544 tty_register_device(driver, i, NULL);
3546 proc_tty_register_driver(driver);
3547 return 0;
3550 EXPORT_SYMBOL(tty_register_driver);
3553 * Called by a tty driver to unregister itself.
3555 int tty_unregister_driver(struct tty_driver *driver)
3557 int i;
3558 struct ktermios *tp;
3559 void *p;
3561 if (driver->refcount)
3562 return -EBUSY;
3564 unregister_chrdev_region(MKDEV(driver->major, driver->minor_start),
3565 driver->num);
3566 mutex_lock(&tty_mutex);
3567 list_del(&driver->tty_drivers);
3568 mutex_unlock(&tty_mutex);
3571 * Free the termios and termios_locked structures because
3572 * we don't want to get memory leaks when modular tty
3573 * drivers are removed from the kernel.
3575 for (i = 0; i < driver->num; i++) {
3576 tp = driver->termios[i];
3577 if (tp) {
3578 driver->termios[i] = NULL;
3579 kfree(tp);
3581 tp = driver->termios_locked[i];
3582 if (tp) {
3583 driver->termios_locked[i] = NULL;
3584 kfree(tp);
3586 if (!(driver->flags & TTY_DRIVER_DYNAMIC_DEV))
3587 tty_unregister_device(driver, i);
3589 p = driver->ttys;
3590 proc_tty_unregister_driver(driver);
3591 driver->ttys = NULL;
3592 driver->termios = driver->termios_locked = NULL;
3593 kfree(p);
3594 cdev_del(&driver->cdev);
3595 return 0;
3597 EXPORT_SYMBOL(tty_unregister_driver);
3599 dev_t tty_devnum(struct tty_struct *tty)
3601 return MKDEV(tty->driver->major, tty->driver->minor_start) + tty->index;
3603 EXPORT_SYMBOL(tty_devnum);
3605 void proc_clear_tty(struct task_struct *p)
3607 spin_lock_irq(&p->sighand->siglock);
3608 p->signal->tty = NULL;
3609 spin_unlock_irq(&p->sighand->siglock);
3611 EXPORT_SYMBOL(proc_clear_tty);
3613 /* Called under the sighand lock */
3615 static void __proc_set_tty(struct task_struct *tsk, struct tty_struct *tty)
3617 if (tty) {
3618 unsigned long flags;
3619 /* We should not have a session or pgrp to put here but.... */
3620 spin_lock_irqsave(&tty->ctrl_lock, flags);
3621 put_pid(tty->session);
3622 put_pid(tty->pgrp);
3623 tty->pgrp = get_pid(task_pgrp(tsk));
3624 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
3625 tty->session = get_pid(task_session(tsk));
3627 put_pid(tsk->signal->tty_old_pgrp);
3628 tsk->signal->tty = tty;
3629 tsk->signal->tty_old_pgrp = NULL;
3632 static void proc_set_tty(struct task_struct *tsk, struct tty_struct *tty)
3634 spin_lock_irq(&tsk->sighand->siglock);
3635 __proc_set_tty(tsk, tty);
3636 spin_unlock_irq(&tsk->sighand->siglock);
3639 struct tty_struct *get_current_tty(void)
3641 struct tty_struct *tty;
3642 WARN_ON_ONCE(!mutex_is_locked(&tty_mutex));
3643 tty = current->signal->tty;
3645 * session->tty can be changed/cleared from under us, make sure we
3646 * issue the load. The obtained pointer, when not NULL, is valid as
3647 * long as we hold tty_mutex.
3649 barrier();
3650 return tty;
3652 EXPORT_SYMBOL_GPL(get_current_tty);
3655 * Initialize the console device. This is called *early*, so
3656 * we can't necessarily depend on lots of kernel help here.
3657 * Just do some early initializations, and do the complex setup
3658 * later.
3660 void __init console_init(void)
3662 initcall_t *call;
3664 /* Setup the default TTY line discipline. */
3665 tty_ldisc_begin();
3668 * set up the console device so that later boot sequences can
3669 * inform about problems etc..
3671 call = __con_initcall_start;
3672 while (call < __con_initcall_end) {
3673 (*call)();
3674 call++;
3678 static int __init tty_class_init(void)
3680 tty_class = class_create(THIS_MODULE, "tty");
3681 if (IS_ERR(tty_class))
3682 return PTR_ERR(tty_class);
3683 return 0;
3686 postcore_initcall(tty_class_init);
3688 /* 3/2004 jmc: why do these devices exist? */
3690 static struct cdev tty_cdev, console_cdev;
3691 #ifdef CONFIG_UNIX98_PTYS
3692 static struct cdev ptmx_cdev;
3693 #endif
3694 #ifdef CONFIG_VT
3695 static struct cdev vc0_cdev;
3696 #endif
3699 * Ok, now we can initialize the rest of the tty devices and can count
3700 * on memory allocations, interrupts etc..
3702 static int __init tty_init(void)
3704 cdev_init(&tty_cdev, &tty_fops);
3705 if (cdev_add(&tty_cdev, MKDEV(TTYAUX_MAJOR, 0), 1) ||
3706 register_chrdev_region(MKDEV(TTYAUX_MAJOR, 0), 1, "/dev/tty") < 0)
3707 panic("Couldn't register /dev/tty driver\n");
3708 device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 0), "tty");
3710 cdev_init(&console_cdev, &console_fops);
3711 if (cdev_add(&console_cdev, MKDEV(TTYAUX_MAJOR, 1), 1) ||
3712 register_chrdev_region(MKDEV(TTYAUX_MAJOR, 1), 1, "/dev/console") < 0)
3713 panic("Couldn't register /dev/console driver\n");
3714 device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 1), "console");
3716 #ifdef CONFIG_UNIX98_PTYS
3717 cdev_init(&ptmx_cdev, &ptmx_fops);
3718 if (cdev_add(&ptmx_cdev, MKDEV(TTYAUX_MAJOR, 2), 1) ||
3719 register_chrdev_region(MKDEV(TTYAUX_MAJOR, 2), 1, "/dev/ptmx") < 0)
3720 panic("Couldn't register /dev/ptmx driver\n");
3721 device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 2), "ptmx");
3722 #endif
3724 #ifdef CONFIG_VT
3725 cdev_init(&vc0_cdev, &console_fops);
3726 if (cdev_add(&vc0_cdev, MKDEV(TTY_MAJOR, 0), 1) ||
3727 register_chrdev_region(MKDEV(TTY_MAJOR, 0), 1, "/dev/vc/0") < 0)
3728 panic("Couldn't register /dev/tty0 driver\n");
3729 device_create(tty_class, NULL, MKDEV(TTY_MAJOR, 0), "tty0");
3731 vty_init();
3732 #endif
3733 return 0;
3735 module_init(tty_init);