Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
[linux-2.6-block.git] / drivers / char / tty_io.c
CommitLineData
1da177e4
LT
1/*
2 * linux/drivers/char/tty_io.c
3 *
4 * Copyright (C) 1991, 1992 Linus Torvalds
5 */
6
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.
10 *
11 * Kill-line thanks to John T Kohl, who also corrected VMIN = VTIME = 0.
12 *
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.
18 *
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
37bdfb07 22 * makes for cleaner and more compact code. -TYT, 9/17/92
1da177e4
LT
23 *
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).
27 *
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
31 *
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.
35 *
36 * Rewrote canonical mode and added more termios flags.
37 * -- julian@uhunix.uhcc.hawaii.edu (J. Cowley), 13Jan94
38 *
39 * Reorganized FASYNC support so mouse code can share it.
40 * -- ctm@ardi.com, 9Sep95
41 *
42 * New TIOCLINUX variants added.
43 * -- mj@k332.feld.cvut.cz, 19-Nov-95
37bdfb07 44 *
1da177e4
LT
45 * Restrict vt switching via ioctl()
46 * -- grif@cs.ucr.edu, 5-Dec-95
47 *
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
51 *
52 * Rewrote init_dev and release_dev to eliminate races.
53 * -- Bill Hawes <whawes@star.net>, June 97
54 *
55 * Added devfs support.
56 * -- C. Scott Ananian <cananian@alumni.princeton.edu>, 13-Jan-1998
57 *
58 * Added support for a Unix98-style ptmx device.
59 * -- C. Scott Ananian <cananian@alumni.princeton.edu>, 14-Jan-1998
60 *
61 * Reduced memory usage for older ARM systems
62 * -- Russell King <rmk@arm.linux.org.uk>
63 *
64 * Move do_SAK() into process context. Less stack use in devfs functions.
37bdfb07
AC
65 * alloc_tty_struct() always uses kmalloc()
66 * -- Andrew Morton <andrewm@uow.edu.eu> 17Mar01
1da177e4
LT
67 */
68
1da177e4
LT
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>
9f3acc31 81#include <linux/fdtable.h>
1da177e4
LT
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>
1da177e4
LT
95#include <linux/wait.h>
96#include <linux/bitops.h>
b20f3ae5 97#include <linux/delay.h>
a352def2 98#include <linux/seq_file.h>
1da177e4 99
a352def2 100#include <linux/uaccess.h>
1da177e4
LT
101#include <asm/system.h>
102
103#include <linux/kbd_kern.h>
104#include <linux/vt_kern.h>
105#include <linux/selection.h>
1da177e4
LT
106
107#include <linux/kmod.h>
b488893a 108#include <linux/nsproxy.h>
1da177e4
LT
109
110#undef TTY_DEBUG_HANGUP
111
112#define TTY_PARANOIA_CHECK 1
113#define CHECK_TTY_COUNT 1
114
edc6afc5 115struct ktermios tty_std_termios = { /* for the benefit of tty drivers */
1da177e4
LT
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,
edc6afc5
AC
121 .c_cc = INIT_C_CC,
122 .c_ispeed = 38400,
123 .c_ospeed = 38400
1da177e4
LT
124};
125
126EXPORT_SYMBOL(tty_std_termios);
127
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 */
37bdfb07 131
1da177e4
LT
132LIST_HEAD(tty_drivers); /* linked list of tty drivers */
133
24ec839c 134/* Mutex to protect creating and releasing a tty. This is shared with
1da177e4 135 vt.c for deeply disgusting hack reasons */
70522e12 136DEFINE_MUTEX(tty_mutex);
de2a84f2 137EXPORT_SYMBOL(tty_mutex);
1da177e4
LT
138
139#ifdef CONFIG_UNIX98_PTYS
140extern struct tty_driver *ptm_driver; /* Unix98 pty masters; for /dev/ptmx */
1da177e4
LT
141static int ptmx_open(struct inode *, struct file *);
142#endif
143
1da177e4
LT
144static void initialize_tty_struct(struct tty_struct *tty);
145
146static ssize_t tty_read(struct file *, char __user *, size_t, loff_t *);
147static ssize_t tty_write(struct file *, const char __user *, size_t, loff_t *);
37bdfb07
AC
148ssize_t redirected_tty_write(struct file *, const char __user *,
149 size_t, loff_t *);
1da177e4
LT
150static unsigned int tty_poll(struct file *, poll_table *);
151static int tty_open(struct inode *, struct file *);
152static int tty_release(struct inode *, struct file *);
04f378b1 153long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
e10cc1df 154#ifdef CONFIG_COMPAT
37bdfb07 155static long tty_compat_ioctl(struct file *file, unsigned int cmd,
e10cc1df
PF
156 unsigned long arg);
157#else
158#define tty_compat_ioctl NULL
159#endif
37bdfb07 160static int tty_fasync(int fd, struct file *filp, int on);
d5698c28 161static void release_tty(struct tty_struct *tty, int idx);
2a65f1d9 162static void __proc_set_tty(struct task_struct *tsk, struct tty_struct *tty);
98a27ba4 163static void proc_set_tty(struct task_struct *tsk, struct tty_struct *tty);
1da177e4 164
af9b897e
AC
165/**
166 * alloc_tty_struct - allocate a tty object
167 *
168 * Return a new empty tty structure. The data fields have not
169 * been initialized in any way but has been zeroed
170 *
171 * Locking: none
af9b897e 172 */
1da177e4
LT
173
174static struct tty_struct *alloc_tty_struct(void)
175{
1266b1e1 176 return kzalloc(sizeof(struct tty_struct), GFP_KERNEL);
1da177e4
LT
177}
178
33f0f88f
AC
179static void tty_buffer_free_all(struct tty_struct *);
180
af9b897e
AC
181/**
182 * free_tty_struct - free a disused tty
183 * @tty: tty struct to free
184 *
185 * Free the write buffers, tty queue and tty memory itself.
186 *
187 * Locking: none. Must be called after tty is definitely unused
188 */
189
1da177e4
LT
190static inline void free_tty_struct(struct tty_struct *tty)
191{
192 kfree(tty->write_buf);
33f0f88f 193 tty_buffer_free_all(tty);
1da177e4
LT
194 kfree(tty);
195}
196
197#define TTY_NUMBER(tty) ((tty)->index + (tty)->driver->name_base)
198
af9b897e
AC
199/**
200 * tty_name - return tty naming
201 * @tty: tty structure
202 * @buf: buffer for output
203 *
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
206 *
207 * Locking: none
208 */
209
1da177e4
LT
210char *tty_name(struct tty_struct *tty, char *buf)
211{
212 if (!tty) /* Hmm. NULL pointer. That's fun. */
213 strcpy(buf, "NULL tty");
214 else
215 strcpy(buf, tty->name);
216 return buf;
217}
218
219EXPORT_SYMBOL(tty_name);
220
d769a669 221int tty_paranoia_check(struct tty_struct *tty, struct inode *inode,
1da177e4
LT
222 const char *routine)
223{
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;
230 }
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;
236 }
237#endif
238 return 0;
239}
240
241static int check_tty_count(struct tty_struct *tty, const char *routine)
242{
243#ifdef CHECK_TTY_COUNT
244 struct list_head *p;
245 int count = 0;
37bdfb07 246
1da177e4
LT
247 file_list_lock();
248 list_for_each(p, &tty->tty_files) {
249 count++;
250 }
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;
24ec839c 261 }
1da177e4
LT
262#endif
263 return 0;
264}
265
33f0f88f
AC
266/*
267 * Tty buffer allocation management
268 */
269
af9b897e
AC
270/**
271 * tty_buffer_free_all - free buffers used by a tty
272 * @tty: tty to free from
273 *
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
276 *
277 * Locking: none
278 */
279
33f0f88f
AC
280static void tty_buffer_free_all(struct tty_struct *tty)
281{
282 struct tty_buffer *thead;
37bdfb07 283 while ((thead = tty->buf.head) != NULL) {
33f0f88f
AC
284 tty->buf.head = thead->next;
285 kfree(thead);
286 }
37bdfb07 287 while ((thead = tty->buf.free) != NULL) {
33f0f88f
AC
288 tty->buf.free = thead->next;
289 kfree(thead);
290 }
291 tty->buf.tail = NULL;
01da5fd8 292 tty->buf.memory_used = 0;
33f0f88f
AC
293}
294
01da5fd8
AC
295/**
296 * tty_buffer_init - prepare a tty buffer structure
297 * @tty: tty to initialise
298 *
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.
301 *
302 * Locking: none
303 */
304
33f0f88f
AC
305static void tty_buffer_init(struct tty_struct *tty)
306{
808249ce 307 spin_lock_init(&tty->buf.lock);
33f0f88f
AC
308 tty->buf.head = NULL;
309 tty->buf.tail = NULL;
310 tty->buf.free = NULL;
01da5fd8 311 tty->buf.memory_used = 0;
33f0f88f
AC
312}
313
01da5fd8
AC
314/**
315 * tty_buffer_alloc - allocate a tty buffer
316 * @tty: tty device
317 * @size: desired size (characters)
318 *
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
322 *
323 * Locking: Caller must hold tty->buf.lock
324 */
325
326static struct tty_buffer *tty_buffer_alloc(struct tty_struct *tty, size_t size)
33f0f88f 327{
01da5fd8
AC
328 struct tty_buffer *p;
329
330 if (tty->buf.memory_used + size > 65536)
331 return NULL;
332 p = kmalloc(sizeof(struct tty_buffer) + 2 * size, GFP_ATOMIC);
37bdfb07 333 if (p == NULL)
33f0f88f
AC
334 return NULL;
335 p->used = 0;
336 p->size = size;
337 p->next = NULL;
8977d929
PF
338 p->commit = 0;
339 p->read = 0;
33f0f88f
AC
340 p->char_buf_ptr = (char *)(p->data);
341 p->flag_buf_ptr = (unsigned char *)p->char_buf_ptr + size;
01da5fd8 342 tty->buf.memory_used += size;
33f0f88f
AC
343 return p;
344}
345
01da5fd8
AC
346/**
347 * tty_buffer_free - free a tty buffer
348 * @tty: tty owning the buffer
349 * @b: the buffer to free
350 *
351 * Free a tty buffer, or add it to the free list according to our
352 * internal strategy
353 *
354 * Locking: Caller must hold tty->buf.lock
355 */
33f0f88f
AC
356
357static void tty_buffer_free(struct tty_struct *tty, struct tty_buffer *b)
358{
359 /* Dumb strategy for now - should keep some stats */
01da5fd8
AC
360 tty->buf.memory_used -= b->size;
361 WARN_ON(tty->buf.memory_used < 0);
362
37bdfb07 363 if (b->size >= 512)
33f0f88f
AC
364 kfree(b);
365 else {
366 b->next = tty->buf.free;
367 tty->buf.free = b;
368 }
369}
370
c5c34d48 371/**
42fd552e 372 * __tty_buffer_flush - flush full tty buffers
c5c34d48
PF
373 * @tty: tty to flush
374 *
42fd552e
AC
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.
c5c34d48 378 *
42fd552e 379 * Locking: Caller must hold tty->buf.lock
c5c34d48
PF
380 */
381
42fd552e 382static void __tty_buffer_flush(struct tty_struct *tty)
c5c34d48
PF
383{
384 struct tty_buffer *thead;
c5c34d48 385
37bdfb07 386 while ((thead = tty->buf.head) != NULL) {
c5c34d48
PF
387 tty->buf.head = thead->next;
388 tty_buffer_free(tty, thead);
389 }
390 tty->buf.tail = NULL;
42fd552e
AC
391}
392
393/**
394 * tty_buffer_flush - flush full tty buffers
395 * @tty: tty to flush
396 *
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
400 *
401 * Locking: none
402 */
403
404static void tty_buffer_flush(struct tty_struct *tty)
405{
406 unsigned long flags;
407 spin_lock_irqsave(&tty->buf.lock, flags);
408
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);
c5c34d48
PF
420 spin_unlock_irqrestore(&tty->buf.lock, flags);
421}
422
01da5fd8
AC
423/**
424 * tty_buffer_find - find a free tty buffer
425 * @tty: tty owning the buffer
426 * @size: characters wanted
427 *
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.
431 *
432 * Locking: Caller must hold tty->buf.lock
433 */
434
33f0f88f
AC
435static struct tty_buffer *tty_buffer_find(struct tty_struct *tty, size_t size)
436{
437 struct tty_buffer **tbh = &tty->buf.free;
37bdfb07 438 while ((*tbh) != NULL) {
33f0f88f 439 struct tty_buffer *t = *tbh;
37bdfb07 440 if (t->size >= size) {
33f0f88f
AC
441 *tbh = t->next;
442 t->next = NULL;
443 t->used = 0;
8977d929
PF
444 t->commit = 0;
445 t->read = 0;
01da5fd8 446 tty->buf.memory_used += t->size;
33f0f88f
AC
447 return t;
448 }
449 tbh = &((*tbh)->next);
450 }
451 /* Round the buffer size out */
37bdfb07 452 size = (size + 0xFF) & ~0xFF;
01da5fd8 453 return tty_buffer_alloc(tty, size);
33f0f88f
AC
454 /* Should possibly check if this fails for the largest buffer we
455 have queued and recycle that ? */
456}
457
01da5fd8
AC
458/**
459 * tty_buffer_request_room - grow tty buffer if needed
460 * @tty: tty structure
461 * @size: size desired
462 *
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.
465 *
466 * Locking: Takes tty->buf.lock
467 */
33f0f88f
AC
468int tty_buffer_request_room(struct tty_struct *tty, size_t size)
469{
808249ce
PF
470 struct tty_buffer *b, *n;
471 int left;
472 unsigned long flags;
473
474 spin_lock_irqsave(&tty->buf.lock, flags);
33f0f88f
AC
475
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 */
33b37a33 479 if ((b = tty->buf.tail) != NULL)
33f0f88f 480 left = b->size - b->used;
33b37a33 481 else
808249ce
PF
482 left = 0;
483
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;
8977d929 489 b->commit = b->used;
808249ce
PF
490 } else
491 tty->buf.head = n;
492 tty->buf.tail = n;
808249ce
PF
493 } else
494 size = left;
495 }
496
497 spin_unlock_irqrestore(&tty->buf.lock, flags);
33f0f88f
AC
498 return size;
499}
33f0f88f
AC
500EXPORT_SYMBOL_GPL(tty_buffer_request_room);
501
af9b897e
AC
502/**
503 * tty_insert_flip_string - Add characters to the tty buffer
504 * @tty: tty structure
505 * @chars: characters
506 * @size: size
507 *
508 * Queue a series of bytes to the tty buffering. All the characters
509 * passed are marked as without error. Returns the number added.
510 *
511 * Locking: Called functions may take tty->buf.lock
512 */
513
e1a25090
AM
514int tty_insert_flip_string(struct tty_struct *tty, const unsigned char *chars,
515 size_t size)
33f0f88f
AC
516{
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 */
37bdfb07 522 if (unlikely(space == 0))
33f0f88f
AC
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;
527063ba
AD
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));
33f0f88f
AC
532 return copied;
533}
ee37df78 534EXPORT_SYMBOL(tty_insert_flip_string);
33f0f88f 535
af9b897e
AC
536/**
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
542 *
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.
546 *
547 * Locking: Called functions may take tty->buf.lock
548 */
549
e1a25090
AM
550int tty_insert_flip_string_flags(struct tty_struct *tty,
551 const unsigned char *chars, const char *flags, size_t size)
33f0f88f
AC
552{
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 */
37bdfb07 558 if (unlikely(space == 0))
33f0f88f
AC
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;
527063ba
AD
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));
33f0f88f
AC
569 return copied;
570}
ff4547f4 571EXPORT_SYMBOL(tty_insert_flip_string_flags);
33f0f88f 572
af9b897e
AC
573/**
574 * tty_schedule_flip - push characters to ldisc
575 * @tty: tty to push from
576 *
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.
580 *
581 * Locking: Takes tty->buf.lock
582 */
583
e1a25090
AM
584void tty_schedule_flip(struct tty_struct *tty)
585{
586 unsigned long flags;
587 spin_lock_irqsave(&tty->buf.lock, flags);
33b37a33 588 if (tty->buf.tail != NULL)
e1a25090 589 tty->buf.tail->commit = tty->buf.tail->used;
e1a25090
AM
590 spin_unlock_irqrestore(&tty->buf.lock, flags);
591 schedule_delayed_work(&tty->buf.work, 1);
592}
593EXPORT_SYMBOL(tty_schedule_flip);
33f0f88f 594
af9b897e
AC
595/**
596 * tty_prepare_flip_string - make room for characters
597 * @tty: tty
598 * @chars: return pointer for character write area
599 * @size: desired size
600 *
33f0f88f
AC
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!
af9b897e
AC
606 *
607 * Locking: May call functions taking tty->buf.lock
33f0f88f
AC
608 */
609
37bdfb07
AC
610int tty_prepare_flip_string(struct tty_struct *tty, unsigned char **chars,
611 size_t size)
33f0f88f
AC
612{
613 int space = tty_buffer_request_room(tty, size);
808249ce
PF
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;
619 }
33f0f88f
AC
620 return space;
621}
622
623EXPORT_SYMBOL_GPL(tty_prepare_flip_string);
624
af9b897e
AC
625/**
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
631 *
33f0f88f
AC
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!
af9b897e
AC
637 *
638 * Locking: May call functions taking tty->buf.lock
33f0f88f
AC
639 */
640
37bdfb07
AC
641int tty_prepare_flip_string_flags(struct tty_struct *tty,
642 unsigned char **chars, char **flags, size_t size)
33f0f88f
AC
643{
644 int space = tty_buffer_request_room(tty, size);
808249ce
PF
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;
650 }
33f0f88f
AC
651 return space;
652}
653
654EXPORT_SYMBOL_GPL(tty_prepare_flip_string_flags);
655
656
657
af9b897e
AC
658/**
659 * get_tty_driver - find device of a tty
660 * @dev_t: device identifier
661 * @index: returns the index of the tty
662 *
663 * This routine returns a tty driver structure, given a device number
664 * and also passes back the index number.
665 *
666 * Locking: caller must hold tty_mutex
1da177e4 667 */
af9b897e 668
1da177e4
LT
669static struct tty_driver *get_tty_driver(dev_t device, int *index)
670{
671 struct tty_driver *p;
672
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;
679 }
680 return NULL;
681}
682
f2d937f3
JW
683#ifdef CONFIG_CONSOLE_POLL
684
685/**
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
689 *
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.
693 */
694struct tty_driver *tty_find_polling_driver(char *name, int *line)
695{
696 struct tty_driver *p, *res = NULL;
697 int tty_line = 0;
698 char *str;
699
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')
8da56309 708 str = NULL;
f2d937f3 709
f34d7a5b
AC
710 if (tty_line >= 0 && tty_line <= p->num && p->ops &&
711 p->ops->poll_init && !p->ops->poll_init(p, tty_line, str)) {
f2d937f3
JW
712 res = p;
713 *line = tty_line;
714 break;
715 }
716 }
717 mutex_unlock(&tty_mutex);
718
719 return res;
720}
721EXPORT_SYMBOL_GPL(tty_find_polling_driver);
722#endif
723
af9b897e
AC
724/**
725 * tty_check_change - check for POSIX terminal changes
726 * @tty: tty to check
727 *
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)
731 *
978e595f 732 * Locking: ctrl_lock
1da177e4 733 */
af9b897e 734
37bdfb07 735int tty_check_change(struct tty_struct *tty)
1da177e4 736{
47f86834
AC
737 unsigned long flags;
738 int ret = 0;
739
1da177e4
LT
740 if (current->signal->tty != tty)
741 return 0;
47f86834
AC
742
743 spin_lock_irqsave(&tty->ctrl_lock, flags);
744
ab521dc0
EB
745 if (!tty->pgrp) {
746 printk(KERN_WARNING "tty_check_change: tty->pgrp == NULL!\n");
9ffee4cb 747 goto out_unlock;
1da177e4 748 }
ab521dc0 749 if (task_pgrp(current) == tty->pgrp)
9ffee4cb
AM
750 goto out_unlock;
751 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
1da177e4 752 if (is_ignored(SIGTTOU))
47f86834
AC
753 goto out;
754 if (is_current_pgrp_orphaned()) {
755 ret = -EIO;
756 goto out;
757 }
040b6362
ON
758 kill_pgrp(task_pgrp(current), SIGTTOU, 1);
759 set_thread_flag(TIF_SIGPENDING);
47f86834
AC
760 ret = -ERESTARTSYS;
761out:
9ffee4cb
AM
762 return ret;
763out_unlock:
47f86834
AC
764 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
765 return ret;
1da177e4
LT
766}
767
768EXPORT_SYMBOL(tty_check_change);
769
37bdfb07 770static ssize_t hung_up_tty_read(struct file *file, char __user *buf,
1da177e4
LT
771 size_t count, loff_t *ppos)
772{
773 return 0;
774}
775
37bdfb07 776static ssize_t hung_up_tty_write(struct file *file, const char __user *buf,
1da177e4
LT
777 size_t count, loff_t *ppos)
778{
779 return -EIO;
780}
781
782/* No kernel lock held - none needed ;) */
37bdfb07 783static unsigned int hung_up_tty_poll(struct file *filp, poll_table *wait)
1da177e4
LT
784{
785 return POLLIN | POLLOUT | POLLERR | POLLHUP | POLLRDNORM | POLLWRNORM;
786}
787
04f378b1
AC
788static long hung_up_tty_ioctl(struct file *file, unsigned int cmd,
789 unsigned long arg)
38ad2ed0
PF
790{
791 return cmd == TIOCSPGRP ? -ENOTTY : -EIO;
792}
793
37bdfb07 794static long hung_up_tty_compat_ioctl(struct file *file,
38ad2ed0 795 unsigned int cmd, unsigned long arg)
1da177e4
LT
796{
797 return cmd == TIOCSPGRP ? -ENOTTY : -EIO;
798}
799
62322d25 800static const struct file_operations tty_fops = {
1da177e4
LT
801 .llseek = no_llseek,
802 .read = tty_read,
803 .write = tty_write,
804 .poll = tty_poll,
04f378b1 805 .unlocked_ioctl = tty_ioctl,
e10cc1df 806 .compat_ioctl = tty_compat_ioctl,
1da177e4
LT
807 .open = tty_open,
808 .release = tty_release,
809 .fasync = tty_fasync,
810};
811
812#ifdef CONFIG_UNIX98_PTYS
62322d25 813static const struct file_operations ptmx_fops = {
1da177e4
LT
814 .llseek = no_llseek,
815 .read = tty_read,
816 .write = tty_write,
817 .poll = tty_poll,
04f378b1 818 .unlocked_ioctl = tty_ioctl,
e10cc1df 819 .compat_ioctl = tty_compat_ioctl,
1da177e4
LT
820 .open = ptmx_open,
821 .release = tty_release,
822 .fasync = tty_fasync,
823};
824#endif
825
62322d25 826static const struct file_operations console_fops = {
1da177e4
LT
827 .llseek = no_llseek,
828 .read = tty_read,
829 .write = redirected_tty_write,
830 .poll = tty_poll,
04f378b1 831 .unlocked_ioctl = tty_ioctl,
e10cc1df 832 .compat_ioctl = tty_compat_ioctl,
1da177e4
LT
833 .open = tty_open,
834 .release = tty_release,
835 .fasync = tty_fasync,
836};
837
62322d25 838static const struct file_operations hung_up_tty_fops = {
1da177e4
LT
839 .llseek = no_llseek,
840 .read = hung_up_tty_read,
841 .write = hung_up_tty_write,
842 .poll = hung_up_tty_poll,
04f378b1 843 .unlocked_ioctl = hung_up_tty_ioctl,
38ad2ed0 844 .compat_ioctl = hung_up_tty_compat_ioctl,
1da177e4
LT
845 .release = tty_release,
846};
847
848static DEFINE_SPINLOCK(redirect_lock);
849static struct file *redirect;
850
851/**
852 * tty_wakeup - request more data
853 * @tty: terminal
854 *
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.
858 */
37bdfb07 859
1da177e4
LT
860void tty_wakeup(struct tty_struct *tty)
861{
862 struct tty_ldisc *ld;
37bdfb07 863
1da177e4
LT
864 if (test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) {
865 ld = tty_ldisc_ref(tty);
37bdfb07 866 if (ld) {
a352def2
AC
867 if (ld->ops->write_wakeup)
868 ld->ops->write_wakeup(tty);
1da177e4
LT
869 tty_ldisc_deref(ld);
870 }
871 }
872 wake_up_interruptible(&tty->write_wait);
873}
874
875EXPORT_SYMBOL_GPL(tty_wakeup);
876
877/**
878 * tty_ldisc_flush - flush line discipline queue
879 * @tty: tty
880 *
881 * Flush the line discipline queue (if any) for this tty. If there
882 * is no line discipline active this is a no-op.
883 */
37bdfb07 884
1da177e4
LT
885void tty_ldisc_flush(struct tty_struct *tty)
886{
887 struct tty_ldisc *ld = tty_ldisc_ref(tty);
37bdfb07 888 if (ld) {
a352def2
AC
889 if (ld->ops->flush_buffer)
890 ld->ops->flush_buffer(tty);
1da177e4
LT
891 tty_ldisc_deref(ld);
892 }
c5c34d48 893 tty_buffer_flush(tty);
1da177e4
LT
894}
895
896EXPORT_SYMBOL_GPL(tty_ldisc_flush);
edc6afc5
AC
897
898/**
899 * tty_reset_termios - reset terminal state
900 * @tty: tty to reset
901 *
902 * Restore a terminal to the driver default state
903 */
904
905static void tty_reset_termios(struct tty_struct *tty)
906{
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);
912}
37bdfb07 913
af9b897e
AC
914/**
915 * do_tty_hangup - actual handler for hangup events
65f27f38 916 * @work: tty device
af9b897e 917 *
a352def2 918k * This can be called by the "eventd" kernel thread. That is process
af9b897e
AC
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.
921 *
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.
926 *
927 * Locking:
928 * BKL
24ec839c
PZ
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
1da177e4 935 */
65f27f38 936static void do_tty_hangup(struct work_struct *work)
1da177e4 937{
65f27f38
DH
938 struct tty_struct *tty =
939 container_of(work, struct tty_struct, hangup_work);
37bdfb07 940 struct file *cons_filp = NULL;
1da177e4
LT
941 struct file *filp, *f = NULL;
942 struct task_struct *p;
943 struct tty_ldisc *ld;
944 int closecount = 0, n;
47f86834 945 unsigned long flags;
1da177e4
LT
946
947 if (!tty)
948 return;
949
950 /* inuse_filps is protected by the single kernel lock */
951 lock_kernel();
952
953 spin_lock(&redirect_lock);
954 if (redirect && redirect->private_data == tty) {
955 f = redirect;
956 redirect = NULL;
957 }
958 spin_unlock(&redirect_lock);
37bdfb07 959
1da177e4
LT
960 check_tty_count(tty, "do_tty_hangup");
961 file_list_lock();
962 /* This breaks for file handles being sent over AF_UNIX sockets ? */
2f512016 963 list_for_each_entry(filp, &tty->tty_files, f_u.fu_list) {
1da177e4
LT
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;
971 }
972 file_list_unlock();
37bdfb07
AC
973 /*
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.
977 */
1da177e4 978 ld = tty_ldisc_ref(tty);
37bdfb07
AC
979 if (ld != NULL) {
980 /* We may have no line discipline at this point */
a352def2
AC
981 if (ld->ops->flush_buffer)
982 ld->ops->flush_buffer(tty);
f34d7a5b 983 tty_driver_flush_buffer(tty);
1da177e4 984 if ((test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) &&
a352def2
AC
985 ld->ops->write_wakeup)
986 ld->ops->write_wakeup(tty);
987 if (ld->ops->hangup)
988 ld->ops->hangup(tty);
1da177e4 989 }
37bdfb07
AC
990 /*
991 * FIXME: Once we trust the LDISC code better we can wait here for
992 * ldisc completion and fix the driver call race
993 */
1da177e4
LT
994 wake_up_interruptible(&tty->write_wait);
995 wake_up_interruptible(&tty->read_wait);
1da177e4
LT
996 /*
997 * Shutdown the current line discipline, and reset it to
998 * N_TTY.
999 */
1000 if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS)
edc6afc5 1001 tty_reset_termios(tty);
1da177e4
LT
1002 /* Defer ldisc switch */
1003 /* tty_deferred_ldisc_switch(N_TTY);
37bdfb07 1004
1da177e4
LT
1005 This should get done automatically when the port closes and
1006 tty_release is called */
37bdfb07 1007
1da177e4 1008 read_lock(&tasklist_lock);
ab521dc0
EB
1009 if (tty->session) {
1010 do_each_pid_task(tty->session, PIDTYPE_SID, p) {
24ec839c 1011 spin_lock_irq(&p->sighand->siglock);
1da177e4
LT
1012 if (p->signal->tty == tty)
1013 p->signal->tty = NULL;
24ec839c
PZ
1014 if (!p->signal->leader) {
1015 spin_unlock_irq(&p->sighand->siglock);
1da177e4 1016 continue;
24ec839c
PZ
1017 }
1018 __group_send_sig_info(SIGHUP, SEND_SIG_PRIV, p);
1019 __group_send_sig_info(SIGCONT, SEND_SIG_PRIV, p);
ab521dc0 1020 put_pid(p->signal->tty_old_pgrp); /* A noop */
47f86834 1021 spin_lock_irqsave(&tty->ctrl_lock, flags);
ab521dc0
EB
1022 if (tty->pgrp)
1023 p->signal->tty_old_pgrp = get_pid(tty->pgrp);
47f86834 1024 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
24ec839c 1025 spin_unlock_irq(&p->sighand->siglock);
ab521dc0 1026 } while_each_pid_task(tty->session, PIDTYPE_SID, p);
1da177e4
LT
1027 }
1028 read_unlock(&tasklist_lock);
1029
47f86834 1030 spin_lock_irqsave(&tty->ctrl_lock, flags);
1da177e4 1031 tty->flags = 0;
d9c1e9a8
EB
1032 put_pid(tty->session);
1033 put_pid(tty->pgrp);
ab521dc0
EB
1034 tty->session = NULL;
1035 tty->pgrp = NULL;
1da177e4 1036 tty->ctrl_status = 0;
47f86834
AC
1037 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
1038
1da177e4 1039 /*
37bdfb07
AC
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.
1da177e4
LT
1044 */
1045 if (cons_filp) {
f34d7a5b 1046 if (tty->ops->close)
1da177e4 1047 for (n = 0; n < closecount; n++)
f34d7a5b
AC
1048 tty->ops->close(tty, cons_filp);
1049 } else if (tty->ops->hangup)
1050 (tty->ops->hangup)(tty);
37bdfb07
AC
1051 /*
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.
1056 */
1da177e4
LT
1057 set_bit(TTY_HUPPED, &tty->flags);
1058 if (ld) {
1059 tty_ldisc_enable(tty);
1060 tty_ldisc_deref(ld);
1061 }
1062 unlock_kernel();
1063 if (f)
1064 fput(f);
1065}
1066
af9b897e
AC
1067/**
1068 * tty_hangup - trigger a hangup event
1069 * @tty: tty to hangup
1070 *
1071 * A carrier loss (virtual or otherwise) has occurred on this like
1072 * schedule a hangup sequence to run after this event.
1073 */
1074
37bdfb07 1075void tty_hangup(struct tty_struct *tty)
1da177e4
LT
1076{
1077#ifdef TTY_DEBUG_HANGUP
1078 char buf[64];
1da177e4
LT
1079 printk(KERN_DEBUG "%s hangup...\n", tty_name(tty, buf));
1080#endif
1081 schedule_work(&tty->hangup_work);
1082}
1083
1084EXPORT_SYMBOL(tty_hangup);
1085
af9b897e
AC
1086/**
1087 * tty_vhangup - process vhangup
1088 * @tty: tty to hangup
1089 *
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
3a4fa0a2 1092 * is complete. That guarantee is necessary for security reasons.
af9b897e
AC
1093 */
1094
37bdfb07 1095void tty_vhangup(struct tty_struct *tty)
1da177e4
LT
1096{
1097#ifdef TTY_DEBUG_HANGUP
1098 char buf[64];
1099
1100 printk(KERN_DEBUG "%s vhangup...\n", tty_name(tty, buf));
1101#endif
65f27f38 1102 do_tty_hangup(&tty->hangup_work);
1da177e4 1103}
37bdfb07 1104
1da177e4
LT
1105EXPORT_SYMBOL(tty_vhangup);
1106
af9b897e
AC
1107/**
1108 * tty_hung_up_p - was tty hung up
1109 * @filp: file pointer of tty
1110 *
1111 * Return true if the tty has been subject to a vhangup or a carrier
1112 * loss
1113 */
1114
37bdfb07 1115int tty_hung_up_p(struct file *filp)
1da177e4
LT
1116{
1117 return (filp->f_op == &hung_up_tty_fops);
1118}
1119
1120EXPORT_SYMBOL(tty_hung_up_p);
1121
522ed776 1122/**
37bdfb07
AC
1123 * is_tty - checker whether file is a TTY
1124 * @filp: file handle that may be a tty
1125 *
1126 * Check if the file handle is a tty handle.
522ed776 1127 */
37bdfb07 1128
522ed776
MT
1129int is_tty(struct file *filp)
1130{
1131 return filp->f_op->read == tty_read
1132 || filp->f_op->read == hung_up_tty_read;
1133}
1134
ab521dc0 1135static void session_clear_tty(struct pid *session)
24ec839c
PZ
1136{
1137 struct task_struct *p;
ab521dc0 1138 do_each_pid_task(session, PIDTYPE_SID, p) {
24ec839c 1139 proc_clear_tty(p);
ab521dc0 1140 } while_each_pid_task(session, PIDTYPE_SID, p);
24ec839c
PZ
1141}
1142
af9b897e
AC
1143/**
1144 * disassociate_ctty - disconnect controlling tty
1145 * @on_exit: true if exiting so need to "hang up" the session
1da177e4 1146 *
af9b897e
AC
1147 * This function is typically called only by the session leader, when
1148 * it wants to disassociate itself from its controlling tty.
1149 *
1150 * It performs the following functions:
1da177e4
LT
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.
1155 *
af9b897e
AC
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.
1158 *
24ec839c 1159 * Locking:
af9b897e 1160 * BKL is taken for hysterical raisins
24ec839c
PZ
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
1da177e4 1165 */
af9b897e 1166
1da177e4
LT
1167void disassociate_ctty(int on_exit)
1168{
1169 struct tty_struct *tty;
ab521dc0 1170 struct pid *tty_pgrp = NULL;
1da177e4 1171
1da177e4 1172
70522e12 1173 mutex_lock(&tty_mutex);
24ec839c 1174 tty = get_current_tty();
1da177e4 1175 if (tty) {
ab521dc0 1176 tty_pgrp = get_pid(tty->pgrp);
70522e12 1177 mutex_unlock(&tty_mutex);
04f378b1 1178 lock_kernel();
24ec839c 1179 /* XXX: here we race, there is nothing protecting tty */
1da177e4
LT
1180 if (on_exit && tty->driver->type != TTY_DRIVER_TYPE_PTY)
1181 tty_vhangup(tty);
04f378b1 1182 unlock_kernel();
680a9671 1183 } else if (on_exit) {
ab521dc0 1184 struct pid *old_pgrp;
680a9671
EB
1185 spin_lock_irq(&current->sighand->siglock);
1186 old_pgrp = current->signal->tty_old_pgrp;
ab521dc0 1187 current->signal->tty_old_pgrp = NULL;
680a9671 1188 spin_unlock_irq(&current->sighand->siglock);
24ec839c 1189 if (old_pgrp) {
ab521dc0
EB
1190 kill_pgrp(old_pgrp, SIGHUP, on_exit);
1191 kill_pgrp(old_pgrp, SIGCONT, on_exit);
1192 put_pid(old_pgrp);
1da177e4 1193 }
70522e12 1194 mutex_unlock(&tty_mutex);
1da177e4
LT
1195 return;
1196 }
ab521dc0
EB
1197 if (tty_pgrp) {
1198 kill_pgrp(tty_pgrp, SIGHUP, on_exit);
1da177e4 1199 if (!on_exit)
ab521dc0
EB
1200 kill_pgrp(tty_pgrp, SIGCONT, on_exit);
1201 put_pid(tty_pgrp);
1da177e4
LT
1202 }
1203
24ec839c 1204 spin_lock_irq(&current->sighand->siglock);
2a65f1d9 1205 put_pid(current->signal->tty_old_pgrp);
23cac8de 1206 current->signal->tty_old_pgrp = NULL;
24ec839c
PZ
1207 spin_unlock_irq(&current->sighand->siglock);
1208
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) {
47f86834
AC
1213 unsigned long flags;
1214 spin_lock_irqsave(&tty->ctrl_lock, flags);
ab521dc0
EB
1215 put_pid(tty->session);
1216 put_pid(tty->pgrp);
1217 tty->session = NULL;
1218 tty->pgrp = NULL;
47f86834 1219 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
24ec839c
PZ
1220 } else {
1221#ifdef TTY_DEBUG_HANGUP
1222 printk(KERN_DEBUG "error attempted to write to tty [0x%p]"
1223 " = NULL", tty);
1224#endif
1225 }
1226 mutex_unlock(&tty_mutex);
1da177e4
LT
1227
1228 /* Now clear signal->tty under the lock */
1229 read_lock(&tasklist_lock);
ab521dc0 1230 session_clear_tty(task_session(current));
1da177e4 1231 read_unlock(&tasklist_lock);
1da177e4
LT
1232}
1233
98a27ba4
EB
1234/**
1235 *
1236 * no_tty - Ensure the current process does not have a controlling tty
1237 */
1238void no_tty(void)
1239{
1240 struct task_struct *tsk = current;
04f378b1 1241 lock_kernel();
98a27ba4
EB
1242 if (tsk->signal->leader)
1243 disassociate_ctty(0);
04f378b1 1244 unlock_kernel();
98a27ba4
EB
1245 proc_clear_tty(tsk);
1246}
1247
af9b897e
AC
1248
1249/**
beb7dd86 1250 * stop_tty - propagate flow control
af9b897e
AC
1251 * @tty: tty to stop
1252 *
1253 * Perform flow control to the driver. For PTY/TTY pairs we
beb7dd86 1254 * must also propagate the TIOCKPKT status. May be called
af9b897e
AC
1255 * on an already stopped device and will not re-call the driver
1256 * method.
1257 *
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.
1262 *
1263 * Locking:
04f378b1 1264 * Uses the tty control lock internally
af9b897e
AC
1265 */
1266
1da177e4
LT
1267void stop_tty(struct tty_struct *tty)
1268{
04f378b1
AC
1269 unsigned long flags;
1270 spin_lock_irqsave(&tty->ctrl_lock, flags);
1271 if (tty->stopped) {
1272 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
1da177e4 1273 return;
04f378b1 1274 }
1da177e4
LT
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);
1280 }
04f378b1 1281 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
f34d7a5b
AC
1282 if (tty->ops->stop)
1283 (tty->ops->stop)(tty);
1da177e4
LT
1284}
1285
1286EXPORT_SYMBOL(stop_tty);
1287
af9b897e 1288/**
beb7dd86 1289 * start_tty - propagate flow control
af9b897e
AC
1290 * @tty: tty to start
1291 *
1292 * Start a tty that has been stopped if at all possible. Perform
3a4fa0a2 1293 * any necessary wakeups and propagate the TIOCPKT status. If this
af9b897e
AC
1294 * is the tty was previous stopped and is being started then the
1295 * driver start method is invoked and the line discipline woken.
1296 *
1297 * Locking:
04f378b1 1298 * ctrl_lock
af9b897e
AC
1299 */
1300
1da177e4
LT
1301void start_tty(struct tty_struct *tty)
1302{
04f378b1
AC
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);
1da177e4 1307 return;
04f378b1 1308 }
1da177e4
LT
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);
1314 }
04f378b1 1315 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
f34d7a5b
AC
1316 if (tty->ops->start)
1317 (tty->ops->start)(tty);
1da177e4
LT
1318 /* If we have a running line discipline it may need kicking */
1319 tty_wakeup(tty);
1da177e4
LT
1320}
1321
1322EXPORT_SYMBOL(start_tty);
1323
af9b897e
AC
1324/**
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
1330 *
1331 * Perform the read system call function on this terminal device. Checks
1332 * for hung up devices before calling the line discipline method.
1333 *
1334 * Locking:
47f86834
AC
1335 * Locks the line discipline internally while needed. Multiple
1336 * read calls may be outstanding in parallel.
af9b897e
AC
1337 */
1338
37bdfb07 1339static ssize_t tty_read(struct file *file, char __user *buf, size_t count,
1da177e4
LT
1340 loff_t *ppos)
1341{
1342 int i;
37bdfb07 1343 struct tty_struct *tty;
1da177e4
LT
1344 struct inode *inode;
1345 struct tty_ldisc *ld;
1346
1347 tty = (struct tty_struct *)file->private_data;
a7113a96 1348 inode = file->f_path.dentry->d_inode;
1da177e4
LT
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;
1353
1354 /* We want to wait for the line discipline to sort out in this
1355 situation */
1356 ld = tty_ldisc_ref_wait(tty);
a352def2
AC
1357 if (ld->ops->read)
1358 i = (ld->ops->read)(tty, file, buf, count);
1da177e4
LT
1359 else
1360 i = -EIO;
1361 tty_ldisc_deref(ld);
1da177e4
LT
1362 if (i > 0)
1363 inode->i_atime = current_fs_time(inode->i_sb);
1364 return i;
1365}
1366
9c1729db
AC
1367void tty_write_unlock(struct tty_struct *tty)
1368{
1369 mutex_unlock(&tty->atomic_write_lock);
1370 wake_up_interruptible(&tty->write_wait);
1371}
1372
1373int tty_write_lock(struct tty_struct *tty, int ndelay)
1374{
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;
1380 }
1381 return 0;
1382}
1383
1da177e4
LT
1384/*
1385 * Split writes up in sane blocksizes to avoid
1386 * denial-of-service type attacks
1387 */
1388static 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)
1394{
9c1729db 1395 ssize_t ret, written = 0;
1da177e4 1396 unsigned int chunk;
37bdfb07 1397
9c1729db
AC
1398 ret = tty_write_lock(tty, file->f_flags & O_NDELAY);
1399 if (ret < 0)
1400 return ret;
1da177e4
LT
1401
1402 /*
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.
1406 *
1407 * But if TTY_NO_WRITE_SPLIT is set, we should use a
1408 * big chunk-size..
1409 *
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.
af9b897e
AC
1414 *
1415 * FIXME: This can probably go away now except that 64K chunks
1416 * are too likely to fail unless switched to vmalloc...
1da177e4
LT
1417 */
1418 chunk = 2048;
1419 if (test_bit(TTY_NO_WRITE_SPLIT, &tty->flags))
1420 chunk = 65536;
1421 if (count < chunk)
1422 chunk = count;
1423
70522e12 1424 /* write_buf/write_cnt is protected by the atomic_write_lock mutex */
1da177e4
LT
1425 if (tty->write_cnt < chunk) {
1426 unsigned char *buf;
1427
1428 if (chunk < 1024)
1429 chunk = 1024;
1430
1431 buf = kmalloc(chunk, GFP_KERNEL);
1432 if (!buf) {
9c1729db
AC
1433 ret = -ENOMEM;
1434 goto out;
1da177e4
LT
1435 }
1436 kfree(tty->write_buf);
1437 tty->write_cnt = chunk;
1438 tty->write_buf = buf;
1439 }
1440
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;
1da177e4 1449 ret = write(tty, file, tty->write_buf, size);
1da177e4
LT
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();
1461 }
1462 if (written) {
a7113a96 1463 struct inode *inode = file->f_path.dentry->d_inode;
1da177e4
LT
1464 inode->i_mtime = current_fs_time(inode->i_sb);
1465 ret = written;
1466 }
9c1729db
AC
1467out:
1468 tty_write_unlock(tty);
1da177e4
LT
1469 return ret;
1470}
1471
1472
af9b897e
AC
1473/**
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
1479 *
1480 * Write data to a tty device via the line discipline.
1481 *
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.
1489 */
1490
37bdfb07
AC
1491static ssize_t tty_write(struct file *file, const char __user *buf,
1492 size_t count, loff_t *ppos)
1da177e4 1493{
37bdfb07 1494 struct tty_struct *tty;
a7113a96 1495 struct inode *inode = file->f_path.dentry->d_inode;
1da177e4
LT
1496 ssize_t ret;
1497 struct tty_ldisc *ld;
37bdfb07 1498
1da177e4
LT
1499 tty = (struct tty_struct *)file->private_data;
1500 if (tty_paranoia_check(tty, inode, "tty_write"))
1501 return -EIO;
f34d7a5b 1502 if (!tty || !tty->ops->write ||
37bdfb07
AC
1503 (test_bit(TTY_IO_ERROR, &tty->flags)))
1504 return -EIO;
f34d7a5b
AC
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);
37bdfb07 1509 ld = tty_ldisc_ref_wait(tty);
a352def2 1510 if (!ld->ops->write)
1da177e4
LT
1511 ret = -EIO;
1512 else
a352def2 1513 ret = do_tty_write(ld->ops->write, tty, file, buf, count);
1da177e4
LT
1514 tty_ldisc_deref(ld);
1515 return ret;
1516}
1517
37bdfb07
AC
1518ssize_t redirected_tty_write(struct file *file, const char __user *buf,
1519 size_t count, loff_t *ppos)
1da177e4
LT
1520{
1521 struct file *p = NULL;
1522
1523 spin_lock(&redirect_lock);
1524 if (redirect) {
1525 get_file(redirect);
1526 p = redirect;
1527 }
1528 spin_unlock(&redirect_lock);
1529
1530 if (p) {
1531 ssize_t res;
1532 res = vfs_write(p, buf, count, &p->f_pos);
1533 fput(p);
1534 return res;
1535 }
1da177e4
LT
1536 return tty_write(file, buf, count, ppos);
1537}
1538
6f67048c
AC
1539void tty_port_init(struct tty_port *port)
1540{
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);
44b7d1b3
AC
1545 port->close_delay = (50 * HZ) / 100;
1546 port->closing_wait = (3000 * HZ) / 100;
6f67048c
AC
1547}
1548EXPORT_SYMBOL(tty_port_init);
1549
1550int tty_port_alloc_xmit_buf(struct tty_port *port)
1551{
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;
1560}
1561EXPORT_SYMBOL(tty_port_alloc_xmit_buf);
1562
1563void tty_port_free_xmit_buf(struct tty_port *port)
1564{
1565 mutex_lock(&port->mutex);
1566 if (port->xmit_buf != NULL) {
1567 free_page((unsigned long)port->xmit_buf);
1568 port->xmit_buf = NULL;
1569 }
1570 mutex_unlock(&port->mutex);
1571}
1572EXPORT_SYMBOL(tty_port_free_xmit_buf);
1573
1574
1da177e4
LT
1575static char ptychar[] = "pqrstuvwxyzabcde";
1576
af9b897e
AC
1577/**
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
1582 *
1583 * Generate a name from a driver reference and write it to the output
1584 * buffer.
1585 *
1586 * Locking: None
1587 */
1588static void pty_line_name(struct tty_driver *driver, int index, char *p)
1da177e4
LT
1589{
1590 int i = index + driver->name_base;
1591 /* ->name is initialized to "ttyp", but "tty" is expected */
1592 sprintf(p, "%s%c%x",
37bdfb07
AC
1593 driver->subtype == PTY_TYPE_SLAVE ? "tty" : driver->name,
1594 ptychar[i >> 4 & 0xf], i & 0xf);
1da177e4
LT
1595}
1596
af9b897e
AC
1597/**
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
1602 *
1603 * Generate a name from a driver reference and write it to the output
1604 * buffer.
1605 *
1606 * Locking: None
1607 */
1608static void tty_line_name(struct tty_driver *driver, int index, char *p)
1da177e4
LT
1609{
1610 sprintf(p, "%s%d", driver->name, index + driver->name_base);
1611}
1612
af9b897e
AC
1613/**
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
1618 *
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.
1622 *
1623 * Locking:
1624 * The function is called under the tty_mutex, which
1625 * protects us from the tty struct or driver itself going away.
1626 *
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.
1630 *
1da177e4 1631 * WSH 06/09/97: Rewritten to remove races and properly clean up after a
70522e12
IM
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
1da177e4
LT
1634 * relaxed for the (most common) case of reopening a tty.
1635 */
af9b897e 1636
1da177e4
LT
1637static int init_dev(struct tty_driver *driver, int idx,
1638 struct tty_struct **ret_tty)
1639{
1640 struct tty_struct *tty, *o_tty;
edc6afc5
AC
1641 struct ktermios *tp, **tp_loc, *o_tp, **o_tp_loc;
1642 struct ktermios *ltp, **ltp_loc, *o_ltp, **o_ltp_loc;
af9b897e 1643 int retval = 0;
1da177e4
LT
1644
1645 /* check whether we're reopening an existing tty */
1646 if (driver->flags & TTY_DRIVER_DEVPTS_MEM) {
1647 tty = devpts_get_tty(idx);
5a39e8c6
ASRF
1648 /*
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.
1652 */
1653 if (!tty && driver->subtype == PTY_TYPE_SLAVE) {
1654 retval = -EIO;
1655 goto end_init;
1656 }
1657 /*
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
1661 */
1da177e4
LT
1662 if (tty && driver->subtype == PTY_TYPE_MASTER)
1663 tty = tty->link;
1664 } else {
1665 tty = driver->ttys[idx];
1666 }
1667 if (tty) goto fast_track;
1668
1669 /*
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
37bdfb07 1673 * and the allocated memory released. (Except that the termios
1da177e4
LT
1674 * and locked termios may be retained.)
1675 */
1676
1677 if (!try_module_get(driver->owner)) {
1678 retval = -ENODEV;
1679 goto end_init;
1680 }
1681
1682 o_tty = NULL;
1683 tp = o_tp = NULL;
1684 ltp = o_ltp = NULL;
1685
1686 tty = alloc_tty_struct();
37bdfb07 1687 if (!tty)
1da177e4
LT
1688 goto fail_no_mem;
1689 initialize_tty_struct(tty);
1690 tty->driver = driver;
f34d7a5b 1691 tty->ops = driver->ops;
1da177e4
LT
1692 tty->index = idx;
1693 tty_line_name(driver, idx, tty->name);
1694
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];
1701 }
1702
1703 if (!*tp_loc) {
abcb1ff3 1704 tp = kmalloc(sizeof(struct ktermios), GFP_KERNEL);
1da177e4
LT
1705 if (!tp)
1706 goto free_mem_out;
1707 *tp = driver->init_termios;
1708 }
1709
1710 if (!*ltp_loc) {
506eb99a 1711 ltp = kzalloc(sizeof(struct ktermios), GFP_KERNEL);
1da177e4
LT
1712 if (!ltp)
1713 goto free_mem_out;
1da177e4
LT
1714 }
1715
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;
f34d7a5b 1722 o_tty->ops = driver->ops;
1da177e4
LT
1723 o_tty->index = idx;
1724 tty_line_name(driver->other, idx, o_tty->name);
1725
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];
1732 }
1733
1734 if (!*o_tp_loc) {
abcb1ff3 1735 o_tp = kmalloc(sizeof(struct ktermios), GFP_KERNEL);
1da177e4
LT
1736 if (!o_tp)
1737 goto free_mem_out;
1738 *o_tp = driver->other->init_termios;
1739 }
1740
1741 if (!*o_ltp_loc) {
506eb99a 1742 o_ltp = kzalloc(sizeof(struct ktermios), GFP_KERNEL);
1da177e4
LT
1743 if (!o_ltp)
1744 goto free_mem_out;
1da177e4
LT
1745 }
1746
1747 /*
1748 * Everything allocated ... set up the o_tty structure.
1749 */
37bdfb07 1750 if (!(driver->other->flags & TTY_DRIVER_DEVPTS_MEM))
1da177e4 1751 driver->other->ttys[idx] = o_tty;
1da177e4
LT
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++;
1761
1762 /* Establish the links in both directions */
1763 tty->link = o_tty;
1764 o_tty->link = tty;
1765 }
1766
37bdfb07 1767 /*
1da177e4 1768 * All structures have been allocated, so now we install them.
d5698c28 1769 * Failures after this point use release_tty to clean up, so
1da177e4
LT
1770 * there's no need to null out the local pointers.
1771 */
37bdfb07 1772 if (!(driver->flags & TTY_DRIVER_DEVPTS_MEM))
1da177e4 1773 driver->ttys[idx] = tty;
37bdfb07 1774
1da177e4
LT
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;
edc6afc5
AC
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);
1da177e4
LT
1784 driver->refcount++;
1785 tty->count++;
1786
37bdfb07 1787 /*
1da177e4 1788 * Structures all installed ... call the ldisc open routines.
d5698c28
CH
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.
1da177e4
LT
1791 */
1792
01e1abb2
AC
1793 retval = tty_ldisc_setup(tty, o_tty);
1794
1795 if (retval)
1796 goto release_mem_out;
1797 goto success;
1da177e4
LT
1798
1799 /*
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.
1804 */
1805fast_track:
1806 if (test_bit(TTY_CLOSING, &tty->flags)) {
1807 retval = -EIO;
1808 goto end_init;
1809 }
1810 if (driver->type == TTY_DRIVER_TYPE_PTY &&
1811 driver->subtype == PTY_TYPE_MASTER) {
1812 /*
37bdfb07 1813 * special case for PTY masters: only one open permitted,
1da177e4
LT
1814 * and the slave side open count is incremented as well.
1815 */
1816 if (tty->count) {
1817 retval = -EIO;
1818 goto end_init;
1819 }
1820 tty->link->count++;
1821 }
1822 tty->count++;
1823 tty->driver = driver; /* N.B. why do this every time?? */
1824
1825 /* FIXME */
37bdfb07 1826 if (!test_bit(TTY_LDISC, &tty->flags))
1da177e4
LT
1827 printk(KERN_ERR "init_dev but no ldisc\n");
1828success:
1829 *ret_tty = tty;
37bdfb07 1830
70522e12 1831 /* All paths come through here to release the mutex */
1da177e4
LT
1832end_init:
1833 return retval;
1834
1835 /* Release locally allocated memory ... nothing placed in slots */
1836free_mem_out:
735d5661 1837 kfree(o_tp);
1da177e4
LT
1838 if (o_tty)
1839 free_tty_struct(o_tty);
735d5661
JJ
1840 kfree(ltp);
1841 kfree(tp);
1da177e4
LT
1842 free_tty_struct(tty);
1843
1844fail_no_mem:
1845 module_put(driver->owner);
1846 retval = -ENOMEM;
1847 goto end_init;
1848
d5698c28 1849 /* call the tty release_tty routine to clean out this slot */
1da177e4 1850release_mem_out:
4050914f
AM
1851 if (printk_ratelimit())
1852 printk(KERN_INFO "init_dev: ldisc open failed, "
1853 "clearing slot %d\n", idx);
d5698c28 1854 release_tty(tty, idx);
1da177e4
LT
1855 goto end_init;
1856}
1857
af9b897e 1858/**
d5698c28 1859 * release_one_tty - release tty structure memory
af9b897e
AC
1860 *
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.
1864 *
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 ??
1da177e4 1870 */
d5698c28 1871static void release_one_tty(struct tty_struct *tty, int idx)
1da177e4 1872{
1da177e4 1873 int devpts = tty->driver->flags & TTY_DRIVER_DEVPTS_MEM;
d5698c28 1874 struct ktermios *tp;
1da177e4
LT
1875
1876 if (!devpts)
1877 tty->driver->ttys[idx] = NULL;
d5698c28 1878
1da177e4
LT
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);
1884
1885 tp = tty->termios_locked;
1886 if (!devpts)
1887 tty->driver->termios_locked[idx] = NULL;
1888 kfree(tp);
1889 }
1890
d5698c28 1891
1da177e4
LT
1892 tty->magic = 0;
1893 tty->driver->refcount--;
d5698c28 1894
1da177e4
LT
1895 file_list_lock();
1896 list_del_init(&tty->tty_files);
1897 file_list_unlock();
d5698c28 1898
1da177e4
LT
1899 free_tty_struct(tty);
1900}
1901
d5698c28
CH
1902/**
1903 * release_tty - release tty structure memory
1904 *
1905 * Release both @tty and a possible linked partner (think pty pair),
1906 * and decrement the refcount of the backing module.
1907 *
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 ??
1913 */
1914static void release_tty(struct tty_struct *tty, int idx)
1915{
1916 struct tty_driver *driver = tty->driver;
1917
1918 if (tty->link)
1919 release_one_tty(tty->link, idx);
1920 release_one_tty(tty, idx);
1921 module_put(driver->owner);
1922}
1923
1da177e4
LT
1924/*
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.
1928 *
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.
1931 */
37bdfb07 1932static void release_dev(struct file *filp)
1da177e4
LT
1933{
1934 struct tty_struct *tty, *o_tty;
1935 int pty_master, tty_closing, o_tty_closing, do_sleep;
14a6283e 1936 int devpts;
1da177e4
LT
1937 int idx;
1938 char buf[64];
37bdfb07 1939
1da177e4 1940 tty = (struct tty_struct *)filp->private_data;
37bdfb07
AC
1941 if (tty_paranoia_check(tty, filp->f_path.dentry->d_inode,
1942 "release_dev"))
1da177e4
LT
1943 return;
1944
1945 check_tty_count(tty, "release_dev");
1946
1947 tty_fasync(-1, filp, 0);
1948
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;
1da177e4
LT
1953 o_tty = tty->link;
1954
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;
1960 }
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;
1966 }
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;
1972 }
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;
1978 }
1979 }
1980#endif
1981
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
1986
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;
1995 }
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;
2001 }
37bdfb07 2002 if (o_tty->termios_locked !=
1da177e4
LT
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;
2008 }
2009 if (o_tty->link != tty) {
2010 printk(KERN_DEBUG "release_dev: bad pty pointers\n");
2011 return;
2012 }
2013 }
2014#endif
f34d7a5b
AC
2015 if (tty->ops->close)
2016 tty->ops->close(tty, filp);
1da177e4
LT
2017
2018 /*
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.
2024 *
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.
2030 *
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.
2034 */
2035 while (1) {
2036 /* Guard against races with tty->count changes elsewhere and
2037 opens on /dev/tty */
37bdfb07 2038
70522e12 2039 mutex_lock(&tty_mutex);
1da177e4
LT
2040 tty_closing = tty->count <= 1;
2041 o_tty_closing = o_tty &&
2042 (o_tty->count <= (pty_master ? 1 : 0));
1da177e4
LT
2043 do_sleep = 0;
2044
2045 if (tty_closing) {
2046 if (waitqueue_active(&tty->read_wait)) {
2047 wake_up(&tty->read_wait);
2048 do_sleep++;
2049 }
2050 if (waitqueue_active(&tty->write_wait)) {
2051 wake_up(&tty->write_wait);
2052 do_sleep++;
2053 }
2054 }
2055 if (o_tty_closing) {
2056 if (waitqueue_active(&o_tty->read_wait)) {
2057 wake_up(&o_tty->read_wait);
2058 do_sleep++;
2059 }
2060 if (waitqueue_active(&o_tty->write_wait)) {
2061 wake_up(&o_tty->write_wait);
2062 do_sleep++;
2063 }
2064 }
2065 if (!do_sleep)
2066 break;
2067
2068 printk(KERN_WARNING "release_dev: %s: read/write wait queue "
2069 "active!\n", tty_name(tty, buf));
70522e12 2070 mutex_unlock(&tty_mutex);
1da177e4 2071 schedule();
37bdfb07 2072 }
1da177e4
LT
2073
2074 /*
37bdfb07
AC
2075 * The closing flags are now consistent with the open counts on
2076 * both sides, and we've completed the last operation that could
1da177e4
LT
2077 * block, so it's safe to proceed with closing.
2078 */
1da177e4
LT
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;
2085 }
2086 }
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;
2091 }
37bdfb07 2092
1da177e4
LT
2093 /*
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.
2101 */
2102 file_kill(filp);
2103 filp->private_data = NULL;
2104
2105 /*
2106 * Perform some housekeeping before deciding whether to return.
2107 *
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.
2111 */
37bdfb07 2112 if (tty_closing)
1da177e4 2113 set_bit(TTY_CLOSING, &tty->flags);
37bdfb07 2114 if (o_tty_closing)
1da177e4
LT
2115 set_bit(TTY_CLOSING, &o_tty->flags);
2116
2117 /*
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.
2121 */
2122 if (tty_closing || o_tty_closing) {
1da177e4 2123 read_lock(&tasklist_lock);
24ec839c 2124 session_clear_tty(tty->session);
1da177e4 2125 if (o_tty)
24ec839c 2126 session_clear_tty(o_tty->session);
1da177e4
LT
2127 read_unlock(&tasklist_lock);
2128 }
2129
70522e12 2130 mutex_unlock(&tty_mutex);
da965822 2131
1da177e4
LT
2132 /* check whether both sides are closing ... */
2133 if (!tty_closing || (o_tty && !o_tty_closing))
2134 return;
37bdfb07 2135
1da177e4
LT
2136#ifdef TTY_DEBUG_HANGUP
2137 printk(KERN_DEBUG "freeing tty structure...");
2138#endif
2139 /*
01e1abb2 2140 * Ask the line discipline code to release its structures
1da177e4 2141 */
01e1abb2 2142 tty_ldisc_release(tty, o_tty);
1da177e4 2143 /*
d5698c28 2144 * The release_tty function takes care of the details of clearing
1da177e4
LT
2145 * the slots and preserving the termios structure.
2146 */
d5698c28 2147 release_tty(tty, idx);
1da177e4 2148
1da177e4 2149 /* Make this pty number available for reallocation */
718a9163
SB
2150 if (devpts)
2151 devpts_kill_index(idx);
1da177e4
LT
2152}
2153
af9b897e
AC
2154/**
2155 * tty_open - open a tty device
2156 * @inode: inode of device file
2157 * @filp: file pointer to tty
1da177e4 2158 *
af9b897e
AC
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.
1da177e4 2162 *
af9b897e
AC
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)
2166 *
2167 * The termios state of a pty is reset on first open so that
2168 * settings don't persist across reuse.
2169 *
24ec839c
PZ
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
1da177e4 2173 */
af9b897e 2174
39d95b9d 2175static int __tty_open(struct inode *inode, struct file *filp)
1da177e4
LT
2176{
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;
2183
2184 nonseekable_open(inode, filp);
37bdfb07 2185
1da177e4
LT
2186retry_open:
2187 noctty = filp->f_flags & O_NOCTTY;
2188 index = -1;
2189 retval = 0;
37bdfb07 2190
70522e12 2191 mutex_lock(&tty_mutex);
1da177e4 2192
37bdfb07 2193 if (device == MKDEV(TTYAUX_MAJOR, 0)) {
24ec839c
PZ
2194 tty = get_current_tty();
2195 if (!tty) {
70522e12 2196 mutex_unlock(&tty_mutex);
1da177e4
LT
2197 return -ENXIO;
2198 }
24ec839c
PZ
2199 driver = tty->driver;
2200 index = tty->index;
1da177e4
LT
2201 filp->f_flags |= O_NONBLOCK; /* Don't let /dev/tty block */
2202 /* noctty = 1; */
2203 goto got_driver;
2204 }
2205#ifdef CONFIG_VT
37bdfb07 2206 if (device == MKDEV(TTY_MAJOR, 0)) {
1da177e4
LT
2207 extern struct tty_driver *console_driver;
2208 driver = console_driver;
2209 index = fg_console;
2210 noctty = 1;
2211 goto got_driver;
2212 }
2213#endif
37bdfb07 2214 if (device == MKDEV(TTYAUX_MAJOR, 1)) {
1da177e4
LT
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;
2221 }
70522e12 2222 mutex_unlock(&tty_mutex);
1da177e4
LT
2223 return -ENODEV;
2224 }
2225
2226 driver = get_tty_driver(device, &index);
2227 if (!driver) {
70522e12 2228 mutex_unlock(&tty_mutex);
1da177e4
LT
2229 return -ENODEV;
2230 }
2231got_driver:
2232 retval = init_dev(driver, index, &tty);
70522e12 2233 mutex_unlock(&tty_mutex);
1da177e4
LT
2234 if (retval)
2235 return retval;
2236
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) {
f34d7a5b
AC
2247 if (tty->ops->open)
2248 retval = tty->ops->open(tty, filp);
1da177e4
LT
2249 else
2250 retval = -ENODEV;
2251 }
2252 filp->f_flags = saved_flags;
2253
37bdfb07
AC
2254 if (!retval && test_bit(TTY_EXCLUSIVE, &tty->flags) &&
2255 !capable(CAP_SYS_ADMIN))
1da177e4
LT
2256 retval = -EBUSY;
2257
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();
2269 /*
2270 * Need to reset f_op in case a hangup happened.
2271 */
2272 if (filp->f_op == &hung_up_tty_fops)
2273 filp->f_op = &tty_fops;
2274 goto retry_open;
2275 }
24ec839c
PZ
2276
2277 mutex_lock(&tty_mutex);
2278 spin_lock_irq(&current->sighand->siglock);
1da177e4
LT
2279 if (!noctty &&
2280 current->signal->leader &&
2281 !current->signal->tty &&
ab521dc0 2282 tty->session == NULL)
2a65f1d9 2283 __proc_set_tty(current, tty);
24ec839c
PZ
2284 spin_unlock_irq(&current->sighand->siglock);
2285 mutex_unlock(&tty_mutex);
1da177e4
LT
2286 return 0;
2287}
2288
39d95b9d
JC
2289/* BKL pushdown: scary code avoidance wrapper */
2290static int tty_open(struct inode *inode, struct file *filp)
2291{
2292 int ret;
2293
2294 lock_kernel();
2295 ret = __tty_open(inode, filp);
2296 unlock_kernel();
2297 return ret;
2298}
2299
2300
2301
1da177e4 2302#ifdef CONFIG_UNIX98_PTYS
af9b897e
AC
2303/**
2304 * ptmx_open - open a unix 98 pty master
2305 * @inode: inode of device file
2306 * @filp: file pointer to tty
2307 *
2308 * Allocate a unix98 pty master device from the ptmx driver.
2309 *
2310 * Locking: tty_mutex protects theinit_dev work. tty->count should
37bdfb07 2311 * protect the rest.
af9b897e
AC
2312 * allocated_ptys_lock handles the list of free pty numbers
2313 */
2314
39d95b9d 2315static int __ptmx_open(struct inode *inode, struct file *filp)
1da177e4
LT
2316{
2317 struct tty_struct *tty;
2318 int retval;
2319 int index;
1da177e4
LT
2320
2321 nonseekable_open(inode, filp);
2322
2323 /* find a device that is not in use. */
718a9163
SB
2324 index = devpts_new_index();
2325 if (index < 0)
2326 return index;
1da177e4 2327
70522e12 2328 mutex_lock(&tty_mutex);
1da177e4 2329 retval = init_dev(ptm_driver, index, &tty);
70522e12 2330 mutex_unlock(&tty_mutex);
37bdfb07 2331
1da177e4
LT
2332 if (retval)
2333 goto out;
2334
2335 set_bit(TTY_PTY_LOCK, &tty->flags); /* LOCK THE SLAVE */
2336 filp->private_data = tty;
2337 file_move(filp, &tty->tty_files);
2338
4f8f9d66
SB
2339 retval = devpts_pty_new(tty->link);
2340 if (retval)
1da177e4
LT
2341 goto out1;
2342
86a96538 2343 check_tty_count(tty, "ptmx_open");
f34d7a5b 2344 retval = ptm_driver->ops->open(tty, filp);
41126226 2345 if (!retval)
1da177e4
LT
2346 return 0;
2347out1:
2348 release_dev(filp);
9453a5ad 2349 return retval;
1da177e4 2350out:
718a9163 2351 devpts_kill_index(index);
1da177e4
LT
2352 return retval;
2353}
39d95b9d
JC
2354
2355static int ptmx_open(struct inode *inode, struct file *filp)
2356{
2357 int ret;
2358
2359 lock_kernel();
2360 ret = __ptmx_open(inode, filp);
2361 unlock_kernel();
2362 return ret;
2363}
1da177e4
LT
2364#endif
2365
af9b897e
AC
2366/**
2367 * tty_release - vfs callback for close
2368 * @inode: inode of tty
2369 * @filp: file pointer for handle to tty
2370 *
2371 * Called the last time each file handle is closed that references
2372 * this tty. There may however be several such references.
2373 *
2374 * Locking:
2375 * Takes bkl. See release_dev
2376 */
2377
37bdfb07 2378static int tty_release(struct inode *inode, struct file *filp)
1da177e4
LT
2379{
2380 lock_kernel();
2381 release_dev(filp);
2382 unlock_kernel();
2383 return 0;
2384}
2385
af9b897e
AC
2386/**
2387 * tty_poll - check tty status
2388 * @filp: file being polled
2389 * @wait: poll wait structures to update
2390 *
2391 * Call the line discipline polling method to obtain the poll
2392 * status of the device.
2393 *
2394 * Locking: locks called line discipline but ldisc poll method
2395 * may be re-entered freely by other callers.
2396 */
2397
37bdfb07 2398static unsigned int tty_poll(struct file *filp, poll_table *wait)
1da177e4 2399{
37bdfb07 2400 struct tty_struct *tty;
1da177e4
LT
2401 struct tty_ldisc *ld;
2402 int ret = 0;
2403
2404 tty = (struct tty_struct *)filp->private_data;
a7113a96 2405 if (tty_paranoia_check(tty, filp->f_path.dentry->d_inode, "tty_poll"))
1da177e4 2406 return 0;
37bdfb07 2407
1da177e4 2408 ld = tty_ldisc_ref_wait(tty);
a352def2
AC
2409 if (ld->ops->poll)
2410 ret = (ld->ops->poll)(tty, filp, wait);
1da177e4
LT
2411 tty_ldisc_deref(ld);
2412 return ret;
2413}
2414
37bdfb07 2415static int tty_fasync(int fd, struct file *filp, int on)
1da177e4 2416{
37bdfb07 2417 struct tty_struct *tty;
47f86834 2418 unsigned long flags;
5d1e3230 2419 int retval = 0;
1da177e4 2420
5d1e3230 2421 lock_kernel();
1da177e4 2422 tty = (struct tty_struct *)filp->private_data;
a7113a96 2423 if (tty_paranoia_check(tty, filp->f_path.dentry->d_inode, "tty_fasync"))
5d1e3230 2424 goto out;
37bdfb07 2425
1da177e4
LT
2426 retval = fasync_helper(fd, filp, on, &tty->fasync);
2427 if (retval <= 0)
5d1e3230 2428 goto out;
1da177e4
LT
2429
2430 if (on) {
ab521dc0
EB
2431 enum pid_type type;
2432 struct pid *pid;
1da177e4
LT
2433 if (!waitqueue_active(&tty->read_wait))
2434 tty->minimum_to_wake = 1;
47f86834 2435 spin_lock_irqsave(&tty->ctrl_lock, flags);
ab521dc0
EB
2436 if (tty->pgrp) {
2437 pid = tty->pgrp;
2438 type = PIDTYPE_PGID;
2439 } else {
2440 pid = task_pid(current);
2441 type = PIDTYPE_PID;
2442 }
47f86834 2443 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
ab521dc0 2444 retval = __f_setown(filp, pid, type, 0);
1da177e4 2445 if (retval)
5d1e3230 2446 goto out;
1da177e4
LT
2447 } else {
2448 if (!tty->fasync && !waitqueue_active(&tty->read_wait))
2449 tty->minimum_to_wake = N_TTY_BUF_SIZE;
2450 }
5d1e3230
JC
2451 retval = 0;
2452out:
2453 unlock_kernel();
2454 return retval;
1da177e4
LT
2455}
2456
af9b897e
AC
2457/**
2458 * tiocsti - fake input character
2459 * @tty: tty to fake input into
2460 * @p: pointer to character
2461 *
3a4fa0a2 2462 * Fake input to a tty device. Does the necessary locking and
af9b897e
AC
2463 * input management.
2464 *
2465 * FIXME: does not honour flow control ??
2466 *
2467 * Locking:
2468 * Called functions take tty_ldisc_lock
2469 * current->signal->tty check is safe without locks
28298232
AC
2470 *
2471 * FIXME: may race normal receive processing
af9b897e
AC
2472 */
2473
1da177e4
LT
2474static int tiocsti(struct tty_struct *tty, char __user *p)
2475{
2476 char ch, mbz = 0;
2477 struct tty_ldisc *ld;
37bdfb07 2478
1da177e4
LT
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);
a352def2 2484 ld->ops->receive_buf(tty, &ch, &mbz, 1);
1da177e4
LT
2485 tty_ldisc_deref(ld);
2486 return 0;
2487}
2488
af9b897e
AC
2489/**
2490 * tiocgwinsz - implement window query ioctl
2491 * @tty; tty
2492 * @arg: user buffer for result
2493 *
808a0d38 2494 * Copies the kernel idea of the window size into the user buffer.
af9b897e 2495 *
24ec839c 2496 * Locking: tty->termios_mutex is taken to ensure the winsize data
808a0d38 2497 * is consistent.
af9b897e
AC
2498 */
2499
37bdfb07 2500static int tiocgwinsz(struct tty_struct *tty, struct winsize __user *arg)
1da177e4 2501{
808a0d38
AC
2502 int err;
2503
5785c95b 2504 mutex_lock(&tty->termios_mutex);
808a0d38 2505 err = copy_to_user(arg, &tty->winsize, sizeof(*arg));
5785c95b 2506 mutex_unlock(&tty->termios_mutex);
808a0d38
AC
2507
2508 return err ? -EFAULT: 0;
1da177e4
LT
2509}
2510
af9b897e
AC
2511/**
2512 * tiocswinsz - implement window size set ioctl
2513 * @tty; tty
2514 * @arg: user buffer for result
2515 *
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.
2519 *
2520 * Locking:
ca9bda00
AC
2521 * Called function use the console_sem is used to ensure we do
2522 * not try and resize the console twice at once.
24ec839c
PZ
2523 * The tty->termios_mutex is used to ensure we don't double
2524 * resize and get confused. Lock order - tty->termios_mutex before
ca9bda00 2525 * console sem
af9b897e
AC
2526 */
2527
1da177e4 2528static int tiocswinsz(struct tty_struct *tty, struct tty_struct *real_tty,
37bdfb07 2529 struct winsize __user *arg)
1da177e4
LT
2530{
2531 struct winsize tmp_ws;
47f86834
AC
2532 struct pid *pgrp, *rpgrp;
2533 unsigned long flags;
1da177e4
LT
2534
2535 if (copy_from_user(&tmp_ws, arg, sizeof(*arg)))
2536 return -EFAULT;
ca9bda00 2537
5785c95b 2538 mutex_lock(&tty->termios_mutex);
1da177e4 2539 if (!memcmp(&tmp_ws, &tty->winsize, sizeof(*arg)))
ca9bda00
AC
2540 goto done;
2541
1da177e4
LT
2542#ifdef CONFIG_VT
2543 if (tty->driver->type == TTY_DRIVER_TYPE_CONSOLE) {
5785c95b
AV
2544 if (vc_lock_resize(tty->driver_data, tmp_ws.ws_col,
2545 tmp_ws.ws_row)) {
2546 mutex_unlock(&tty->termios_mutex);
37bdfb07 2547 return -ENXIO;
ca9bda00 2548 }
1da177e4
LT
2549 }
2550#endif
47f86834
AC
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);
2557
2558 if (pgrp)
2559 kill_pgrp(pgrp, SIGWINCH, 1);
2560 if (rpgrp != pgrp && rpgrp)
2561 kill_pgrp(rpgrp, SIGWINCH, 1);
2562
2563 put_pid(pgrp);
2564 put_pid(rpgrp);
2565
1da177e4
LT
2566 tty->winsize = tmp_ws;
2567 real_tty->winsize = tmp_ws;
ca9bda00 2568done:
5785c95b 2569 mutex_unlock(&tty->termios_mutex);
1da177e4
LT
2570 return 0;
2571}
2572
af9b897e
AC
2573/**
2574 * tioccons - allow admin to move logical console
2575 * @file: the file to become console
2576 *
2577 * Allow the adminstrator to move the redirected console device
2578 *
2579 * Locking: uses redirect_lock to guard the redirect information
2580 */
2581
1da177e4
LT
2582static int tioccons(struct file *file)
2583{
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;
2595 }
2596 spin_lock(&redirect_lock);
2597 if (redirect) {
2598 spin_unlock(&redirect_lock);
2599 return -EBUSY;
2600 }
2601 get_file(file);
2602 redirect = file;
2603 spin_unlock(&redirect_lock);
2604 return 0;
2605}
2606
af9b897e
AC
2607/**
2608 * fionbio - non blocking ioctl
2609 * @file: file to set blocking value
2610 * @p: user parameter
2611 *
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.
2615 *
2616 * Locking: none, the open fle handle ensures it won't go away.
2617 */
1da177e4
LT
2618
2619static int fionbio(struct file *file, int __user *p)
2620{
2621 int nonblock;
2622
2623 if (get_user(nonblock, p))
2624 return -EFAULT;
2625
04f378b1
AC
2626 /* file->f_flags is still BKL protected in the fs layer - vomit */
2627 lock_kernel();
1da177e4
LT
2628 if (nonblock)
2629 file->f_flags |= O_NONBLOCK;
2630 else
2631 file->f_flags &= ~O_NONBLOCK;
04f378b1 2632 unlock_kernel();
1da177e4
LT
2633 return 0;
2634}
2635
af9b897e
AC
2636/**
2637 * tiocsctty - set controlling tty
2638 * @tty: tty structure
2639 * @arg: user argument
2640 *
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.
2643 *
2644 * Locking:
28298232 2645 * Takes tty_mutex() to protect tty instance
24ec839c
PZ
2646 * Takes tasklist_lock internally to walk sessions
2647 * Takes ->siglock() when updating signal->tty
af9b897e
AC
2648 */
2649
1da177e4
LT
2650static int tiocsctty(struct tty_struct *tty, int arg)
2651{
24ec839c 2652 int ret = 0;
ab521dc0 2653 if (current->signal->leader && (task_session(current) == tty->session))
24ec839c
PZ
2654 return ret;
2655
2656 mutex_lock(&tty_mutex);
1da177e4
LT
2657 /*
2658 * The process must be a session leader and
2659 * not have a controlling tty already.
2660 */
24ec839c
PZ
2661 if (!current->signal->leader || current->signal->tty) {
2662 ret = -EPERM;
2663 goto unlock;
2664 }
2665
ab521dc0 2666 if (tty->session) {
1da177e4
LT
2667 /*
2668 * This tty is already the controlling
2669 * tty for another session group!
2670 */
37bdfb07 2671 if (arg == 1 && capable(CAP_SYS_ADMIN)) {
1da177e4
LT
2672 /*
2673 * Steal it away
2674 */
1da177e4 2675 read_lock(&tasklist_lock);
24ec839c 2676 session_clear_tty(tty->session);
1da177e4 2677 read_unlock(&tasklist_lock);
24ec839c
PZ
2678 } else {
2679 ret = -EPERM;
2680 goto unlock;
2681 }
1da177e4 2682 }
24ec839c
PZ
2683 proc_set_tty(current, tty);
2684unlock:
28298232 2685 mutex_unlock(&tty_mutex);
24ec839c 2686 return ret;
1da177e4
LT
2687}
2688
5d0fdf1e
AC
2689/**
2690 * tty_get_pgrp - return a ref counted pgrp pid
2691 * @tty: tty to read
2692 *
2693 * Returns a refcounted instance of the pid struct for the process
2694 * group controlling the tty.
2695 */
2696
2697struct pid *tty_get_pgrp(struct tty_struct *tty)
2698{
2699 unsigned long flags;
2700 struct pid *pgrp;
2701
2702 spin_lock_irqsave(&tty->ctrl_lock, flags);
2703 pgrp = get_pid(tty->pgrp);
2704 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
2705
2706 return pgrp;
2707}
2708EXPORT_SYMBOL_GPL(tty_get_pgrp);
2709
af9b897e
AC
2710/**
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
2715 *
2716 * Obtain the process group of the tty. If there is no process group
2717 * return an error.
2718 *
24ec839c 2719 * Locking: none. Reference to current->signal->tty is safe.
af9b897e
AC
2720 */
2721
1da177e4
LT
2722static int tiocgpgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t __user *p)
2723{
5d0fdf1e
AC
2724 struct pid *pid;
2725 int ret;
1da177e4
LT
2726 /*
2727 * (tty == real_tty) is a cheap way of
2728 * testing if the tty is NOT a master pty.
2729 */
2730 if (tty == real_tty && current->signal->tty != real_tty)
2731 return -ENOTTY;
5d0fdf1e
AC
2732 pid = tty_get_pgrp(real_tty);
2733 ret = put_user(pid_vnr(pid), p);
2734 put_pid(pid);
2735 return ret;
1da177e4
LT
2736}
2737
af9b897e
AC
2738/**
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
2743 *
2744 * Set the process group of the tty to the session passed. Only
2745 * permitted where the tty session is our session.
2746 *
47f86834 2747 * Locking: RCU, ctrl lock
af9b897e
AC
2748 */
2749
1da177e4
LT
2750static int tiocspgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t __user *p)
2751{
04a2e6a5
EB
2752 struct pid *pgrp;
2753 pid_t pgrp_nr;
1da177e4 2754 int retval = tty_check_change(real_tty);
47f86834 2755 unsigned long flags;
1da177e4
LT
2756
2757 if (retval == -EIO)
2758 return -ENOTTY;
2759 if (retval)
2760 return retval;
2761 if (!current->signal->tty ||
2762 (current->signal->tty != real_tty) ||
ab521dc0 2763 (real_tty->session != task_session(current)))
1da177e4 2764 return -ENOTTY;
04a2e6a5 2765 if (get_user(pgrp_nr, p))
1da177e4 2766 return -EFAULT;
04a2e6a5 2767 if (pgrp_nr < 0)
1da177e4 2768 return -EINVAL;
04a2e6a5 2769 rcu_read_lock();
b488893a 2770 pgrp = find_vpid(pgrp_nr);
04a2e6a5
EB
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;
47f86834 2778 spin_lock_irqsave(&tty->ctrl_lock, flags);
ab521dc0
EB
2779 put_pid(real_tty->pgrp);
2780 real_tty->pgrp = get_pid(pgrp);
47f86834 2781 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
04a2e6a5
EB
2782out_unlock:
2783 rcu_read_unlock();
2784 return retval;
1da177e4
LT
2785}
2786
af9b897e
AC
2787/**
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
2792 *
2793 * Obtain the session id of the tty. If there is no session
2794 * return an error.
2795 *
24ec839c 2796 * Locking: none. Reference to current->signal->tty is safe.
af9b897e
AC
2797 */
2798
1da177e4
LT
2799static int tiocgsid(struct tty_struct *tty, struct tty_struct *real_tty, pid_t __user *p)
2800{
2801 /*
2802 * (tty == real_tty) is a cheap way of
2803 * testing if the tty is NOT a master pty.
2804 */
2805 if (tty == real_tty && current->signal->tty != real_tty)
2806 return -ENOTTY;
ab521dc0 2807 if (!real_tty->session)
1da177e4 2808 return -ENOTTY;
b488893a 2809 return put_user(pid_vnr(real_tty->session), p);
1da177e4
LT
2810}
2811
af9b897e
AC
2812/**
2813 * tiocsetd - set line discipline
2814 * @tty: tty device
2815 * @p: pointer to user data
2816 *
2817 * Set the line discipline according to user request.
2818 *
2819 * Locking: see tty_set_ldisc, this function is just a helper
2820 */
2821
1da177e4
LT
2822static int tiocsetd(struct tty_struct *tty, int __user *p)
2823{
2824 int ldisc;
04f378b1 2825 int ret;
1da177e4
LT
2826
2827 if (get_user(ldisc, p))
2828 return -EFAULT;
04f378b1
AC
2829
2830 lock_kernel();
2831 ret = tty_set_ldisc(tty, ldisc);
2832 unlock_kernel();
2833
2834 return ret;
1da177e4
LT
2835}
2836
af9b897e
AC
2837/**
2838 * send_break - performed time break
2839 * @tty: device to break on
2840 * @duration: timeout in mS
2841 *
2842 * Perform a timed break on hardware that lacks its own driver level
2843 * timed break functionality.
2844 *
2845 * Locking:
28298232 2846 * atomic_write_lock serializes
af9b897e 2847 *
af9b897e
AC
2848 */
2849
b20f3ae5 2850static int send_break(struct tty_struct *tty, unsigned int duration)
1da177e4 2851{
9e98966c
AC
2852 int retval;
2853
2854 if (tty->ops->break_ctl == NULL)
2855 return 0;
2856
2857 if (tty->driver->flags & TTY_DRIVER_HARDWARE_BREAK)
2858 retval = tty->ops->break_ctl(tty, duration);
2859 else {
2860 /* Do the work ourselves */
2861 if (tty_write_lock(tty, 0) < 0)
2862 return -EINTR;
2863 retval = tty->ops->break_ctl(tty, -1);
2864 if (retval)
2865 goto out;
2866 if (!signal_pending(current))
2867 msleep_interruptible(duration);
2868 retval = tty->ops->break_ctl(tty, 0);
2869out:
2870 tty_write_unlock(tty);
2871 if (signal_pending(current))
2872 retval = -EINTR;
2873 }
2874 return retval;
1da177e4
LT
2875}
2876
af9b897e 2877/**
f34d7a5b 2878 * tty_tiocmget - get modem status
af9b897e
AC
2879 * @tty: tty device
2880 * @file: user file pointer
2881 * @p: pointer to result
2882 *
2883 * Obtain the modem status bits from the tty driver if the feature
2884 * is supported. Return -EINVAL if it is not available.
2885 *
2886 * Locking: none (up to the driver)
2887 */
2888
2889static int tty_tiocmget(struct tty_struct *tty, struct file *file, int __user *p)
1da177e4
LT
2890{
2891 int retval = -EINVAL;
2892
f34d7a5b
AC
2893 if (tty->ops->tiocmget) {
2894 retval = tty->ops->tiocmget(tty, file);
1da177e4
LT
2895
2896 if (retval >= 0)
2897 retval = put_user(retval, p);
2898 }
2899 return retval;
2900}
2901
af9b897e 2902/**
f34d7a5b 2903 * tty_tiocmset - set modem status
af9b897e
AC
2904 * @tty: tty device
2905 * @file: user file pointer
2906 * @cmd: command - clear bits, set bits or set all
2907 * @p: pointer to desired bits
2908 *
2909 * Set the modem status bits from the tty driver if the feature
2910 * is supported. Return -EINVAL if it is not available.
2911 *
2912 * Locking: none (up to the driver)
2913 */
2914
2915static int tty_tiocmset(struct tty_struct *tty, struct file *file, unsigned int cmd,
1da177e4
LT
2916 unsigned __user *p)
2917{
ae677517
AC
2918 int retval;
2919 unsigned int set, clear, val;
1da177e4 2920
ae677517
AC
2921 if (tty->ops->tiocmset == NULL)
2922 return -EINVAL;
1da177e4 2923
ae677517
AC
2924 retval = get_user(val, p);
2925 if (retval)
2926 return retval;
2927 set = clear = 0;
2928 switch (cmd) {
2929 case TIOCMBIS:
2930 set = val;
2931 break;
2932 case TIOCMBIC:
2933 clear = val;
2934 break;
2935 case TIOCMSET:
2936 set = val;
2937 clear = ~val;
2938 break;
2939 }
2940 set &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP;
2941 clear &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP;
2942 return tty->ops->tiocmset(tty, file, set, clear);
1da177e4
LT
2943}
2944
2945/*
2946 * Split this up, as gcc can choke on it otherwise..
2947 */
04f378b1 2948long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
1da177e4
LT
2949{
2950 struct tty_struct *tty, *real_tty;
2951 void __user *p = (void __user *)arg;
2952 int retval;
2953 struct tty_ldisc *ld;
04f378b1 2954 struct inode *inode = file->f_dentry->d_inode;
37bdfb07 2955
1da177e4
LT
2956 tty = (struct tty_struct *)file->private_data;
2957 if (tty_paranoia_check(tty, inode, "tty_ioctl"))
2958 return -EINVAL;
2959
2960 real_tty = tty;
2961 if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
2962 tty->driver->subtype == PTY_TYPE_MASTER)
2963 real_tty = tty->link;
2964
1da177e4
LT
2965
2966 /*
2967 * Factor out some common prep work
2968 */
2969 switch (cmd) {
2970 case TIOCSETD:
2971 case TIOCSBRK:
2972 case TIOCCBRK:
2973 case TCSBRK:
37bdfb07 2974 case TCSBRKP:
1da177e4
LT
2975 retval = tty_check_change(tty);
2976 if (retval)
2977 return retval;
2978 if (cmd != TIOCCBRK) {
2979 tty_wait_until_sent(tty, 0);
2980 if (signal_pending(current))
2981 return -EINTR;
2982 }
2983 break;
2984 }
2985
9e98966c
AC
2986 /*
2987 * Now do the stuff.
2988 */
1da177e4 2989 switch (cmd) {
37bdfb07
AC
2990 case TIOCSTI:
2991 return tiocsti(tty, p);
2992 case TIOCGWINSZ:
2993 return tiocgwinsz(tty, p);
2994 case TIOCSWINSZ:
2995 return tiocswinsz(tty, real_tty, p);
2996 case TIOCCONS:
2997 return real_tty != tty ? -EINVAL : tioccons(file);
2998 case FIONBIO:
2999 return fionbio(file, p);
3000 case TIOCEXCL:
3001 set_bit(TTY_EXCLUSIVE, &tty->flags);
3002 return 0;
3003 case TIOCNXCL:
3004 clear_bit(TTY_EXCLUSIVE, &tty->flags);
3005 return 0;
3006 case TIOCNOTTY:
3007 if (current->signal->tty != tty)
3008 return -ENOTTY;
3009 no_tty();
3010 return 0;
3011 case TIOCSCTTY:
3012 return tiocsctty(tty, arg);
3013 case TIOCGPGRP:
3014 return tiocgpgrp(tty, real_tty, p);
3015 case TIOCSPGRP:
3016 return tiocspgrp(tty, real_tty, p);
3017 case TIOCGSID:
3018 return tiocgsid(tty, real_tty, p);
3019 case TIOCGETD:
a352def2 3020 return put_user(tty->ldisc.ops->num, (int __user *)p);
37bdfb07
AC
3021 case TIOCSETD:
3022 return tiocsetd(tty, p);
1da177e4 3023#ifdef CONFIG_VT
37bdfb07
AC
3024 case TIOCLINUX:
3025 return tioclinux(tty, arg);
1da177e4 3026#endif
37bdfb07
AC
3027 /*
3028 * Break handling
3029 */
3030 case TIOCSBRK: /* Turn break on, unconditionally */
f34d7a5b 3031 if (tty->ops->break_ctl)
9e98966c 3032 return tty->ops->break_ctl(tty, -1);
37bdfb07 3033 return 0;
37bdfb07 3034 case TIOCCBRK: /* Turn break off, unconditionally */
f34d7a5b 3035 if (tty->ops->break_ctl)
9e98966c 3036 return tty->ops->break_ctl(tty, 0);
37bdfb07
AC
3037 return 0;
3038 case TCSBRK: /* SVID version: non-zero arg --> no break */
3039 /* non-zero arg means wait for all output data
3040 * to be sent (performed above) but don't send break.
3041 * This is used by the tcdrain() termios function.
3042 */
3043 if (!arg)
3044 return send_break(tty, 250);
3045 return 0;
3046 case TCSBRKP: /* support for POSIX tcsendbreak() */
3047 return send_break(tty, arg ? arg*100 : 250);
3048
3049 case TIOCMGET:
3050 return tty_tiocmget(tty, file, p);
3051 case TIOCMSET:
3052 case TIOCMBIC:
3053 case TIOCMBIS:
3054 return tty_tiocmset(tty, file, cmd, p);
3055 case TCFLSH:
3056 switch (arg) {
3057 case TCIFLUSH:
3058 case TCIOFLUSH:
3059 /* flush tty buffer and allow ldisc to process ioctl */
3060 tty_buffer_flush(tty);
c5c34d48 3061 break;
37bdfb07
AC
3062 }
3063 break;
1da177e4 3064 }
f34d7a5b
AC
3065 if (tty->ops->ioctl) {
3066 retval = (tty->ops->ioctl)(tty, file, cmd, arg);
1da177e4
LT
3067 if (retval != -ENOIOCTLCMD)
3068 return retval;
3069 }
3070 ld = tty_ldisc_ref_wait(tty);
3071 retval = -EINVAL;
a352def2
AC
3072 if (ld->ops->ioctl) {
3073 retval = ld->ops->ioctl(tty, file, cmd, arg);
1da177e4
LT
3074 if (retval == -ENOIOCTLCMD)
3075 retval = -EINVAL;
3076 }
3077 tty_ldisc_deref(ld);
3078 return retval;
3079}
3080
e10cc1df 3081#ifdef CONFIG_COMPAT
37bdfb07 3082static long tty_compat_ioctl(struct file *file, unsigned int cmd,
e10cc1df
PF
3083 unsigned long arg)
3084{
3085 struct inode *inode = file->f_dentry->d_inode;
3086 struct tty_struct *tty = file->private_data;
3087 struct tty_ldisc *ld;
3088 int retval = -ENOIOCTLCMD;
3089
3090 if (tty_paranoia_check(tty, inode, "tty_ioctl"))
3091 return -EINVAL;
3092
f34d7a5b
AC
3093 if (tty->ops->compat_ioctl) {
3094 retval = (tty->ops->compat_ioctl)(tty, file, cmd, arg);
e10cc1df
PF
3095 if (retval != -ENOIOCTLCMD)
3096 return retval;
3097 }
3098
3099 ld = tty_ldisc_ref_wait(tty);
a352def2
AC
3100 if (ld->ops->compat_ioctl)
3101 retval = ld->ops->compat_ioctl(tty, file, cmd, arg);
e10cc1df
PF
3102 tty_ldisc_deref(ld);
3103
3104 return retval;
3105}
3106#endif
1da177e4
LT
3107
3108/*
3109 * This implements the "Secure Attention Key" --- the idea is to
3110 * prevent trojan horses by killing all processes associated with this
3111 * tty when the user hits the "Secure Attention Key". Required for
3112 * super-paranoid applications --- see the Orange Book for more details.
37bdfb07 3113 *
1da177e4
LT
3114 * This code could be nicer; ideally it should send a HUP, wait a few
3115 * seconds, then send a INT, and then a KILL signal. But you then
3116 * have to coordinate with the init process, since all processes associated
3117 * with the current tty must be dead before the new getty is allowed
3118 * to spawn.
3119 *
3120 * Now, if it would be correct ;-/ The current code has a nasty hole -
3121 * it doesn't catch files in flight. We may send the descriptor to ourselves
3122 * via AF_UNIX socket, close it and later fetch from socket. FIXME.
3123 *
3124 * Nasty bug: do_SAK is being called in interrupt context. This can
3125 * deadlock. We punt it up to process context. AKPM - 16Mar2001
3126 */
8b6312f4 3127void __do_SAK(struct tty_struct *tty)
1da177e4
LT
3128{
3129#ifdef TTY_SOFT_SAK
3130 tty_hangup(tty);
3131#else
652486fb 3132 struct task_struct *g, *p;
ab521dc0 3133 struct pid *session;
1da177e4
LT
3134 int i;
3135 struct file *filp;
badf1662 3136 struct fdtable *fdt;
37bdfb07 3137
1da177e4
LT
3138 if (!tty)
3139 return;
24ec839c 3140 session = tty->session;
37bdfb07 3141
b3f13deb 3142 tty_ldisc_flush(tty);
1da177e4 3143
f34d7a5b 3144 tty_driver_flush_buffer(tty);
37bdfb07 3145
1da177e4 3146 read_lock(&tasklist_lock);
652486fb 3147 /* Kill the entire session */
ab521dc0 3148 do_each_pid_task(session, PIDTYPE_SID, p) {
652486fb 3149 printk(KERN_NOTICE "SAK: killed process %d"
a47afb0f 3150 " (%s): task_session_nr(p)==tty->session\n",
ba25f9dc 3151 task_pid_nr(p), p->comm);
652486fb 3152 send_sig(SIGKILL, p, 1);
ab521dc0 3153 } while_each_pid_task(session, PIDTYPE_SID, p);
652486fb
EB
3154 /* Now kill any processes that happen to have the
3155 * tty open.
3156 */
3157 do_each_thread(g, p) {
3158 if (p->signal->tty == tty) {
1da177e4 3159 printk(KERN_NOTICE "SAK: killed process %d"
a47afb0f 3160 " (%s): task_session_nr(p)==tty->session\n",
ba25f9dc 3161 task_pid_nr(p), p->comm);
1da177e4
LT
3162 send_sig(SIGKILL, p, 1);
3163 continue;
3164 }
3165 task_lock(p);
3166 if (p->files) {
ca99c1da
DS
3167 /*
3168 * We don't take a ref to the file, so we must
3169 * hold ->file_lock instead.
3170 */
3171 spin_lock(&p->files->file_lock);
badf1662 3172 fdt = files_fdtable(p->files);
37bdfb07 3173 for (i = 0; i < fdt->max_fds; i++) {
1da177e4
LT
3174 filp = fcheck_files(p->files, i);
3175 if (!filp)
3176 continue;
3177 if (filp->f_op->read == tty_read &&
3178 filp->private_data == tty) {
3179 printk(KERN_NOTICE "SAK: killed process %d"
3180 " (%s): fd#%d opened to the tty\n",
ba25f9dc 3181 task_pid_nr(p), p->comm, i);
20ac9437 3182 force_sig(SIGKILL, p);
1da177e4
LT
3183 break;
3184 }
3185 }
ca99c1da 3186 spin_unlock(&p->files->file_lock);
1da177e4
LT
3187 }
3188 task_unlock(p);
652486fb 3189 } while_each_thread(g, p);
1da177e4
LT
3190 read_unlock(&tasklist_lock);
3191#endif
3192}
3193
8b6312f4
EB
3194static void do_SAK_work(struct work_struct *work)
3195{
3196 struct tty_struct *tty =
3197 container_of(work, struct tty_struct, SAK_work);
3198 __do_SAK(tty);
3199}
3200
1da177e4
LT
3201/*
3202 * The tq handling here is a little racy - tty->SAK_work may already be queued.
3203 * Fortunately we don't need to worry, because if ->SAK_work is already queued,
3204 * the values which we write to it will be identical to the values which it
3205 * already has. --akpm
3206 */
3207void do_SAK(struct tty_struct *tty)
3208{
3209 if (!tty)
3210 return;
1da177e4
LT
3211 schedule_work(&tty->SAK_work);
3212}
3213
3214EXPORT_SYMBOL(do_SAK);
3215
af9b897e
AC
3216/**
3217 * flush_to_ldisc
65f27f38 3218 * @work: tty structure passed from work queue.
af9b897e
AC
3219 *
3220 * This routine is called out of the software interrupt to flush data
3221 * from the buffer chain to the line discipline.
3222 *
3223 * Locking: holds tty->buf.lock to guard buffer list. Drops the lock
3224 * while invoking the line discipline receive_buf method. The
3225 * receive_buf method is single threaded for each tty instance.
1da177e4 3226 */
37bdfb07 3227
65f27f38 3228static void flush_to_ldisc(struct work_struct *work)
1da177e4 3229{
65f27f38
DH
3230 struct tty_struct *tty =
3231 container_of(work, struct tty_struct, buf.work.work);
1da177e4
LT
3232 unsigned long flags;
3233 struct tty_ldisc *disc;
2c3bb20f 3234 struct tty_buffer *tbuf, *head;
8977d929
PF
3235 char *char_buf;
3236 unsigned char *flag_buf;
1da177e4
LT
3237
3238 disc = tty_ldisc_ref(tty);
3239 if (disc == NULL) /* !TTY_LDISC */
3240 return;
3241
808249ce 3242 spin_lock_irqsave(&tty->buf.lock, flags);
37bdfb07
AC
3243 /* So we know a flush is running */
3244 set_bit(TTY_FLUSHING, &tty->flags);
2c3bb20f
PF
3245 head = tty->buf.head;
3246 if (head != NULL) {
3247 tty->buf.head = NULL;
3248 for (;;) {
3249 int count = head->commit - head->read;
3250 if (!count) {
3251 if (head->next == NULL)
3252 break;
3253 tbuf = head;
3254 head = head->next;
3255 tty_buffer_free(tty, tbuf);
3256 continue;
3257 }
42fd552e
AC
3258 /* Ldisc or user is trying to flush the buffers
3259 we are feeding to the ldisc, stop feeding the
3260 line discipline as we want to empty the queue */
3261 if (test_bit(TTY_FLUSHPENDING, &tty->flags))
3262 break;
2c3bb20f
PF
3263 if (!tty->receive_room) {
3264 schedule_delayed_work(&tty->buf.work, 1);
3265 break;
3266 }
3267 if (count > tty->receive_room)
3268 count = tty->receive_room;
3269 char_buf = head->char_buf_ptr + head->read;
3270 flag_buf = head->flag_buf_ptr + head->read;
3271 head->read += count;
8977d929 3272 spin_unlock_irqrestore(&tty->buf.lock, flags);
a352def2
AC
3273 disc->ops->receive_buf(tty, char_buf,
3274 flag_buf, count);
8977d929
PF
3275 spin_lock_irqsave(&tty->buf.lock, flags);
3276 }
42fd552e 3277 /* Restore the queue head */
2c3bb20f 3278 tty->buf.head = head;
33f0f88f 3279 }
42fd552e
AC
3280 /* We may have a deferred request to flush the input buffer,
3281 if so pull the chain under the lock and empty the queue */
3282 if (test_bit(TTY_FLUSHPENDING, &tty->flags)) {
3283 __tty_buffer_flush(tty);
3284 clear_bit(TTY_FLUSHPENDING, &tty->flags);
3285 wake_up(&tty->read_wait);
3286 }
3287 clear_bit(TTY_FLUSHING, &tty->flags);
808249ce 3288 spin_unlock_irqrestore(&tty->buf.lock, flags);
817d6d3b 3289
1da177e4
LT
3290 tty_ldisc_deref(disc);
3291}
3292
1da177e4
LT
3293/**
3294 * tty_flip_buffer_push - terminal
3295 * @tty: tty to push
3296 *
3297 * Queue a push of the terminal flip buffers to the line discipline. This
3298 * function must not be called from IRQ context if tty->low_latency is set.
3299 *
3300 * In the event of the queue being busy for flipping the work will be
3301 * held off and retried later.
af9b897e
AC
3302 *
3303 * Locking: tty buffer lock. Driver locks in low latency mode.
1da177e4
LT
3304 */
3305
3306void tty_flip_buffer_push(struct tty_struct *tty)
3307{
808249ce
PF
3308 unsigned long flags;
3309 spin_lock_irqsave(&tty->buf.lock, flags);
33b37a33 3310 if (tty->buf.tail != NULL)
8977d929 3311 tty->buf.tail->commit = tty->buf.tail->used;
808249ce
PF
3312 spin_unlock_irqrestore(&tty->buf.lock, flags);
3313
1da177e4 3314 if (tty->low_latency)
65f27f38 3315 flush_to_ldisc(&tty->buf.work.work);
1da177e4 3316 else
33f0f88f 3317 schedule_delayed_work(&tty->buf.work, 1);
1da177e4
LT
3318}
3319
3320EXPORT_SYMBOL(tty_flip_buffer_push);
3321
33f0f88f 3322
af9b897e
AC
3323/**
3324 * initialize_tty_struct
3325 * @tty: tty to initialize
3326 *
3327 * This subroutine initializes a tty structure that has been newly
3328 * allocated.
3329 *
3330 * Locking: none - tty in question must not be exposed at this point
1da177e4 3331 */
af9b897e 3332
1da177e4
LT
3333static void initialize_tty_struct(struct tty_struct *tty)
3334{
3335 memset(tty, 0, sizeof(struct tty_struct));
3336 tty->magic = TTY_MAGIC;
01e1abb2 3337 tty_ldisc_init(tty);
ab521dc0
EB
3338 tty->session = NULL;
3339 tty->pgrp = NULL;
1da177e4 3340 tty->overrun_time = jiffies;
33f0f88f
AC
3341 tty->buf.head = tty->buf.tail = NULL;
3342 tty_buffer_init(tty);
65f27f38 3343 INIT_DELAYED_WORK(&tty->buf.work, flush_to_ldisc);
5785c95b 3344 mutex_init(&tty->termios_mutex);
1da177e4
LT
3345 init_waitqueue_head(&tty->write_wait);
3346 init_waitqueue_head(&tty->read_wait);
65f27f38 3347 INIT_WORK(&tty->hangup_work, do_tty_hangup);
70522e12
IM
3348 mutex_init(&tty->atomic_read_lock);
3349 mutex_init(&tty->atomic_write_lock);
1da177e4 3350 spin_lock_init(&tty->read_lock);
04f378b1 3351 spin_lock_init(&tty->ctrl_lock);
1da177e4 3352 INIT_LIST_HEAD(&tty->tty_files);
7f1f86a0 3353 INIT_WORK(&tty->SAK_work, do_SAK_work);
1da177e4
LT
3354}
3355
f34d7a5b
AC
3356/**
3357 * tty_put_char - write one character to a tty
3358 * @tty: tty
3359 * @ch: character
3360 *
3361 * Write one byte to the tty using the provided put_char method
3362 * if present. Returns the number of characters successfully output.
3363 *
3364 * Note: the specific put_char operation in the driver layer may go
3365 * away soon. Don't call it directly, use this method
1da177e4 3366 */
af9b897e 3367
f34d7a5b 3368int tty_put_char(struct tty_struct *tty, unsigned char ch)
1da177e4 3369{
f34d7a5b
AC
3370 if (tty->ops->put_char)
3371 return tty->ops->put_char(tty, ch);
3372 return tty->ops->write(tty, &ch, 1);
1da177e4
LT
3373}
3374
f34d7a5b
AC
3375EXPORT_SYMBOL_GPL(tty_put_char);
3376
7fe845d1 3377static struct class *tty_class;
1da177e4
LT
3378
3379/**
af9b897e
AC
3380 * tty_register_device - register a tty device
3381 * @driver: the tty driver that describes the tty device
3382 * @index: the index in the tty driver for this tty device
3383 * @device: a struct device that is associated with this tty device.
3384 * This field is optional, if there is no known struct device
3385 * for this tty device it can be set to NULL safely.
1da177e4 3386 *
01107d34
GKH
3387 * Returns a pointer to the struct device for this tty device
3388 * (or ERR_PTR(-EFOO) on error).
1cdcb6b4 3389 *
af9b897e
AC
3390 * This call is required to be made to register an individual tty device
3391 * if the tty driver's flags have the TTY_DRIVER_DYNAMIC_DEV bit set. If
3392 * that bit is not set, this function should not be called by a tty
3393 * driver.
3394 *
3395 * Locking: ??
1da177e4 3396 */
af9b897e 3397
01107d34
GKH
3398struct device *tty_register_device(struct tty_driver *driver, unsigned index,
3399 struct device *device)
1da177e4
LT
3400{
3401 char name[64];
3402 dev_t dev = MKDEV(driver->major, driver->minor_start) + index;
3403
3404 if (index >= driver->num) {
3405 printk(KERN_ERR "Attempt to register invalid tty line number "
3406 " (%d).\n", index);
1cdcb6b4 3407 return ERR_PTR(-EINVAL);
1da177e4
LT
3408 }
3409
1da177e4
LT
3410 if (driver->type == TTY_DRIVER_TYPE_PTY)
3411 pty_line_name(driver, index, name);
3412 else
3413 tty_line_name(driver, index, name);
1cdcb6b4 3414
47aa5793 3415 return device_create_drvdata(tty_class, device, dev, NULL, name);
1da177e4
LT
3416}
3417
3418/**
af9b897e
AC
3419 * tty_unregister_device - unregister a tty device
3420 * @driver: the tty driver that describes the tty device
3421 * @index: the index in the tty driver for this tty device
1da177e4 3422 *
af9b897e
AC
3423 * If a tty device is registered with a call to tty_register_device() then
3424 * this function must be called when the tty device is gone.
3425 *
3426 * Locking: ??
1da177e4 3427 */
af9b897e 3428
1da177e4
LT
3429void tty_unregister_device(struct tty_driver *driver, unsigned index)
3430{
37bdfb07
AC
3431 device_destroy(tty_class,
3432 MKDEV(driver->major, driver->minor_start) + index);
1da177e4
LT
3433}
3434
3435EXPORT_SYMBOL(tty_register_device);
3436EXPORT_SYMBOL(tty_unregister_device);
3437
3438struct tty_driver *alloc_tty_driver(int lines)
3439{
3440 struct tty_driver *driver;
3441
506eb99a 3442 driver = kzalloc(sizeof(struct tty_driver), GFP_KERNEL);
1da177e4 3443 if (driver) {
1da177e4
LT
3444 driver->magic = TTY_DRIVER_MAGIC;
3445 driver->num = lines;
3446 /* later we'll move allocation of tables here */
3447 }
3448 return driver;
3449}
3450
3451void put_tty_driver(struct tty_driver *driver)
3452{
3453 kfree(driver);
3454}
3455
b68e31d0
JD
3456void tty_set_operations(struct tty_driver *driver,
3457 const struct tty_operations *op)
1da177e4 3458{
f34d7a5b
AC
3459 driver->ops = op;
3460};
1da177e4
LT
3461
3462EXPORT_SYMBOL(alloc_tty_driver);
3463EXPORT_SYMBOL(put_tty_driver);
3464EXPORT_SYMBOL(tty_set_operations);
3465
3466/*
3467 * Called by a tty driver to register itself.
3468 */
3469int tty_register_driver(struct tty_driver *driver)
3470{
3471 int error;
37bdfb07 3472 int i;
1da177e4
LT
3473 dev_t dev;
3474 void **p = NULL;
3475
3476 if (driver->flags & TTY_DRIVER_INSTALLED)
3477 return 0;
3478
543691a6
AW
3479 if (!(driver->flags & TTY_DRIVER_DEVPTS_MEM) && driver->num) {
3480 p = kzalloc(driver->num * 3 * sizeof(void *), GFP_KERNEL);
1da177e4
LT
3481 if (!p)
3482 return -ENOMEM;
1da177e4
LT
3483 }
3484
3485 if (!driver->major) {
37bdfb07
AC
3486 error = alloc_chrdev_region(&dev, driver->minor_start,
3487 driver->num, driver->name);
1da177e4
LT
3488 if (!error) {
3489 driver->major = MAJOR(dev);
3490 driver->minor_start = MINOR(dev);
3491 }
3492 } else {
3493 dev = MKDEV(driver->major, driver->minor_start);
e5717c48 3494 error = register_chrdev_region(dev, driver->num, driver->name);
1da177e4
LT
3495 }
3496 if (error < 0) {
3497 kfree(p);
3498 return error;
3499 }
3500
3501 if (p) {
3502 driver->ttys = (struct tty_struct **)p;
edc6afc5 3503 driver->termios = (struct ktermios **)(p + driver->num);
37bdfb07
AC
3504 driver->termios_locked = (struct ktermios **)
3505 (p + driver->num * 2);
1da177e4
LT
3506 } else {
3507 driver->ttys = NULL;
3508 driver->termios = NULL;
3509 driver->termios_locked = NULL;
3510 }
3511
3512 cdev_init(&driver->cdev, &tty_fops);
3513 driver->cdev.owner = driver->owner;
3514 error = cdev_add(&driver->cdev, dev, driver->num);
3515 if (error) {
1da177e4
LT
3516 unregister_chrdev_region(dev, driver->num);
3517 driver->ttys = NULL;
3518 driver->termios = driver->termios_locked = NULL;
3519 kfree(p);
3520 return error;
3521 }
3522
ca509f69 3523 mutex_lock(&tty_mutex);
1da177e4 3524 list_add(&driver->tty_drivers, &tty_drivers);
ca509f69 3525 mutex_unlock(&tty_mutex);
37bdfb07
AC
3526
3527 if (!(driver->flags & TTY_DRIVER_DYNAMIC_DEV)) {
3528 for (i = 0; i < driver->num; i++)
1da177e4
LT
3529 tty_register_device(driver, i, NULL);
3530 }
3531 proc_tty_register_driver(driver);
3532 return 0;
3533}
3534
3535EXPORT_SYMBOL(tty_register_driver);
3536
3537/*
3538 * Called by a tty driver to unregister itself.
3539 */
3540int tty_unregister_driver(struct tty_driver *driver)
3541{
3542 int i;
edc6afc5 3543 struct ktermios *tp;
1da177e4
LT
3544 void *p;
3545
3546 if (driver->refcount)
3547 return -EBUSY;
3548
3549 unregister_chrdev_region(MKDEV(driver->major, driver->minor_start),
3550 driver->num);
ca509f69 3551 mutex_lock(&tty_mutex);
1da177e4 3552 list_del(&driver->tty_drivers);
ca509f69 3553 mutex_unlock(&tty_mutex);
1da177e4
LT
3554
3555 /*
3556 * Free the termios and termios_locked structures because
3557 * we don't want to get memory leaks when modular tty
3558 * drivers are removed from the kernel.
3559 */
3560 for (i = 0; i < driver->num; i++) {
3561 tp = driver->termios[i];
3562 if (tp) {
3563 driver->termios[i] = NULL;
3564 kfree(tp);
3565 }
3566 tp = driver->termios_locked[i];
3567 if (tp) {
3568 driver->termios_locked[i] = NULL;
3569 kfree(tp);
3570 }
331b8319 3571 if (!(driver->flags & TTY_DRIVER_DYNAMIC_DEV))
1da177e4
LT
3572 tty_unregister_device(driver, i);
3573 }
3574 p = driver->ttys;
3575 proc_tty_unregister_driver(driver);
3576 driver->ttys = NULL;
3577 driver->termios = driver->termios_locked = NULL;
3578 kfree(p);
3579 cdev_del(&driver->cdev);
3580 return 0;
3581}
1da177e4
LT
3582EXPORT_SYMBOL(tty_unregister_driver);
3583
24ec839c
PZ
3584dev_t tty_devnum(struct tty_struct *tty)
3585{
3586 return MKDEV(tty->driver->major, tty->driver->minor_start) + tty->index;
3587}
3588EXPORT_SYMBOL(tty_devnum);
3589
3590void proc_clear_tty(struct task_struct *p)
3591{
3592 spin_lock_irq(&p->sighand->siglock);
3593 p->signal->tty = NULL;
3594 spin_unlock_irq(&p->sighand->siglock);
3595}
7cac4ce5 3596EXPORT_SYMBOL(proc_clear_tty);
24ec839c 3597
47f86834
AC
3598/* Called under the sighand lock */
3599
2a65f1d9 3600static void __proc_set_tty(struct task_struct *tsk, struct tty_struct *tty)
24ec839c
PZ
3601{
3602 if (tty) {
47f86834
AC
3603 unsigned long flags;
3604 /* We should not have a session or pgrp to put here but.... */
3605 spin_lock_irqsave(&tty->ctrl_lock, flags);
d9c1e9a8
EB
3606 put_pid(tty->session);
3607 put_pid(tty->pgrp);
ab521dc0 3608 tty->pgrp = get_pid(task_pgrp(tsk));
47f86834
AC
3609 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
3610 tty->session = get_pid(task_session(tsk));
24ec839c 3611 }
2a65f1d9 3612 put_pid(tsk->signal->tty_old_pgrp);
24ec839c 3613 tsk->signal->tty = tty;
ab521dc0 3614 tsk->signal->tty_old_pgrp = NULL;
24ec839c
PZ
3615}
3616
98a27ba4 3617static void proc_set_tty(struct task_struct *tsk, struct tty_struct *tty)
24ec839c
PZ
3618{
3619 spin_lock_irq(&tsk->sighand->siglock);
2a65f1d9 3620 __proc_set_tty(tsk, tty);
24ec839c
PZ
3621 spin_unlock_irq(&tsk->sighand->siglock);
3622}
3623
3624struct tty_struct *get_current_tty(void)
3625{
3626 struct tty_struct *tty;
3627 WARN_ON_ONCE(!mutex_is_locked(&tty_mutex));
3628 tty = current->signal->tty;
3629 /*
3630 * session->tty can be changed/cleared from under us, make sure we
3631 * issue the load. The obtained pointer, when not NULL, is valid as
3632 * long as we hold tty_mutex.
3633 */
3634 barrier();
3635 return tty;
3636}
a311f743 3637EXPORT_SYMBOL_GPL(get_current_tty);
1da177e4
LT
3638
3639/*
3640 * Initialize the console device. This is called *early*, so
3641 * we can't necessarily depend on lots of kernel help here.
3642 * Just do some early initializations, and do the complex setup
3643 * later.
3644 */
3645void __init console_init(void)
3646{
3647 initcall_t *call;
3648
3649 /* Setup the default TTY line discipline. */
01e1abb2 3650 tty_ldisc_begin();
1da177e4
LT
3651
3652 /*
37bdfb07 3653 * set up the console device so that later boot sequences can
1da177e4
LT
3654 * inform about problems etc..
3655 */
1da177e4
LT
3656 call = __con_initcall_start;
3657 while (call < __con_initcall_end) {
3658 (*call)();
3659 call++;
3660 }
3661}
3662
1da177e4
LT
3663static int __init tty_class_init(void)
3664{
7fe845d1 3665 tty_class = class_create(THIS_MODULE, "tty");
1da177e4
LT
3666 if (IS_ERR(tty_class))
3667 return PTR_ERR(tty_class);
3668 return 0;
3669}
3670
3671postcore_initcall(tty_class_init);
3672
3673/* 3/2004 jmc: why do these devices exist? */
3674
3675static struct cdev tty_cdev, console_cdev;
3676#ifdef CONFIG_UNIX98_PTYS
3677static struct cdev ptmx_cdev;
3678#endif
3679#ifdef CONFIG_VT
3680static struct cdev vc0_cdev;
3681#endif
3682
3683/*
3684 * Ok, now we can initialize the rest of the tty devices and can count
3685 * on memory allocations, interrupts etc..
3686 */
3687static int __init tty_init(void)
3688{
3689 cdev_init(&tty_cdev, &tty_fops);
3690 if (cdev_add(&tty_cdev, MKDEV(TTYAUX_MAJOR, 0), 1) ||
3691 register_chrdev_region(MKDEV(TTYAUX_MAJOR, 0), 1, "/dev/tty") < 0)
3692 panic("Couldn't register /dev/tty driver\n");
47aa5793
GKH
3693 device_create_drvdata(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 0), NULL,
3694 "tty");
1da177e4
LT
3695
3696 cdev_init(&console_cdev, &console_fops);
3697 if (cdev_add(&console_cdev, MKDEV(TTYAUX_MAJOR, 1), 1) ||
3698 register_chrdev_region(MKDEV(TTYAUX_MAJOR, 1), 1, "/dev/console") < 0)
3699 panic("Couldn't register /dev/console driver\n");
47aa5793
GKH
3700 device_create_drvdata(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 1), NULL,
3701 "console");
1da177e4
LT
3702
3703#ifdef CONFIG_UNIX98_PTYS
3704 cdev_init(&ptmx_cdev, &ptmx_fops);
3705 if (cdev_add(&ptmx_cdev, MKDEV(TTYAUX_MAJOR, 2), 1) ||
3706 register_chrdev_region(MKDEV(TTYAUX_MAJOR, 2), 1, "/dev/ptmx") < 0)
3707 panic("Couldn't register /dev/ptmx driver\n");
47aa5793 3708 device_create_drvdata(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 2), NULL, "ptmx");
1da177e4
LT
3709#endif
3710
3711#ifdef CONFIG_VT
3712 cdev_init(&vc0_cdev, &console_fops);
3713 if (cdev_add(&vc0_cdev, MKDEV(TTY_MAJOR, 0), 1) ||
3714 register_chrdev_region(MKDEV(TTY_MAJOR, 0), 1, "/dev/vc/0") < 0)
3715 panic("Couldn't register /dev/tty0 driver\n");
47aa5793 3716 device_create_drvdata(tty_class, NULL, MKDEV(TTY_MAJOR, 0), NULL, "tty0");
1da177e4
LT
3717
3718 vty_init();
3719#endif
3720 return 0;
3721}
3722module_init(tty_init);