devpts: propagate error code from devpts_pty_new
[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>
81#include <linux/console.h>
82#include <linux/timer.h>
83#include <linux/ctype.h>
84#include <linux/kd.h>
85#include <linux/mm.h>
86#include <linux/string.h>
87#include <linux/slab.h>
88#include <linux/poll.h>
89#include <linux/proc_fs.h>
90#include <linux/init.h>
91#include <linux/module.h>
92#include <linux/smp_lock.h>
93#include <linux/device.h>
94#include <linux/idr.h>
95#include <linux/wait.h>
96#include <linux/bitops.h>
b20f3ae5 97#include <linux/delay.h>
1da177e4
LT
98
99#include <asm/uaccess.h>
100#include <asm/system.h>
101
102#include <linux/kbd_kern.h>
103#include <linux/vt_kern.h>
104#include <linux/selection.h>
1da177e4
LT
105
106#include <linux/kmod.h>
b488893a 107#include <linux/nsproxy.h>
1da177e4
LT
108
109#undef TTY_DEBUG_HANGUP
110
111#define TTY_PARANOIA_CHECK 1
112#define CHECK_TTY_COUNT 1
113
edc6afc5 114struct ktermios tty_std_termios = { /* for the benefit of tty drivers */
1da177e4
LT
115 .c_iflag = ICRNL | IXON,
116 .c_oflag = OPOST | ONLCR,
117 .c_cflag = B38400 | CS8 | CREAD | HUPCL,
118 .c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK |
119 ECHOCTL | ECHOKE | IEXTEN,
edc6afc5
AC
120 .c_cc = INIT_C_CC,
121 .c_ispeed = 38400,
122 .c_ospeed = 38400
1da177e4
LT
123};
124
125EXPORT_SYMBOL(tty_std_termios);
126
127/* This list gets poked at by procfs and various bits of boot up code. This
128 could do with some rationalisation such as pulling the tty proc function
129 into this file */
37bdfb07 130
1da177e4
LT
131LIST_HEAD(tty_drivers); /* linked list of tty drivers */
132
24ec839c 133/* Mutex to protect creating and releasing a tty. This is shared with
1da177e4 134 vt.c for deeply disgusting hack reasons */
70522e12 135DEFINE_MUTEX(tty_mutex);
de2a84f2 136EXPORT_SYMBOL(tty_mutex);
1da177e4
LT
137
138#ifdef CONFIG_UNIX98_PTYS
139extern struct tty_driver *ptm_driver; /* Unix98 pty masters; for /dev/ptmx */
37bdfb07 140extern int pty_limit; /* Config limit on Unix98 ptys */
1da177e4 141static DEFINE_IDR(allocated_ptys);
a6752f3f 142static DEFINE_MUTEX(allocated_ptys_lock);
1da177e4
LT
143static int ptmx_open(struct inode *, struct file *);
144#endif
145
1da177e4
LT
146static void initialize_tty_struct(struct tty_struct *tty);
147
148static ssize_t tty_read(struct file *, char __user *, size_t, loff_t *);
149static ssize_t tty_write(struct file *, const char __user *, size_t, loff_t *);
37bdfb07
AC
150ssize_t redirected_tty_write(struct file *, const char __user *,
151 size_t, loff_t *);
1da177e4
LT
152static unsigned int tty_poll(struct file *, poll_table *);
153static int tty_open(struct inode *, struct file *);
154static int tty_release(struct inode *, struct file *);
04f378b1 155long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
e10cc1df 156#ifdef CONFIG_COMPAT
37bdfb07 157static long tty_compat_ioctl(struct file *file, unsigned int cmd,
e10cc1df
PF
158 unsigned long arg);
159#else
160#define tty_compat_ioctl NULL
161#endif
37bdfb07 162static int tty_fasync(int fd, struct file *filp, int on);
d5698c28 163static void release_tty(struct tty_struct *tty, int idx);
2a65f1d9 164static void __proc_set_tty(struct task_struct *tsk, struct tty_struct *tty);
98a27ba4 165static void proc_set_tty(struct task_struct *tsk, struct tty_struct *tty);
1da177e4 166
af9b897e
AC
167/**
168 * alloc_tty_struct - allocate a tty object
169 *
170 * Return a new empty tty structure. The data fields have not
171 * been initialized in any way but has been zeroed
172 *
173 * Locking: none
af9b897e 174 */
1da177e4
LT
175
176static struct tty_struct *alloc_tty_struct(void)
177{
1266b1e1 178 return kzalloc(sizeof(struct tty_struct), GFP_KERNEL);
1da177e4
LT
179}
180
33f0f88f
AC
181static void tty_buffer_free_all(struct tty_struct *);
182
af9b897e
AC
183/**
184 * free_tty_struct - free a disused tty
185 * @tty: tty struct to free
186 *
187 * Free the write buffers, tty queue and tty memory itself.
188 *
189 * Locking: none. Must be called after tty is definitely unused
190 */
191
1da177e4
LT
192static inline void free_tty_struct(struct tty_struct *tty)
193{
194 kfree(tty->write_buf);
33f0f88f 195 tty_buffer_free_all(tty);
1da177e4
LT
196 kfree(tty);
197}
198
199#define TTY_NUMBER(tty) ((tty)->index + (tty)->driver->name_base)
200
af9b897e
AC
201/**
202 * tty_name - return tty naming
203 * @tty: tty structure
204 * @buf: buffer for output
205 *
206 * Convert a tty structure into a name. The name reflects the kernel
207 * naming policy and if udev is in use may not reflect user space
208 *
209 * Locking: none
210 */
211
1da177e4
LT
212char *tty_name(struct tty_struct *tty, char *buf)
213{
214 if (!tty) /* Hmm. NULL pointer. That's fun. */
215 strcpy(buf, "NULL tty");
216 else
217 strcpy(buf, tty->name);
218 return buf;
219}
220
221EXPORT_SYMBOL(tty_name);
222
d769a669 223int tty_paranoia_check(struct tty_struct *tty, struct inode *inode,
1da177e4
LT
224 const char *routine)
225{
226#ifdef TTY_PARANOIA_CHECK
227 if (!tty) {
228 printk(KERN_WARNING
229 "null TTY for (%d:%d) in %s\n",
230 imajor(inode), iminor(inode), routine);
231 return 1;
232 }
233 if (tty->magic != TTY_MAGIC) {
234 printk(KERN_WARNING
235 "bad magic number for tty struct (%d:%d) in %s\n",
236 imajor(inode), iminor(inode), routine);
237 return 1;
238 }
239#endif
240 return 0;
241}
242
243static int check_tty_count(struct tty_struct *tty, const char *routine)
244{
245#ifdef CHECK_TTY_COUNT
246 struct list_head *p;
247 int count = 0;
37bdfb07 248
1da177e4
LT
249 file_list_lock();
250 list_for_each(p, &tty->tty_files) {
251 count++;
252 }
253 file_list_unlock();
254 if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
255 tty->driver->subtype == PTY_TYPE_SLAVE &&
256 tty->link && tty->link->count)
257 count++;
258 if (tty->count != count) {
259 printk(KERN_WARNING "Warning: dev (%s) tty->count(%d) "
260 "!= #fd's(%d) in %s\n",
261 tty->name, tty->count, count, routine);
262 return count;
24ec839c 263 }
1da177e4
LT
264#endif
265 return 0;
266}
267
33f0f88f
AC
268/*
269 * Tty buffer allocation management
270 */
271
af9b897e
AC
272/**
273 * tty_buffer_free_all - free buffers used by a tty
274 * @tty: tty to free from
275 *
276 * Remove all the buffers pending on a tty whether queued with data
277 * or in the free ring. Must be called when the tty is no longer in use
278 *
279 * Locking: none
280 */
281
33f0f88f
AC
282static void tty_buffer_free_all(struct tty_struct *tty)
283{
284 struct tty_buffer *thead;
37bdfb07 285 while ((thead = tty->buf.head) != NULL) {
33f0f88f
AC
286 tty->buf.head = thead->next;
287 kfree(thead);
288 }
37bdfb07 289 while ((thead = tty->buf.free) != NULL) {
33f0f88f
AC
290 tty->buf.free = thead->next;
291 kfree(thead);
292 }
293 tty->buf.tail = NULL;
01da5fd8 294 tty->buf.memory_used = 0;
33f0f88f
AC
295}
296
01da5fd8
AC
297/**
298 * tty_buffer_init - prepare a tty buffer structure
299 * @tty: tty to initialise
300 *
301 * Set up the initial state of the buffer management for a tty device.
302 * Must be called before the other tty buffer functions are used.
303 *
304 * Locking: none
305 */
306
33f0f88f
AC
307static void tty_buffer_init(struct tty_struct *tty)
308{
808249ce 309 spin_lock_init(&tty->buf.lock);
33f0f88f
AC
310 tty->buf.head = NULL;
311 tty->buf.tail = NULL;
312 tty->buf.free = NULL;
01da5fd8 313 tty->buf.memory_used = 0;
33f0f88f
AC
314}
315
01da5fd8
AC
316/**
317 * tty_buffer_alloc - allocate a tty buffer
318 * @tty: tty device
319 * @size: desired size (characters)
320 *
321 * Allocate a new tty buffer to hold the desired number of characters.
322 * Return NULL if out of memory or the allocation would exceed the
323 * per device queue
324 *
325 * Locking: Caller must hold tty->buf.lock
326 */
327
328static struct tty_buffer *tty_buffer_alloc(struct tty_struct *tty, size_t size)
33f0f88f 329{
01da5fd8
AC
330 struct tty_buffer *p;
331
332 if (tty->buf.memory_used + size > 65536)
333 return NULL;
334 p = kmalloc(sizeof(struct tty_buffer) + 2 * size, GFP_ATOMIC);
37bdfb07 335 if (p == NULL)
33f0f88f
AC
336 return NULL;
337 p->used = 0;
338 p->size = size;
339 p->next = NULL;
8977d929
PF
340 p->commit = 0;
341 p->read = 0;
33f0f88f
AC
342 p->char_buf_ptr = (char *)(p->data);
343 p->flag_buf_ptr = (unsigned char *)p->char_buf_ptr + size;
01da5fd8 344 tty->buf.memory_used += size;
33f0f88f
AC
345 return p;
346}
347
01da5fd8
AC
348/**
349 * tty_buffer_free - free a tty buffer
350 * @tty: tty owning the buffer
351 * @b: the buffer to free
352 *
353 * Free a tty buffer, or add it to the free list according to our
354 * internal strategy
355 *
356 * Locking: Caller must hold tty->buf.lock
357 */
33f0f88f
AC
358
359static void tty_buffer_free(struct tty_struct *tty, struct tty_buffer *b)
360{
361 /* Dumb strategy for now - should keep some stats */
01da5fd8
AC
362 tty->buf.memory_used -= b->size;
363 WARN_ON(tty->buf.memory_used < 0);
364
37bdfb07 365 if (b->size >= 512)
33f0f88f
AC
366 kfree(b);
367 else {
368 b->next = tty->buf.free;
369 tty->buf.free = b;
370 }
371}
372
c5c34d48 373/**
42fd552e 374 * __tty_buffer_flush - flush full tty buffers
c5c34d48
PF
375 * @tty: tty to flush
376 *
42fd552e
AC
377 * flush all the buffers containing receive data. Caller must
378 * hold the buffer lock and must have ensured no parallel flush to
379 * ldisc is running.
c5c34d48 380 *
42fd552e 381 * Locking: Caller must hold tty->buf.lock
c5c34d48
PF
382 */
383
42fd552e 384static void __tty_buffer_flush(struct tty_struct *tty)
c5c34d48
PF
385{
386 struct tty_buffer *thead;
c5c34d48 387
37bdfb07 388 while ((thead = tty->buf.head) != NULL) {
c5c34d48
PF
389 tty->buf.head = thead->next;
390 tty_buffer_free(tty, thead);
391 }
392 tty->buf.tail = NULL;
42fd552e
AC
393}
394
395/**
396 * tty_buffer_flush - flush full tty buffers
397 * @tty: tty to flush
398 *
399 * flush all the buffers containing receive data. If the buffer is
400 * being processed by flush_to_ldisc then we defer the processing
401 * to that function
402 *
403 * Locking: none
404 */
405
406static void tty_buffer_flush(struct tty_struct *tty)
407{
408 unsigned long flags;
409 spin_lock_irqsave(&tty->buf.lock, flags);
410
411 /* If the data is being pushed to the tty layer then we can't
412 process it here. Instead set a flag and the flush_to_ldisc
413 path will process the flush request before it exits */
414 if (test_bit(TTY_FLUSHING, &tty->flags)) {
415 set_bit(TTY_FLUSHPENDING, &tty->flags);
416 spin_unlock_irqrestore(&tty->buf.lock, flags);
417 wait_event(tty->read_wait,
418 test_bit(TTY_FLUSHPENDING, &tty->flags) == 0);
419 return;
420 } else
421 __tty_buffer_flush(tty);
c5c34d48
PF
422 spin_unlock_irqrestore(&tty->buf.lock, flags);
423}
424
01da5fd8
AC
425/**
426 * tty_buffer_find - find a free tty buffer
427 * @tty: tty owning the buffer
428 * @size: characters wanted
429 *
430 * Locate an existing suitable tty buffer or if we are lacking one then
431 * allocate a new one. We round our buffers off in 256 character chunks
432 * to get better allocation behaviour.
433 *
434 * Locking: Caller must hold tty->buf.lock
435 */
436
33f0f88f
AC
437static struct tty_buffer *tty_buffer_find(struct tty_struct *tty, size_t size)
438{
439 struct tty_buffer **tbh = &tty->buf.free;
37bdfb07 440 while ((*tbh) != NULL) {
33f0f88f 441 struct tty_buffer *t = *tbh;
37bdfb07 442 if (t->size >= size) {
33f0f88f
AC
443 *tbh = t->next;
444 t->next = NULL;
445 t->used = 0;
8977d929
PF
446 t->commit = 0;
447 t->read = 0;
01da5fd8 448 tty->buf.memory_used += t->size;
33f0f88f
AC
449 return t;
450 }
451 tbh = &((*tbh)->next);
452 }
453 /* Round the buffer size out */
37bdfb07 454 size = (size + 0xFF) & ~0xFF;
01da5fd8 455 return tty_buffer_alloc(tty, size);
33f0f88f
AC
456 /* Should possibly check if this fails for the largest buffer we
457 have queued and recycle that ? */
458}
459
01da5fd8
AC
460/**
461 * tty_buffer_request_room - grow tty buffer if needed
462 * @tty: tty structure
463 * @size: size desired
464 *
465 * Make at least size bytes of linear space available for the tty
466 * buffer. If we fail return the size we managed to find.
467 *
468 * Locking: Takes tty->buf.lock
469 */
33f0f88f
AC
470int tty_buffer_request_room(struct tty_struct *tty, size_t size)
471{
808249ce
PF
472 struct tty_buffer *b, *n;
473 int left;
474 unsigned long flags;
475
476 spin_lock_irqsave(&tty->buf.lock, flags);
33f0f88f
AC
477
478 /* OPTIMISATION: We could keep a per tty "zero" sized buffer to
479 remove this conditional if its worth it. This would be invisible
480 to the callers */
33b37a33 481 if ((b = tty->buf.tail) != NULL)
33f0f88f 482 left = b->size - b->used;
33b37a33 483 else
808249ce
PF
484 left = 0;
485
486 if (left < size) {
487 /* This is the slow path - looking for new buffers to use */
488 if ((n = tty_buffer_find(tty, size)) != NULL) {
489 if (b != NULL) {
490 b->next = n;
8977d929 491 b->commit = b->used;
808249ce
PF
492 } else
493 tty->buf.head = n;
494 tty->buf.tail = n;
808249ce
PF
495 } else
496 size = left;
497 }
498
499 spin_unlock_irqrestore(&tty->buf.lock, flags);
33f0f88f
AC
500 return size;
501}
33f0f88f
AC
502EXPORT_SYMBOL_GPL(tty_buffer_request_room);
503
af9b897e
AC
504/**
505 * tty_insert_flip_string - Add characters to the tty buffer
506 * @tty: tty structure
507 * @chars: characters
508 * @size: size
509 *
510 * Queue a series of bytes to the tty buffering. All the characters
511 * passed are marked as without error. Returns the number added.
512 *
513 * Locking: Called functions may take tty->buf.lock
514 */
515
e1a25090
AM
516int tty_insert_flip_string(struct tty_struct *tty, const unsigned char *chars,
517 size_t size)
33f0f88f
AC
518{
519 int copied = 0;
520 do {
521 int space = tty_buffer_request_room(tty, size - copied);
522 struct tty_buffer *tb = tty->buf.tail;
523 /* If there is no space then tb may be NULL */
37bdfb07 524 if (unlikely(space == 0))
33f0f88f
AC
525 break;
526 memcpy(tb->char_buf_ptr + tb->used, chars, space);
527 memset(tb->flag_buf_ptr + tb->used, TTY_NORMAL, space);
528 tb->used += space;
529 copied += space;
530 chars += space;
527063ba
AD
531 /* There is a small chance that we need to split the data over
532 several buffers. If this is the case we must loop */
533 } while (unlikely(size > copied));
33f0f88f
AC
534 return copied;
535}
ee37df78 536EXPORT_SYMBOL(tty_insert_flip_string);
33f0f88f 537
af9b897e
AC
538/**
539 * tty_insert_flip_string_flags - Add characters to the tty buffer
540 * @tty: tty structure
541 * @chars: characters
542 * @flags: flag bytes
543 * @size: size
544 *
545 * Queue a series of bytes to the tty buffering. For each character
546 * the flags array indicates the status of the character. Returns the
547 * number added.
548 *
549 * Locking: Called functions may take tty->buf.lock
550 */
551
e1a25090
AM
552int tty_insert_flip_string_flags(struct tty_struct *tty,
553 const unsigned char *chars, const char *flags, size_t size)
33f0f88f
AC
554{
555 int copied = 0;
556 do {
557 int space = tty_buffer_request_room(tty, size - copied);
558 struct tty_buffer *tb = tty->buf.tail;
559 /* If there is no space then tb may be NULL */
37bdfb07 560 if (unlikely(space == 0))
33f0f88f
AC
561 break;
562 memcpy(tb->char_buf_ptr + tb->used, chars, space);
563 memcpy(tb->flag_buf_ptr + tb->used, flags, space);
564 tb->used += space;
565 copied += space;
566 chars += space;
567 flags += space;
527063ba
AD
568 /* There is a small chance that we need to split the data over
569 several buffers. If this is the case we must loop */
570 } while (unlikely(size > copied));
33f0f88f
AC
571 return copied;
572}
ff4547f4 573EXPORT_SYMBOL(tty_insert_flip_string_flags);
33f0f88f 574
af9b897e
AC
575/**
576 * tty_schedule_flip - push characters to ldisc
577 * @tty: tty to push from
578 *
579 * Takes any pending buffers and transfers their ownership to the
580 * ldisc side of the queue. It then schedules those characters for
581 * processing by the line discipline.
582 *
583 * Locking: Takes tty->buf.lock
584 */
585
e1a25090
AM
586void tty_schedule_flip(struct tty_struct *tty)
587{
588 unsigned long flags;
589 spin_lock_irqsave(&tty->buf.lock, flags);
33b37a33 590 if (tty->buf.tail != NULL)
e1a25090 591 tty->buf.tail->commit = tty->buf.tail->used;
e1a25090
AM
592 spin_unlock_irqrestore(&tty->buf.lock, flags);
593 schedule_delayed_work(&tty->buf.work, 1);
594}
595EXPORT_SYMBOL(tty_schedule_flip);
33f0f88f 596
af9b897e
AC
597/**
598 * tty_prepare_flip_string - make room for characters
599 * @tty: tty
600 * @chars: return pointer for character write area
601 * @size: desired size
602 *
33f0f88f
AC
603 * Prepare a block of space in the buffer for data. Returns the length
604 * available and buffer pointer to the space which is now allocated and
605 * accounted for as ready for normal characters. This is used for drivers
606 * that need their own block copy routines into the buffer. There is no
607 * guarantee the buffer is a DMA target!
af9b897e
AC
608 *
609 * Locking: May call functions taking tty->buf.lock
33f0f88f
AC
610 */
611
37bdfb07
AC
612int tty_prepare_flip_string(struct tty_struct *tty, unsigned char **chars,
613 size_t size)
33f0f88f
AC
614{
615 int space = tty_buffer_request_room(tty, size);
808249ce
PF
616 if (likely(space)) {
617 struct tty_buffer *tb = tty->buf.tail;
618 *chars = tb->char_buf_ptr + tb->used;
619 memset(tb->flag_buf_ptr + tb->used, TTY_NORMAL, space);
620 tb->used += space;
621 }
33f0f88f
AC
622 return space;
623}
624
625EXPORT_SYMBOL_GPL(tty_prepare_flip_string);
626
af9b897e
AC
627/**
628 * tty_prepare_flip_string_flags - make room for characters
629 * @tty: tty
630 * @chars: return pointer for character write area
631 * @flags: return pointer for status flag write area
632 * @size: desired size
633 *
33f0f88f
AC
634 * Prepare a block of space in the buffer for data. Returns the length
635 * available and buffer pointer to the space which is now allocated and
636 * accounted for as ready for characters. This is used for drivers
637 * that need their own block copy routines into the buffer. There is no
638 * guarantee the buffer is a DMA target!
af9b897e
AC
639 *
640 * Locking: May call functions taking tty->buf.lock
33f0f88f
AC
641 */
642
37bdfb07
AC
643int tty_prepare_flip_string_flags(struct tty_struct *tty,
644 unsigned char **chars, char **flags, size_t size)
33f0f88f
AC
645{
646 int space = tty_buffer_request_room(tty, size);
808249ce
PF
647 if (likely(space)) {
648 struct tty_buffer *tb = tty->buf.tail;
649 *chars = tb->char_buf_ptr + tb->used;
650 *flags = tb->flag_buf_ptr + tb->used;
651 tb->used += space;
652 }
33f0f88f
AC
653 return space;
654}
655
656EXPORT_SYMBOL_GPL(tty_prepare_flip_string_flags);
657
658
659
af9b897e
AC
660/**
661 * tty_set_termios_ldisc - set ldisc field
662 * @tty: tty structure
663 * @num: line discipline number
664 *
1da177e4 665 * This is probably overkill for real world processors but
37bdfb07 666 * they are not on hot paths so a little discipline won't do
1da177e4 667 * any harm.
af9b897e 668 *
24ec839c 669 * Locking: takes termios_mutex
1da177e4 670 */
37bdfb07 671
1da177e4
LT
672static void tty_set_termios_ldisc(struct tty_struct *tty, int num)
673{
5785c95b 674 mutex_lock(&tty->termios_mutex);
1da177e4 675 tty->termios->c_line = num;
5785c95b 676 mutex_unlock(&tty->termios_mutex);
1da177e4
LT
677}
678
679/*
680 * This guards the refcounted line discipline lists. The lock
681 * must be taken with irqs off because there are hangup path
682 * callers who will do ldisc lookups and cannot sleep.
683 */
37bdfb07 684
1da177e4
LT
685static DEFINE_SPINLOCK(tty_ldisc_lock);
686static DECLARE_WAIT_QUEUE_HEAD(tty_ldisc_wait);
37bdfb07
AC
687/* Line disc dispatch table */
688static struct tty_ldisc tty_ldiscs[NR_LDISCS];
1da177e4 689
af9b897e
AC
690/**
691 * tty_register_ldisc - install a line discipline
692 * @disc: ldisc number
693 * @new_ldisc: pointer to the ldisc object
694 *
695 * Installs a new line discipline into the kernel. The discipline
696 * is set up as unreferenced and then made available to the kernel
697 * from this point onwards.
698 *
699 * Locking:
700 * takes tty_ldisc_lock to guard against ldisc races
701 */
702
1da177e4
LT
703int tty_register_ldisc(int disc, struct tty_ldisc *new_ldisc)
704{
705 unsigned long flags;
706 int ret = 0;
37bdfb07 707
1da177e4
LT
708 if (disc < N_TTY || disc >= NR_LDISCS)
709 return -EINVAL;
37bdfb07 710
1da177e4 711 spin_lock_irqsave(&tty_ldisc_lock, flags);
bfb07599
AD
712 tty_ldiscs[disc] = *new_ldisc;
713 tty_ldiscs[disc].num = disc;
714 tty_ldiscs[disc].flags |= LDISC_FLAG_DEFINED;
715 tty_ldiscs[disc].refcount = 0;
1da177e4 716 spin_unlock_irqrestore(&tty_ldisc_lock, flags);
37bdfb07 717
1da177e4
LT
718 return ret;
719}
1da177e4
LT
720EXPORT_SYMBOL(tty_register_ldisc);
721
af9b897e
AC
722/**
723 * tty_unregister_ldisc - unload a line discipline
724 * @disc: ldisc number
725 * @new_ldisc: pointer to the ldisc object
726 *
727 * Remove a line discipline from the kernel providing it is not
728 * currently in use.
729 *
730 * Locking:
731 * takes tty_ldisc_lock to guard against ldisc races
732 */
733
bfb07599
AD
734int tty_unregister_ldisc(int disc)
735{
736 unsigned long flags;
737 int ret = 0;
738
739 if (disc < N_TTY || disc >= NR_LDISCS)
740 return -EINVAL;
741
742 spin_lock_irqsave(&tty_ldisc_lock, flags);
743 if (tty_ldiscs[disc].refcount)
744 ret = -EBUSY;
745 else
746 tty_ldiscs[disc].flags &= ~LDISC_FLAG_DEFINED;
747 spin_unlock_irqrestore(&tty_ldisc_lock, flags);
748
749 return ret;
750}
751EXPORT_SYMBOL(tty_unregister_ldisc);
752
af9b897e
AC
753/**
754 * tty_ldisc_get - take a reference to an ldisc
755 * @disc: ldisc number
756 *
757 * Takes a reference to a line discipline. Deals with refcounts and
758 * module locking counts. Returns NULL if the discipline is not available.
759 * Returns a pointer to the discipline and bumps the ref count if it is
760 * available
761 *
762 * Locking:
763 * takes tty_ldisc_lock to guard against ldisc races
764 */
765
1da177e4
LT
766struct tty_ldisc *tty_ldisc_get(int disc)
767{
768 unsigned long flags;
769 struct tty_ldisc *ld;
770
771 if (disc < N_TTY || disc >= NR_LDISCS)
772 return NULL;
37bdfb07 773
1da177e4
LT
774 spin_lock_irqsave(&tty_ldisc_lock, flags);
775
776 ld = &tty_ldiscs[disc];
777 /* Check the entry is defined */
37bdfb07 778 if (ld->flags & LDISC_FLAG_DEFINED) {
1da177e4
LT
779 /* If the module is being unloaded we can't use it */
780 if (!try_module_get(ld->owner))
37bdfb07 781 ld = NULL;
1da177e4
LT
782 else /* lock it */
783 ld->refcount++;
37bdfb07 784 } else
1da177e4
LT
785 ld = NULL;
786 spin_unlock_irqrestore(&tty_ldisc_lock, flags);
787 return ld;
788}
789
790EXPORT_SYMBOL_GPL(tty_ldisc_get);
791
af9b897e
AC
792/**
793 * tty_ldisc_put - drop ldisc reference
794 * @disc: ldisc number
795 *
796 * Drop a reference to a line discipline. Manage refcounts and
797 * module usage counts
798 *
799 * Locking:
800 * takes tty_ldisc_lock to guard against ldisc races
801 */
802
1da177e4
LT
803void tty_ldisc_put(int disc)
804{
805 struct tty_ldisc *ld;
806 unsigned long flags;
37bdfb07 807
56ee4827 808 BUG_ON(disc < N_TTY || disc >= NR_LDISCS);
37bdfb07 809
1da177e4
LT
810 spin_lock_irqsave(&tty_ldisc_lock, flags);
811 ld = &tty_ldiscs[disc];
56ee4827
ES
812 BUG_ON(ld->refcount == 0);
813 ld->refcount--;
1da177e4
LT
814 module_put(ld->owner);
815 spin_unlock_irqrestore(&tty_ldisc_lock, flags);
816}
37bdfb07 817
1da177e4
LT
818EXPORT_SYMBOL_GPL(tty_ldisc_put);
819
af9b897e
AC
820/**
821 * tty_ldisc_assign - set ldisc on a tty
822 * @tty: tty to assign
823 * @ld: line discipline
824 *
825 * Install an instance of a line discipline into a tty structure. The
826 * ldisc must have a reference count above zero to ensure it remains/
827 * The tty instance refcount starts at zero.
828 *
829 * Locking:
830 * Caller must hold references
831 */
832
1da177e4
LT
833static void tty_ldisc_assign(struct tty_struct *tty, struct tty_ldisc *ld)
834{
835 tty->ldisc = *ld;
836 tty->ldisc.refcount = 0;
837}
838
839/**
840 * tty_ldisc_try - internal helper
841 * @tty: the tty
842 *
843 * Make a single attempt to grab and bump the refcount on
844 * the tty ldisc. Return 0 on failure or 1 on success. This is
845 * used to implement both the waiting and non waiting versions
846 * of tty_ldisc_ref
af9b897e
AC
847 *
848 * Locking: takes tty_ldisc_lock
1da177e4
LT
849 */
850
851static int tty_ldisc_try(struct tty_struct *tty)
852{
853 unsigned long flags;
854 struct tty_ldisc *ld;
855 int ret = 0;
37bdfb07 856
1da177e4
LT
857 spin_lock_irqsave(&tty_ldisc_lock, flags);
858 ld = &tty->ldisc;
37bdfb07 859 if (test_bit(TTY_LDISC, &tty->flags)) {
1da177e4
LT
860 ld->refcount++;
861 ret = 1;
862 }
863 spin_unlock_irqrestore(&tty_ldisc_lock, flags);
864 return ret;
865}
866
867/**
868 * tty_ldisc_ref_wait - wait for the tty ldisc
869 * @tty: tty device
870 *
37bdfb07
AC
871 * Dereference the line discipline for the terminal and take a
872 * reference to it. If the line discipline is in flux then
1da177e4
LT
873 * wait patiently until it changes.
874 *
875 * Note: Must not be called from an IRQ/timer context. The caller
876 * must also be careful not to hold other locks that will deadlock
877 * against a discipline change, such as an existing ldisc reference
878 * (which we check for)
af9b897e
AC
879 *
880 * Locking: call functions take tty_ldisc_lock
1da177e4 881 */
37bdfb07 882
1da177e4
LT
883struct tty_ldisc *tty_ldisc_ref_wait(struct tty_struct *tty)
884{
885 /* wait_event is a macro */
886 wait_event(tty_ldisc_wait, tty_ldisc_try(tty));
37bdfb07 887 if (tty->ldisc.refcount == 0)
1da177e4
LT
888 printk(KERN_ERR "tty_ldisc_ref_wait\n");
889 return &tty->ldisc;
890}
891
892EXPORT_SYMBOL_GPL(tty_ldisc_ref_wait);
893
894/**
895 * tty_ldisc_ref - get the tty ldisc
896 * @tty: tty device
897 *
37bdfb07
AC
898 * Dereference the line discipline for the terminal and take a
899 * reference to it. If the line discipline is in flux then
1da177e4 900 * return NULL. Can be called from IRQ and timer functions.
af9b897e
AC
901 *
902 * Locking: called functions take tty_ldisc_lock
1da177e4 903 */
37bdfb07 904
1da177e4
LT
905struct tty_ldisc *tty_ldisc_ref(struct tty_struct *tty)
906{
37bdfb07 907 if (tty_ldisc_try(tty))
1da177e4
LT
908 return &tty->ldisc;
909 return NULL;
910}
911
912EXPORT_SYMBOL_GPL(tty_ldisc_ref);
913
914/**
915 * tty_ldisc_deref - free a tty ldisc reference
916 * @ld: reference to free up
917 *
918 * Undoes the effect of tty_ldisc_ref or tty_ldisc_ref_wait. May
919 * be called in IRQ context.
af9b897e
AC
920 *
921 * Locking: takes tty_ldisc_lock
1da177e4 922 */
37bdfb07 923
1da177e4
LT
924void tty_ldisc_deref(struct tty_ldisc *ld)
925{
926 unsigned long flags;
927
56ee4827 928 BUG_ON(ld == NULL);
37bdfb07 929
1da177e4 930 spin_lock_irqsave(&tty_ldisc_lock, flags);
37bdfb07 931 if (ld->refcount == 0)
1da177e4
LT
932 printk(KERN_ERR "tty_ldisc_deref: no references.\n");
933 else
934 ld->refcount--;
37bdfb07 935 if (ld->refcount == 0)
1da177e4
LT
936 wake_up(&tty_ldisc_wait);
937 spin_unlock_irqrestore(&tty_ldisc_lock, flags);
938}
939
940EXPORT_SYMBOL_GPL(tty_ldisc_deref);
941
942/**
943 * tty_ldisc_enable - allow ldisc use
944 * @tty: terminal to activate ldisc on
945 *
946 * Set the TTY_LDISC flag when the line discipline can be called
3a4fa0a2 947 * again. Do necessary wakeups for existing sleepers.
1da177e4
LT
948 *
949 * Note: nobody should set this bit except via this function. Clearing
950 * directly is allowed.
951 */
952
953static void tty_ldisc_enable(struct tty_struct *tty)
954{
955 set_bit(TTY_LDISC, &tty->flags);
956 wake_up(&tty_ldisc_wait);
957}
37bdfb07 958
1da177e4
LT
959/**
960 * tty_set_ldisc - set line discipline
961 * @tty: the terminal to set
962 * @ldisc: the line discipline
963 *
964 * Set the discipline of a tty line. Must be called from a process
965 * context.
af9b897e
AC
966 *
967 * Locking: takes tty_ldisc_lock.
24ec839c 968 * called functions take termios_mutex
1da177e4 969 */
37bdfb07 970
1da177e4
LT
971static int tty_set_ldisc(struct tty_struct *tty, int ldisc)
972{
ff55fe20
JB
973 int retval = 0;
974 struct tty_ldisc o_ldisc;
1da177e4
LT
975 char buf[64];
976 int work;
977 unsigned long flags;
978 struct tty_ldisc *ld;
ff55fe20 979 struct tty_struct *o_tty;
1da177e4
LT
980
981 if ((ldisc < N_TTY) || (ldisc >= NR_LDISCS))
982 return -EINVAL;
983
984restart:
985
1da177e4
LT
986 ld = tty_ldisc_get(ldisc);
987 /* Eduardo Blanco <ejbs@cs.cs.com.uy> */
988 /* Cyrus Durgin <cider@speakeasy.org> */
989 if (ld == NULL) {
990 request_module("tty-ldisc-%d", ldisc);
991 ld = tty_ldisc_get(ldisc);
992 }
993 if (ld == NULL)
994 return -EINVAL;
995
33f0f88f
AC
996 /*
997 * Problem: What do we do if this blocks ?
998 */
999
1da177e4
LT
1000 tty_wait_until_sent(tty, 0);
1001
ff55fe20
JB
1002 if (tty->ldisc.num == ldisc) {
1003 tty_ldisc_put(ldisc);
1004 return 0;
1005 }
1006
ae030e43
PF
1007 /*
1008 * No more input please, we are switching. The new ldisc
1009 * will update this value in the ldisc open function
1010 */
1011
1012 tty->receive_room = 0;
1013
ff55fe20
JB
1014 o_ldisc = tty->ldisc;
1015 o_tty = tty->link;
1016
1da177e4
LT
1017 /*
1018 * Make sure we don't change while someone holds a
1019 * reference to the line discipline. The TTY_LDISC bit
1020 * prevents anyone taking a reference once it is clear.
1021 * We need the lock to avoid racing reference takers.
1022 */
ff55fe20 1023
1da177e4 1024 spin_lock_irqsave(&tty_ldisc_lock, flags);
ff55fe20 1025 if (tty->ldisc.refcount || (o_tty && o_tty->ldisc.refcount)) {
37bdfb07 1026 if (tty->ldisc.refcount) {
ff55fe20
JB
1027 /* Free the new ldisc we grabbed. Must drop the lock
1028 first. */
1029 spin_unlock_irqrestore(&tty_ldisc_lock, flags);
1030 tty_ldisc_put(ldisc);
1031 /*
1032 * There are several reasons we may be busy, including
1033 * random momentary I/O traffic. We must therefore
1034 * retry. We could distinguish between blocking ops
37bdfb07
AC
1035 * and retries if we made tty_ldisc_wait() smarter.
1036 * That is up for discussion.
ff55fe20
JB
1037 */
1038 if (wait_event_interruptible(tty_ldisc_wait, tty->ldisc.refcount == 0) < 0)
1039 return -ERESTARTSYS;
1040 goto restart;
1041 }
37bdfb07 1042 if (o_tty && o_tty->ldisc.refcount) {
ff55fe20
JB
1043 spin_unlock_irqrestore(&tty_ldisc_lock, flags);
1044 tty_ldisc_put(ldisc);
1045 if (wait_event_interruptible(tty_ldisc_wait, o_tty->ldisc.refcount == 0) < 0)
1046 return -ERESTARTSYS;
1047 goto restart;
1048 }
1049 }
37bdfb07
AC
1050 /*
1051 * If the TTY_LDISC bit is set, then we are racing against
1052 * another ldisc change
1053 */
ff55fe20 1054 if (!test_bit(TTY_LDISC, &tty->flags)) {
1da177e4
LT
1055 spin_unlock_irqrestore(&tty_ldisc_lock, flags);
1056 tty_ldisc_put(ldisc);
ff55fe20
JB
1057 ld = tty_ldisc_ref_wait(tty);
1058 tty_ldisc_deref(ld);
1da177e4
LT
1059 goto restart;
1060 }
ff55fe20
JB
1061
1062 clear_bit(TTY_LDISC, &tty->flags);
817d6d3b 1063 if (o_tty)
ff55fe20 1064 clear_bit(TTY_LDISC, &o_tty->flags);
1da177e4 1065 spin_unlock_irqrestore(&tty_ldisc_lock, flags);
ff55fe20 1066
1da177e4
LT
1067 /*
1068 * From this point on we know nobody has an ldisc
1069 * usage reference, nor can they obtain one until
1070 * we say so later on.
1071 */
ff55fe20 1072
33f0f88f 1073 work = cancel_delayed_work(&tty->buf.work);
1da177e4 1074 /*
33f0f88f 1075 * Wait for ->hangup_work and ->buf.work handlers to terminate
1da177e4 1076 */
1da177e4
LT
1077 flush_scheduled_work();
1078 /* Shutdown the current discipline. */
1079 if (tty->ldisc.close)
1080 (tty->ldisc.close)(tty);
1081
1082 /* Now set up the new line discipline. */
1083 tty_ldisc_assign(tty, ld);
1084 tty_set_termios_ldisc(tty, ldisc);
1085 if (tty->ldisc.open)
1086 retval = (tty->ldisc.open)(tty);
1087 if (retval < 0) {
1088 tty_ldisc_put(ldisc);
1089 /* There is an outstanding reference here so this is safe */
1090 tty_ldisc_assign(tty, tty_ldisc_get(o_ldisc.num));
1091 tty_set_termios_ldisc(tty, tty->ldisc.num);
1092 if (tty->ldisc.open && (tty->ldisc.open(tty) < 0)) {
1093 tty_ldisc_put(o_ldisc.num);
1094 /* This driver is always present */
1095 tty_ldisc_assign(tty, tty_ldisc_get(N_TTY));
1096 tty_set_termios_ldisc(tty, N_TTY);
1097 if (tty->ldisc.open) {
1098 int r = tty->ldisc.open(tty);
1099
1100 if (r < 0)
1101 panic("Couldn't open N_TTY ldisc for "
1102 "%s --- error %d.",
1103 tty_name(tty, buf), r);
1104 }
1105 }
1106 }
1107 /* At this point we hold a reference to the new ldisc and a
1108 a reference to the old ldisc. If we ended up flipping back
1109 to the existing ldisc we have two references to it */
37bdfb07 1110
f34d7a5b
AC
1111 if (tty->ldisc.num != o_ldisc.num && tty->ops->set_ldisc)
1112 tty->ops->set_ldisc(tty);
37bdfb07 1113
1da177e4 1114 tty_ldisc_put(o_ldisc.num);
37bdfb07 1115
1da177e4
LT
1116 /*
1117 * Allow ldisc referencing to occur as soon as the driver
1118 * ldisc callback completes.
1119 */
37bdfb07 1120
1da177e4 1121 tty_ldisc_enable(tty);
ff55fe20
JB
1122 if (o_tty)
1123 tty_ldisc_enable(o_tty);
37bdfb07 1124
1da177e4
LT
1125 /* Restart it in case no characters kick it off. Safe if
1126 already running */
ff55fe20 1127 if (work)
33f0f88f 1128 schedule_delayed_work(&tty->buf.work, 1);
1da177e4
LT
1129 return retval;
1130}
1131
af9b897e
AC
1132/**
1133 * get_tty_driver - find device of a tty
1134 * @dev_t: device identifier
1135 * @index: returns the index of the tty
1136 *
1137 * This routine returns a tty driver structure, given a device number
1138 * and also passes back the index number.
1139 *
1140 * Locking: caller must hold tty_mutex
1da177e4 1141 */
af9b897e 1142
1da177e4
LT
1143static struct tty_driver *get_tty_driver(dev_t device, int *index)
1144{
1145 struct tty_driver *p;
1146
1147 list_for_each_entry(p, &tty_drivers, tty_drivers) {
1148 dev_t base = MKDEV(p->major, p->minor_start);
1149 if (device < base || device >= base + p->num)
1150 continue;
1151 *index = device - base;
1152 return p;
1153 }
1154 return NULL;
1155}
1156
f2d937f3
JW
1157#ifdef CONFIG_CONSOLE_POLL
1158
1159/**
1160 * tty_find_polling_driver - find device of a polled tty
1161 * @name: name string to match
1162 * @line: pointer to resulting tty line nr
1163 *
1164 * This routine returns a tty driver structure, given a name
1165 * and the condition that the tty driver is capable of polled
1166 * operation.
1167 */
1168struct tty_driver *tty_find_polling_driver(char *name, int *line)
1169{
1170 struct tty_driver *p, *res = NULL;
1171 int tty_line = 0;
1172 char *str;
1173
1174 mutex_lock(&tty_mutex);
1175 /* Search through the tty devices to look for a match */
1176 list_for_each_entry(p, &tty_drivers, tty_drivers) {
1177 str = name + strlen(p->name);
1178 tty_line = simple_strtoul(str, &str, 10);
1179 if (*str == ',')
1180 str++;
1181 if (*str == '\0')
8da56309 1182 str = NULL;
f2d937f3 1183
f34d7a5b
AC
1184 if (tty_line >= 0 && tty_line <= p->num && p->ops &&
1185 p->ops->poll_init && !p->ops->poll_init(p, tty_line, str)) {
f2d937f3
JW
1186 res = p;
1187 *line = tty_line;
1188 break;
1189 }
1190 }
1191 mutex_unlock(&tty_mutex);
1192
1193 return res;
1194}
1195EXPORT_SYMBOL_GPL(tty_find_polling_driver);
1196#endif
1197
af9b897e
AC
1198/**
1199 * tty_check_change - check for POSIX terminal changes
1200 * @tty: tty to check
1201 *
1202 * If we try to write to, or set the state of, a terminal and we're
1203 * not in the foreground, send a SIGTTOU. If the signal is blocked or
1204 * ignored, go ahead and perform the operation. (POSIX 7.2)
1205 *
978e595f 1206 * Locking: ctrl_lock
1da177e4 1207 */
af9b897e 1208
37bdfb07 1209int tty_check_change(struct tty_struct *tty)
1da177e4 1210{
47f86834
AC
1211 unsigned long flags;
1212 int ret = 0;
1213
1da177e4
LT
1214 if (current->signal->tty != tty)
1215 return 0;
47f86834
AC
1216
1217 spin_lock_irqsave(&tty->ctrl_lock, flags);
1218
ab521dc0
EB
1219 if (!tty->pgrp) {
1220 printk(KERN_WARNING "tty_check_change: tty->pgrp == NULL!\n");
47f86834 1221 goto out;
1da177e4 1222 }
ab521dc0 1223 if (task_pgrp(current) == tty->pgrp)
47f86834 1224 goto out;
1da177e4 1225 if (is_ignored(SIGTTOU))
47f86834
AC
1226 goto out;
1227 if (is_current_pgrp_orphaned()) {
1228 ret = -EIO;
1229 goto out;
1230 }
040b6362
ON
1231 kill_pgrp(task_pgrp(current), SIGTTOU, 1);
1232 set_thread_flag(TIF_SIGPENDING);
47f86834
AC
1233 ret = -ERESTARTSYS;
1234out:
1235 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
1236 return ret;
1da177e4
LT
1237}
1238
1239EXPORT_SYMBOL(tty_check_change);
1240
37bdfb07 1241static ssize_t hung_up_tty_read(struct file *file, char __user *buf,
1da177e4
LT
1242 size_t count, loff_t *ppos)
1243{
1244 return 0;
1245}
1246
37bdfb07 1247static ssize_t hung_up_tty_write(struct file *file, const char __user *buf,
1da177e4
LT
1248 size_t count, loff_t *ppos)
1249{
1250 return -EIO;
1251}
1252
1253/* No kernel lock held - none needed ;) */
37bdfb07 1254static unsigned int hung_up_tty_poll(struct file *filp, poll_table *wait)
1da177e4
LT
1255{
1256 return POLLIN | POLLOUT | POLLERR | POLLHUP | POLLRDNORM | POLLWRNORM;
1257}
1258
04f378b1
AC
1259static long hung_up_tty_ioctl(struct file *file, unsigned int cmd,
1260 unsigned long arg)
38ad2ed0
PF
1261{
1262 return cmd == TIOCSPGRP ? -ENOTTY : -EIO;
1263}
1264
37bdfb07 1265static long hung_up_tty_compat_ioctl(struct file *file,
38ad2ed0 1266 unsigned int cmd, unsigned long arg)
1da177e4
LT
1267{
1268 return cmd == TIOCSPGRP ? -ENOTTY : -EIO;
1269}
1270
62322d25 1271static const struct file_operations tty_fops = {
1da177e4
LT
1272 .llseek = no_llseek,
1273 .read = tty_read,
1274 .write = tty_write,
1275 .poll = tty_poll,
04f378b1 1276 .unlocked_ioctl = tty_ioctl,
e10cc1df 1277 .compat_ioctl = tty_compat_ioctl,
1da177e4
LT
1278 .open = tty_open,
1279 .release = tty_release,
1280 .fasync = tty_fasync,
1281};
1282
1283#ifdef CONFIG_UNIX98_PTYS
62322d25 1284static const struct file_operations ptmx_fops = {
1da177e4
LT
1285 .llseek = no_llseek,
1286 .read = tty_read,
1287 .write = tty_write,
1288 .poll = tty_poll,
04f378b1 1289 .unlocked_ioctl = tty_ioctl,
e10cc1df 1290 .compat_ioctl = tty_compat_ioctl,
1da177e4
LT
1291 .open = ptmx_open,
1292 .release = tty_release,
1293 .fasync = tty_fasync,
1294};
1295#endif
1296
62322d25 1297static const struct file_operations console_fops = {
1da177e4
LT
1298 .llseek = no_llseek,
1299 .read = tty_read,
1300 .write = redirected_tty_write,
1301 .poll = tty_poll,
04f378b1 1302 .unlocked_ioctl = tty_ioctl,
e10cc1df 1303 .compat_ioctl = tty_compat_ioctl,
1da177e4
LT
1304 .open = tty_open,
1305 .release = tty_release,
1306 .fasync = tty_fasync,
1307};
1308
62322d25 1309static const struct file_operations hung_up_tty_fops = {
1da177e4
LT
1310 .llseek = no_llseek,
1311 .read = hung_up_tty_read,
1312 .write = hung_up_tty_write,
1313 .poll = hung_up_tty_poll,
04f378b1 1314 .unlocked_ioctl = hung_up_tty_ioctl,
38ad2ed0 1315 .compat_ioctl = hung_up_tty_compat_ioctl,
1da177e4
LT
1316 .release = tty_release,
1317};
1318
1319static DEFINE_SPINLOCK(redirect_lock);
1320static struct file *redirect;
1321
1322/**
1323 * tty_wakeup - request more data
1324 * @tty: terminal
1325 *
1326 * Internal and external helper for wakeups of tty. This function
1327 * informs the line discipline if present that the driver is ready
1328 * to receive more output data.
1329 */
37bdfb07 1330
1da177e4
LT
1331void tty_wakeup(struct tty_struct *tty)
1332{
1333 struct tty_ldisc *ld;
37bdfb07 1334
1da177e4
LT
1335 if (test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) {
1336 ld = tty_ldisc_ref(tty);
37bdfb07
AC
1337 if (ld) {
1338 if (ld->write_wakeup)
1da177e4
LT
1339 ld->write_wakeup(tty);
1340 tty_ldisc_deref(ld);
1341 }
1342 }
1343 wake_up_interruptible(&tty->write_wait);
1344}
1345
1346EXPORT_SYMBOL_GPL(tty_wakeup);
1347
1348/**
1349 * tty_ldisc_flush - flush line discipline queue
1350 * @tty: tty
1351 *
1352 * Flush the line discipline queue (if any) for this tty. If there
1353 * is no line discipline active this is a no-op.
1354 */
37bdfb07 1355
1da177e4
LT
1356void tty_ldisc_flush(struct tty_struct *tty)
1357{
1358 struct tty_ldisc *ld = tty_ldisc_ref(tty);
37bdfb07
AC
1359 if (ld) {
1360 if (ld->flush_buffer)
1da177e4
LT
1361 ld->flush_buffer(tty);
1362 tty_ldisc_deref(ld);
1363 }
c5c34d48 1364 tty_buffer_flush(tty);
1da177e4
LT
1365}
1366
1367EXPORT_SYMBOL_GPL(tty_ldisc_flush);
edc6afc5
AC
1368
1369/**
1370 * tty_reset_termios - reset terminal state
1371 * @tty: tty to reset
1372 *
1373 * Restore a terminal to the driver default state
1374 */
1375
1376static void tty_reset_termios(struct tty_struct *tty)
1377{
1378 mutex_lock(&tty->termios_mutex);
1379 *tty->termios = tty->driver->init_termios;
1380 tty->termios->c_ispeed = tty_termios_input_baud_rate(tty->termios);
1381 tty->termios->c_ospeed = tty_termios_baud_rate(tty->termios);
1382 mutex_unlock(&tty->termios_mutex);
1383}
37bdfb07 1384
af9b897e
AC
1385/**
1386 * do_tty_hangup - actual handler for hangup events
65f27f38 1387 * @work: tty device
af9b897e
AC
1388 *
1389 * This can be called by the "eventd" kernel thread. That is process
1390 * synchronous but doesn't hold any locks, so we need to make sure we
1391 * have the appropriate locks for what we're doing.
1392 *
1393 * The hangup event clears any pending redirections onto the hung up
1394 * device. It ensures future writes will error and it does the needed
1395 * line discipline hangup and signal delivery. The tty object itself
1396 * remains intact.
1397 *
1398 * Locking:
1399 * BKL
24ec839c
PZ
1400 * redirect lock for undoing redirection
1401 * file list lock for manipulating list of ttys
1402 * tty_ldisc_lock from called functions
1403 * termios_mutex resetting termios data
1404 * tasklist_lock to walk task list for hangup event
1405 * ->siglock to protect ->signal/->sighand
1da177e4 1406 */
65f27f38 1407static void do_tty_hangup(struct work_struct *work)
1da177e4 1408{
65f27f38
DH
1409 struct tty_struct *tty =
1410 container_of(work, struct tty_struct, hangup_work);
37bdfb07 1411 struct file *cons_filp = NULL;
1da177e4
LT
1412 struct file *filp, *f = NULL;
1413 struct task_struct *p;
1414 struct tty_ldisc *ld;
1415 int closecount = 0, n;
47f86834 1416 unsigned long flags;
1da177e4
LT
1417
1418 if (!tty)
1419 return;
1420
1421 /* inuse_filps is protected by the single kernel lock */
1422 lock_kernel();
1423
1424 spin_lock(&redirect_lock);
1425 if (redirect && redirect->private_data == tty) {
1426 f = redirect;
1427 redirect = NULL;
1428 }
1429 spin_unlock(&redirect_lock);
37bdfb07 1430
1da177e4
LT
1431 check_tty_count(tty, "do_tty_hangup");
1432 file_list_lock();
1433 /* This breaks for file handles being sent over AF_UNIX sockets ? */
2f512016 1434 list_for_each_entry(filp, &tty->tty_files, f_u.fu_list) {
1da177e4
LT
1435 if (filp->f_op->write == redirected_tty_write)
1436 cons_filp = filp;
1437 if (filp->f_op->write != tty_write)
1438 continue;
1439 closecount++;
1440 tty_fasync(-1, filp, 0); /* can't block */
1441 filp->f_op = &hung_up_tty_fops;
1442 }
1443 file_list_unlock();
37bdfb07
AC
1444 /*
1445 * FIXME! What are the locking issues here? This may me overdoing
1446 * things... This question is especially important now that we've
1447 * removed the irqlock.
1448 */
1da177e4 1449 ld = tty_ldisc_ref(tty);
37bdfb07
AC
1450 if (ld != NULL) {
1451 /* We may have no line discipline at this point */
1da177e4
LT
1452 if (ld->flush_buffer)
1453 ld->flush_buffer(tty);
f34d7a5b 1454 tty_driver_flush_buffer(tty);
1da177e4
LT
1455 if ((test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) &&
1456 ld->write_wakeup)
1457 ld->write_wakeup(tty);
1458 if (ld->hangup)
1459 ld->hangup(tty);
1460 }
37bdfb07
AC
1461 /*
1462 * FIXME: Once we trust the LDISC code better we can wait here for
1463 * ldisc completion and fix the driver call race
1464 */
1da177e4
LT
1465 wake_up_interruptible(&tty->write_wait);
1466 wake_up_interruptible(&tty->read_wait);
1da177e4
LT
1467 /*
1468 * Shutdown the current line discipline, and reset it to
1469 * N_TTY.
1470 */
1471 if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS)
edc6afc5 1472 tty_reset_termios(tty);
1da177e4
LT
1473 /* Defer ldisc switch */
1474 /* tty_deferred_ldisc_switch(N_TTY);
37bdfb07 1475
1da177e4
LT
1476 This should get done automatically when the port closes and
1477 tty_release is called */
37bdfb07 1478
1da177e4 1479 read_lock(&tasklist_lock);
ab521dc0
EB
1480 if (tty->session) {
1481 do_each_pid_task(tty->session, PIDTYPE_SID, p) {
24ec839c 1482 spin_lock_irq(&p->sighand->siglock);
1da177e4
LT
1483 if (p->signal->tty == tty)
1484 p->signal->tty = NULL;
24ec839c
PZ
1485 if (!p->signal->leader) {
1486 spin_unlock_irq(&p->sighand->siglock);
1da177e4 1487 continue;
24ec839c
PZ
1488 }
1489 __group_send_sig_info(SIGHUP, SEND_SIG_PRIV, p);
1490 __group_send_sig_info(SIGCONT, SEND_SIG_PRIV, p);
ab521dc0 1491 put_pid(p->signal->tty_old_pgrp); /* A noop */
47f86834 1492 spin_lock_irqsave(&tty->ctrl_lock, flags);
ab521dc0
EB
1493 if (tty->pgrp)
1494 p->signal->tty_old_pgrp = get_pid(tty->pgrp);
47f86834 1495 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
24ec839c 1496 spin_unlock_irq(&p->sighand->siglock);
ab521dc0 1497 } while_each_pid_task(tty->session, PIDTYPE_SID, p);
1da177e4
LT
1498 }
1499 read_unlock(&tasklist_lock);
1500
47f86834 1501 spin_lock_irqsave(&tty->ctrl_lock, flags);
1da177e4 1502 tty->flags = 0;
d9c1e9a8
EB
1503 put_pid(tty->session);
1504 put_pid(tty->pgrp);
ab521dc0
EB
1505 tty->session = NULL;
1506 tty->pgrp = NULL;
1da177e4 1507 tty->ctrl_status = 0;
47f86834
AC
1508 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
1509
1da177e4 1510 /*
37bdfb07
AC
1511 * If one of the devices matches a console pointer, we
1512 * cannot just call hangup() because that will cause
1513 * tty->count and state->count to go out of sync.
1514 * So we just call close() the right number of times.
1da177e4
LT
1515 */
1516 if (cons_filp) {
f34d7a5b 1517 if (tty->ops->close)
1da177e4 1518 for (n = 0; n < closecount; n++)
f34d7a5b
AC
1519 tty->ops->close(tty, cons_filp);
1520 } else if (tty->ops->hangup)
1521 (tty->ops->hangup)(tty);
37bdfb07
AC
1522 /*
1523 * We don't want to have driver/ldisc interactions beyond
1524 * the ones we did here. The driver layer expects no
1525 * calls after ->hangup() from the ldisc side. However we
1526 * can't yet guarantee all that.
1527 */
1da177e4
LT
1528 set_bit(TTY_HUPPED, &tty->flags);
1529 if (ld) {
1530 tty_ldisc_enable(tty);
1531 tty_ldisc_deref(ld);
1532 }
1533 unlock_kernel();
1534 if (f)
1535 fput(f);
1536}
1537
af9b897e
AC
1538/**
1539 * tty_hangup - trigger a hangup event
1540 * @tty: tty to hangup
1541 *
1542 * A carrier loss (virtual or otherwise) has occurred on this like
1543 * schedule a hangup sequence to run after this event.
1544 */
1545
37bdfb07 1546void tty_hangup(struct tty_struct *tty)
1da177e4
LT
1547{
1548#ifdef TTY_DEBUG_HANGUP
1549 char buf[64];
1da177e4
LT
1550 printk(KERN_DEBUG "%s hangup...\n", tty_name(tty, buf));
1551#endif
1552 schedule_work(&tty->hangup_work);
1553}
1554
1555EXPORT_SYMBOL(tty_hangup);
1556
af9b897e
AC
1557/**
1558 * tty_vhangup - process vhangup
1559 * @tty: tty to hangup
1560 *
1561 * The user has asked via system call for the terminal to be hung up.
1562 * We do this synchronously so that when the syscall returns the process
3a4fa0a2 1563 * is complete. That guarantee is necessary for security reasons.
af9b897e
AC
1564 */
1565
37bdfb07 1566void tty_vhangup(struct tty_struct *tty)
1da177e4
LT
1567{
1568#ifdef TTY_DEBUG_HANGUP
1569 char buf[64];
1570
1571 printk(KERN_DEBUG "%s vhangup...\n", tty_name(tty, buf));
1572#endif
65f27f38 1573 do_tty_hangup(&tty->hangup_work);
1da177e4 1574}
37bdfb07 1575
1da177e4
LT
1576EXPORT_SYMBOL(tty_vhangup);
1577
af9b897e
AC
1578/**
1579 * tty_hung_up_p - was tty hung up
1580 * @filp: file pointer of tty
1581 *
1582 * Return true if the tty has been subject to a vhangup or a carrier
1583 * loss
1584 */
1585
37bdfb07 1586int tty_hung_up_p(struct file *filp)
1da177e4
LT
1587{
1588 return (filp->f_op == &hung_up_tty_fops);
1589}
1590
1591EXPORT_SYMBOL(tty_hung_up_p);
1592
522ed776 1593/**
37bdfb07
AC
1594 * is_tty - checker whether file is a TTY
1595 * @filp: file handle that may be a tty
1596 *
1597 * Check if the file handle is a tty handle.
522ed776 1598 */
37bdfb07 1599
522ed776
MT
1600int is_tty(struct file *filp)
1601{
1602 return filp->f_op->read == tty_read
1603 || filp->f_op->read == hung_up_tty_read;
1604}
1605
ab521dc0 1606static void session_clear_tty(struct pid *session)
24ec839c
PZ
1607{
1608 struct task_struct *p;
ab521dc0 1609 do_each_pid_task(session, PIDTYPE_SID, p) {
24ec839c 1610 proc_clear_tty(p);
ab521dc0 1611 } while_each_pid_task(session, PIDTYPE_SID, p);
24ec839c
PZ
1612}
1613
af9b897e
AC
1614/**
1615 * disassociate_ctty - disconnect controlling tty
1616 * @on_exit: true if exiting so need to "hang up" the session
1da177e4 1617 *
af9b897e
AC
1618 * This function is typically called only by the session leader, when
1619 * it wants to disassociate itself from its controlling tty.
1620 *
1621 * It performs the following functions:
1da177e4
LT
1622 * (1) Sends a SIGHUP and SIGCONT to the foreground process group
1623 * (2) Clears the tty from being controlling the session
1624 * (3) Clears the controlling tty for all processes in the
1625 * session group.
1626 *
af9b897e
AC
1627 * The argument on_exit is set to 1 if called when a process is
1628 * exiting; it is 0 if called by the ioctl TIOCNOTTY.
1629 *
24ec839c 1630 * Locking:
af9b897e 1631 * BKL is taken for hysterical raisins
24ec839c
PZ
1632 * tty_mutex is taken to protect tty
1633 * ->siglock is taken to protect ->signal/->sighand
1634 * tasklist_lock is taken to walk process list for sessions
1635 * ->siglock is taken to protect ->signal/->sighand
1da177e4 1636 */
af9b897e 1637
1da177e4
LT
1638void disassociate_ctty(int on_exit)
1639{
1640 struct tty_struct *tty;
ab521dc0 1641 struct pid *tty_pgrp = NULL;
1da177e4 1642
1da177e4 1643
70522e12 1644 mutex_lock(&tty_mutex);
24ec839c 1645 tty = get_current_tty();
1da177e4 1646 if (tty) {
ab521dc0 1647 tty_pgrp = get_pid(tty->pgrp);
70522e12 1648 mutex_unlock(&tty_mutex);
04f378b1 1649 lock_kernel();
24ec839c 1650 /* XXX: here we race, there is nothing protecting tty */
1da177e4
LT
1651 if (on_exit && tty->driver->type != TTY_DRIVER_TYPE_PTY)
1652 tty_vhangup(tty);
04f378b1 1653 unlock_kernel();
680a9671 1654 } else if (on_exit) {
ab521dc0 1655 struct pid *old_pgrp;
680a9671
EB
1656 spin_lock_irq(&current->sighand->siglock);
1657 old_pgrp = current->signal->tty_old_pgrp;
ab521dc0 1658 current->signal->tty_old_pgrp = NULL;
680a9671 1659 spin_unlock_irq(&current->sighand->siglock);
24ec839c 1660 if (old_pgrp) {
ab521dc0
EB
1661 kill_pgrp(old_pgrp, SIGHUP, on_exit);
1662 kill_pgrp(old_pgrp, SIGCONT, on_exit);
1663 put_pid(old_pgrp);
1da177e4 1664 }
70522e12 1665 mutex_unlock(&tty_mutex);
1da177e4
LT
1666 return;
1667 }
ab521dc0
EB
1668 if (tty_pgrp) {
1669 kill_pgrp(tty_pgrp, SIGHUP, on_exit);
1da177e4 1670 if (!on_exit)
ab521dc0
EB
1671 kill_pgrp(tty_pgrp, SIGCONT, on_exit);
1672 put_pid(tty_pgrp);
1da177e4
LT
1673 }
1674
24ec839c 1675 spin_lock_irq(&current->sighand->siglock);
2a65f1d9 1676 put_pid(current->signal->tty_old_pgrp);
23cac8de 1677 current->signal->tty_old_pgrp = NULL;
24ec839c
PZ
1678 spin_unlock_irq(&current->sighand->siglock);
1679
1680 mutex_lock(&tty_mutex);
1681 /* It is possible that do_tty_hangup has free'd this tty */
1682 tty = get_current_tty();
1683 if (tty) {
47f86834
AC
1684 unsigned long flags;
1685 spin_lock_irqsave(&tty->ctrl_lock, flags);
ab521dc0
EB
1686 put_pid(tty->session);
1687 put_pid(tty->pgrp);
1688 tty->session = NULL;
1689 tty->pgrp = NULL;
47f86834 1690 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
24ec839c
PZ
1691 } else {
1692#ifdef TTY_DEBUG_HANGUP
1693 printk(KERN_DEBUG "error attempted to write to tty [0x%p]"
1694 " = NULL", tty);
1695#endif
1696 }
1697 mutex_unlock(&tty_mutex);
1da177e4
LT
1698
1699 /* Now clear signal->tty under the lock */
1700 read_lock(&tasklist_lock);
ab521dc0 1701 session_clear_tty(task_session(current));
1da177e4 1702 read_unlock(&tasklist_lock);
1da177e4
LT
1703}
1704
98a27ba4
EB
1705/**
1706 *
1707 * no_tty - Ensure the current process does not have a controlling tty
1708 */
1709void no_tty(void)
1710{
1711 struct task_struct *tsk = current;
04f378b1 1712 lock_kernel();
98a27ba4
EB
1713 if (tsk->signal->leader)
1714 disassociate_ctty(0);
04f378b1 1715 unlock_kernel();
98a27ba4
EB
1716 proc_clear_tty(tsk);
1717}
1718
af9b897e
AC
1719
1720/**
beb7dd86 1721 * stop_tty - propagate flow control
af9b897e
AC
1722 * @tty: tty to stop
1723 *
1724 * Perform flow control to the driver. For PTY/TTY pairs we
beb7dd86 1725 * must also propagate the TIOCKPKT status. May be called
af9b897e
AC
1726 * on an already stopped device and will not re-call the driver
1727 * method.
1728 *
1729 * This functionality is used by both the line disciplines for
1730 * halting incoming flow and by the driver. It may therefore be
1731 * called from any context, may be under the tty atomic_write_lock
1732 * but not always.
1733 *
1734 * Locking:
04f378b1 1735 * Uses the tty control lock internally
af9b897e
AC
1736 */
1737
1da177e4
LT
1738void stop_tty(struct tty_struct *tty)
1739{
04f378b1
AC
1740 unsigned long flags;
1741 spin_lock_irqsave(&tty->ctrl_lock, flags);
1742 if (tty->stopped) {
1743 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
1da177e4 1744 return;
04f378b1 1745 }
1da177e4
LT
1746 tty->stopped = 1;
1747 if (tty->link && tty->link->packet) {
1748 tty->ctrl_status &= ~TIOCPKT_START;
1749 tty->ctrl_status |= TIOCPKT_STOP;
1750 wake_up_interruptible(&tty->link->read_wait);
1751 }
04f378b1 1752 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
f34d7a5b
AC
1753 if (tty->ops->stop)
1754 (tty->ops->stop)(tty);
1da177e4
LT
1755}
1756
1757EXPORT_SYMBOL(stop_tty);
1758
af9b897e 1759/**
beb7dd86 1760 * start_tty - propagate flow control
af9b897e
AC
1761 * @tty: tty to start
1762 *
1763 * Start a tty that has been stopped if at all possible. Perform
3a4fa0a2 1764 * any necessary wakeups and propagate the TIOCPKT status. If this
af9b897e
AC
1765 * is the tty was previous stopped and is being started then the
1766 * driver start method is invoked and the line discipline woken.
1767 *
1768 * Locking:
04f378b1 1769 * ctrl_lock
af9b897e
AC
1770 */
1771
1da177e4
LT
1772void start_tty(struct tty_struct *tty)
1773{
04f378b1
AC
1774 unsigned long flags;
1775 spin_lock_irqsave(&tty->ctrl_lock, flags);
1776 if (!tty->stopped || tty->flow_stopped) {
1777 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
1da177e4 1778 return;
04f378b1 1779 }
1da177e4
LT
1780 tty->stopped = 0;
1781 if (tty->link && tty->link->packet) {
1782 tty->ctrl_status &= ~TIOCPKT_STOP;
1783 tty->ctrl_status |= TIOCPKT_START;
1784 wake_up_interruptible(&tty->link->read_wait);
1785 }
04f378b1 1786 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
f34d7a5b
AC
1787 if (tty->ops->start)
1788 (tty->ops->start)(tty);
1da177e4
LT
1789 /* If we have a running line discipline it may need kicking */
1790 tty_wakeup(tty);
1da177e4
LT
1791}
1792
1793EXPORT_SYMBOL(start_tty);
1794
af9b897e
AC
1795/**
1796 * tty_read - read method for tty device files
1797 * @file: pointer to tty file
1798 * @buf: user buffer
1799 * @count: size of user buffer
1800 * @ppos: unused
1801 *
1802 * Perform the read system call function on this terminal device. Checks
1803 * for hung up devices before calling the line discipline method.
1804 *
1805 * Locking:
47f86834
AC
1806 * Locks the line discipline internally while needed. Multiple
1807 * read calls may be outstanding in parallel.
af9b897e
AC
1808 */
1809
37bdfb07 1810static ssize_t tty_read(struct file *file, char __user *buf, size_t count,
1da177e4
LT
1811 loff_t *ppos)
1812{
1813 int i;
37bdfb07 1814 struct tty_struct *tty;
1da177e4
LT
1815 struct inode *inode;
1816 struct tty_ldisc *ld;
1817
1818 tty = (struct tty_struct *)file->private_data;
a7113a96 1819 inode = file->f_path.dentry->d_inode;
1da177e4
LT
1820 if (tty_paranoia_check(tty, inode, "tty_read"))
1821 return -EIO;
1822 if (!tty || (test_bit(TTY_IO_ERROR, &tty->flags)))
1823 return -EIO;
1824
1825 /* We want to wait for the line discipline to sort out in this
1826 situation */
1827 ld = tty_ldisc_ref_wait(tty);
1da177e4 1828 if (ld->read)
37bdfb07 1829 i = (ld->read)(tty, file, buf, count);
1da177e4
LT
1830 else
1831 i = -EIO;
1832 tty_ldisc_deref(ld);
1da177e4
LT
1833 if (i > 0)
1834 inode->i_atime = current_fs_time(inode->i_sb);
1835 return i;
1836}
1837
9c1729db
AC
1838void tty_write_unlock(struct tty_struct *tty)
1839{
1840 mutex_unlock(&tty->atomic_write_lock);
1841 wake_up_interruptible(&tty->write_wait);
1842}
1843
1844int tty_write_lock(struct tty_struct *tty, int ndelay)
1845{
1846 if (!mutex_trylock(&tty->atomic_write_lock)) {
1847 if (ndelay)
1848 return -EAGAIN;
1849 if (mutex_lock_interruptible(&tty->atomic_write_lock))
1850 return -ERESTARTSYS;
1851 }
1852 return 0;
1853}
1854
1da177e4
LT
1855/*
1856 * Split writes up in sane blocksizes to avoid
1857 * denial-of-service type attacks
1858 */
1859static inline ssize_t do_tty_write(
1860 ssize_t (*write)(struct tty_struct *, struct file *, const unsigned char *, size_t),
1861 struct tty_struct *tty,
1862 struct file *file,
1863 const char __user *buf,
1864 size_t count)
1865{
9c1729db 1866 ssize_t ret, written = 0;
1da177e4 1867 unsigned int chunk;
37bdfb07 1868
9c1729db
AC
1869 ret = tty_write_lock(tty, file->f_flags & O_NDELAY);
1870 if (ret < 0)
1871 return ret;
1da177e4
LT
1872
1873 /*
1874 * We chunk up writes into a temporary buffer. This
1875 * simplifies low-level drivers immensely, since they
1876 * don't have locking issues and user mode accesses.
1877 *
1878 * But if TTY_NO_WRITE_SPLIT is set, we should use a
1879 * big chunk-size..
1880 *
1881 * The default chunk-size is 2kB, because the NTTY
1882 * layer has problems with bigger chunks. It will
1883 * claim to be able to handle more characters than
1884 * it actually does.
af9b897e
AC
1885 *
1886 * FIXME: This can probably go away now except that 64K chunks
1887 * are too likely to fail unless switched to vmalloc...
1da177e4
LT
1888 */
1889 chunk = 2048;
1890 if (test_bit(TTY_NO_WRITE_SPLIT, &tty->flags))
1891 chunk = 65536;
1892 if (count < chunk)
1893 chunk = count;
1894
70522e12 1895 /* write_buf/write_cnt is protected by the atomic_write_lock mutex */
1da177e4
LT
1896 if (tty->write_cnt < chunk) {
1897 unsigned char *buf;
1898
1899 if (chunk < 1024)
1900 chunk = 1024;
1901
1902 buf = kmalloc(chunk, GFP_KERNEL);
1903 if (!buf) {
9c1729db
AC
1904 ret = -ENOMEM;
1905 goto out;
1da177e4
LT
1906 }
1907 kfree(tty->write_buf);
1908 tty->write_cnt = chunk;
1909 tty->write_buf = buf;
1910 }
1911
1912 /* Do the write .. */
1913 for (;;) {
1914 size_t size = count;
1915 if (size > chunk)
1916 size = chunk;
1917 ret = -EFAULT;
1918 if (copy_from_user(tty->write_buf, buf, size))
1919 break;
1da177e4 1920 ret = write(tty, file, tty->write_buf, size);
1da177e4
LT
1921 if (ret <= 0)
1922 break;
1923 written += ret;
1924 buf += ret;
1925 count -= ret;
1926 if (!count)
1927 break;
1928 ret = -ERESTARTSYS;
1929 if (signal_pending(current))
1930 break;
1931 cond_resched();
1932 }
1933 if (written) {
a7113a96 1934 struct inode *inode = file->f_path.dentry->d_inode;
1da177e4
LT
1935 inode->i_mtime = current_fs_time(inode->i_sb);
1936 ret = written;
1937 }
9c1729db
AC
1938out:
1939 tty_write_unlock(tty);
1da177e4
LT
1940 return ret;
1941}
1942
1943
af9b897e
AC
1944/**
1945 * tty_write - write method for tty device file
1946 * @file: tty file pointer
1947 * @buf: user data to write
1948 * @count: bytes to write
1949 * @ppos: unused
1950 *
1951 * Write data to a tty device via the line discipline.
1952 *
1953 * Locking:
1954 * Locks the line discipline as required
1955 * Writes to the tty driver are serialized by the atomic_write_lock
1956 * and are then processed in chunks to the device. The line discipline
1957 * write method will not be involked in parallel for each device
1958 * The line discipline write method is called under the big
1959 * kernel lock for historical reasons. New code should not rely on this.
1960 */
1961
37bdfb07
AC
1962static ssize_t tty_write(struct file *file, const char __user *buf,
1963 size_t count, loff_t *ppos)
1da177e4 1964{
37bdfb07 1965 struct tty_struct *tty;
a7113a96 1966 struct inode *inode = file->f_path.dentry->d_inode;
1da177e4
LT
1967 ssize_t ret;
1968 struct tty_ldisc *ld;
37bdfb07 1969
1da177e4
LT
1970 tty = (struct tty_struct *)file->private_data;
1971 if (tty_paranoia_check(tty, inode, "tty_write"))
1972 return -EIO;
f34d7a5b 1973 if (!tty || !tty->ops->write ||
37bdfb07
AC
1974 (test_bit(TTY_IO_ERROR, &tty->flags)))
1975 return -EIO;
f34d7a5b
AC
1976 /* Short term debug to catch buggy drivers */
1977 if (tty->ops->write_room == NULL)
1978 printk(KERN_ERR "tty driver %s lacks a write_room method.\n",
1979 tty->driver->name);
37bdfb07 1980 ld = tty_ldisc_ref_wait(tty);
1da177e4
LT
1981 if (!ld->write)
1982 ret = -EIO;
1983 else
1984 ret = do_tty_write(ld->write, tty, file, buf, count);
1985 tty_ldisc_deref(ld);
1986 return ret;
1987}
1988
37bdfb07
AC
1989ssize_t redirected_tty_write(struct file *file, const char __user *buf,
1990 size_t count, loff_t *ppos)
1da177e4
LT
1991{
1992 struct file *p = NULL;
1993
1994 spin_lock(&redirect_lock);
1995 if (redirect) {
1996 get_file(redirect);
1997 p = redirect;
1998 }
1999 spin_unlock(&redirect_lock);
2000
2001 if (p) {
2002 ssize_t res;
2003 res = vfs_write(p, buf, count, &p->f_pos);
2004 fput(p);
2005 return res;
2006 }
1da177e4
LT
2007 return tty_write(file, buf, count, ppos);
2008}
2009
2010static char ptychar[] = "pqrstuvwxyzabcde";
2011
af9b897e
AC
2012/**
2013 * pty_line_name - generate name for a pty
2014 * @driver: the tty driver in use
2015 * @index: the minor number
2016 * @p: output buffer of at least 6 bytes
2017 *
2018 * Generate a name from a driver reference and write it to the output
2019 * buffer.
2020 *
2021 * Locking: None
2022 */
2023static void pty_line_name(struct tty_driver *driver, int index, char *p)
1da177e4
LT
2024{
2025 int i = index + driver->name_base;
2026 /* ->name is initialized to "ttyp", but "tty" is expected */
2027 sprintf(p, "%s%c%x",
37bdfb07
AC
2028 driver->subtype == PTY_TYPE_SLAVE ? "tty" : driver->name,
2029 ptychar[i >> 4 & 0xf], i & 0xf);
1da177e4
LT
2030}
2031
af9b897e
AC
2032/**
2033 * pty_line_name - generate name for a tty
2034 * @driver: the tty driver in use
2035 * @index: the minor number
2036 * @p: output buffer of at least 7 bytes
2037 *
2038 * Generate a name from a driver reference and write it to the output
2039 * buffer.
2040 *
2041 * Locking: None
2042 */
2043static void tty_line_name(struct tty_driver *driver, int index, char *p)
1da177e4
LT
2044{
2045 sprintf(p, "%s%d", driver->name, index + driver->name_base);
2046}
2047
af9b897e
AC
2048/**
2049 * init_dev - initialise a tty device
2050 * @driver: tty driver we are opening a device on
2051 * @idx: device index
2052 * @tty: returned tty structure
2053 *
2054 * Prepare a tty device. This may not be a "new" clean device but
2055 * could also be an active device. The pty drivers require special
2056 * handling because of this.
2057 *
2058 * Locking:
2059 * The function is called under the tty_mutex, which
2060 * protects us from the tty struct or driver itself going away.
2061 *
2062 * On exit the tty device has the line discipline attached and
2063 * a reference count of 1. If a pair was created for pty/tty use
2064 * and the other was a pty master then it too has a reference count of 1.
2065 *
1da177e4 2066 * WSH 06/09/97: Rewritten to remove races and properly clean up after a
70522e12
IM
2067 * failed open. The new code protects the open with a mutex, so it's
2068 * really quite straightforward. The mutex locking can probably be
1da177e4
LT
2069 * relaxed for the (most common) case of reopening a tty.
2070 */
af9b897e 2071
1da177e4
LT
2072static int init_dev(struct tty_driver *driver, int idx,
2073 struct tty_struct **ret_tty)
2074{
2075 struct tty_struct *tty, *o_tty;
edc6afc5
AC
2076 struct ktermios *tp, **tp_loc, *o_tp, **o_tp_loc;
2077 struct ktermios *ltp, **ltp_loc, *o_ltp, **o_ltp_loc;
af9b897e 2078 int retval = 0;
1da177e4
LT
2079
2080 /* check whether we're reopening an existing tty */
2081 if (driver->flags & TTY_DRIVER_DEVPTS_MEM) {
2082 tty = devpts_get_tty(idx);
5a39e8c6
ASRF
2083 /*
2084 * If we don't have a tty here on a slave open, it's because
2085 * the master already started the close process and there's
2086 * no relation between devpts file and tty anymore.
2087 */
2088 if (!tty && driver->subtype == PTY_TYPE_SLAVE) {
2089 retval = -EIO;
2090 goto end_init;
2091 }
2092 /*
2093 * It's safe from now on because init_dev() is called with
2094 * tty_mutex held and release_dev() won't change tty->count
2095 * or tty->flags without having to grab tty_mutex
2096 */
1da177e4
LT
2097 if (tty && driver->subtype == PTY_TYPE_MASTER)
2098 tty = tty->link;
2099 } else {
2100 tty = driver->ttys[idx];
2101 }
2102 if (tty) goto fast_track;
2103
2104 /*
2105 * First time open is complex, especially for PTY devices.
2106 * This code guarantees that either everything succeeds and the
2107 * TTY is ready for operation, or else the table slots are vacated
37bdfb07 2108 * and the allocated memory released. (Except that the termios
1da177e4
LT
2109 * and locked termios may be retained.)
2110 */
2111
2112 if (!try_module_get(driver->owner)) {
2113 retval = -ENODEV;
2114 goto end_init;
2115 }
2116
2117 o_tty = NULL;
2118 tp = o_tp = NULL;
2119 ltp = o_ltp = NULL;
2120
2121 tty = alloc_tty_struct();
37bdfb07 2122 if (!tty)
1da177e4
LT
2123 goto fail_no_mem;
2124 initialize_tty_struct(tty);
2125 tty->driver = driver;
f34d7a5b 2126 tty->ops = driver->ops;
1da177e4
LT
2127 tty->index = idx;
2128 tty_line_name(driver, idx, tty->name);
2129
2130 if (driver->flags & TTY_DRIVER_DEVPTS_MEM) {
2131 tp_loc = &tty->termios;
2132 ltp_loc = &tty->termios_locked;
2133 } else {
2134 tp_loc = &driver->termios[idx];
2135 ltp_loc = &driver->termios_locked[idx];
2136 }
2137
2138 if (!*tp_loc) {
abcb1ff3 2139 tp = kmalloc(sizeof(struct ktermios), GFP_KERNEL);
1da177e4
LT
2140 if (!tp)
2141 goto free_mem_out;
2142 *tp = driver->init_termios;
2143 }
2144
2145 if (!*ltp_loc) {
506eb99a 2146 ltp = kzalloc(sizeof(struct ktermios), GFP_KERNEL);
1da177e4
LT
2147 if (!ltp)
2148 goto free_mem_out;
1da177e4
LT
2149 }
2150
2151 if (driver->type == TTY_DRIVER_TYPE_PTY) {
2152 o_tty = alloc_tty_struct();
2153 if (!o_tty)
2154 goto free_mem_out;
2155 initialize_tty_struct(o_tty);
2156 o_tty->driver = driver->other;
f34d7a5b 2157 o_tty->ops = driver->ops;
1da177e4
LT
2158 o_tty->index = idx;
2159 tty_line_name(driver->other, idx, o_tty->name);
2160
2161 if (driver->flags & TTY_DRIVER_DEVPTS_MEM) {
2162 o_tp_loc = &o_tty->termios;
2163 o_ltp_loc = &o_tty->termios_locked;
2164 } else {
2165 o_tp_loc = &driver->other->termios[idx];
2166 o_ltp_loc = &driver->other->termios_locked[idx];
2167 }
2168
2169 if (!*o_tp_loc) {
abcb1ff3 2170 o_tp = kmalloc(sizeof(struct ktermios), GFP_KERNEL);
1da177e4
LT
2171 if (!o_tp)
2172 goto free_mem_out;
2173 *o_tp = driver->other->init_termios;
2174 }
2175
2176 if (!*o_ltp_loc) {
506eb99a 2177 o_ltp = kzalloc(sizeof(struct ktermios), GFP_KERNEL);
1da177e4
LT
2178 if (!o_ltp)
2179 goto free_mem_out;
1da177e4
LT
2180 }
2181
2182 /*
2183 * Everything allocated ... set up the o_tty structure.
2184 */
37bdfb07 2185 if (!(driver->other->flags & TTY_DRIVER_DEVPTS_MEM))
1da177e4 2186 driver->other->ttys[idx] = o_tty;
1da177e4
LT
2187 if (!*o_tp_loc)
2188 *o_tp_loc = o_tp;
2189 if (!*o_ltp_loc)
2190 *o_ltp_loc = o_ltp;
2191 o_tty->termios = *o_tp_loc;
2192 o_tty->termios_locked = *o_ltp_loc;
2193 driver->other->refcount++;
2194 if (driver->subtype == PTY_TYPE_MASTER)
2195 o_tty->count++;
2196
2197 /* Establish the links in both directions */
2198 tty->link = o_tty;
2199 o_tty->link = tty;
2200 }
2201
37bdfb07 2202 /*
1da177e4 2203 * All structures have been allocated, so now we install them.
d5698c28 2204 * Failures after this point use release_tty to clean up, so
1da177e4
LT
2205 * there's no need to null out the local pointers.
2206 */
37bdfb07 2207 if (!(driver->flags & TTY_DRIVER_DEVPTS_MEM))
1da177e4 2208 driver->ttys[idx] = tty;
37bdfb07 2209
1da177e4
LT
2210 if (!*tp_loc)
2211 *tp_loc = tp;
2212 if (!*ltp_loc)
2213 *ltp_loc = ltp;
2214 tty->termios = *tp_loc;
2215 tty->termios_locked = *ltp_loc;
edc6afc5
AC
2216 /* Compatibility until drivers always set this */
2217 tty->termios->c_ispeed = tty_termios_input_baud_rate(tty->termios);
2218 tty->termios->c_ospeed = tty_termios_baud_rate(tty->termios);
1da177e4
LT
2219 driver->refcount++;
2220 tty->count++;
2221
37bdfb07 2222 /*
1da177e4 2223 * Structures all installed ... call the ldisc open routines.
d5698c28
CH
2224 * If we fail here just call release_tty to clean up. No need
2225 * to decrement the use counts, as release_tty doesn't care.
1da177e4
LT
2226 */
2227
2228 if (tty->ldisc.open) {
2229 retval = (tty->ldisc.open)(tty);
2230 if (retval)
2231 goto release_mem_out;
2232 }
2233 if (o_tty && o_tty->ldisc.open) {
2234 retval = (o_tty->ldisc.open)(o_tty);
2235 if (retval) {
2236 if (tty->ldisc.close)
2237 (tty->ldisc.close)(tty);
2238 goto release_mem_out;
2239 }
2240 tty_ldisc_enable(o_tty);
2241 }
2242 tty_ldisc_enable(tty);
2243 goto success;
2244
2245 /*
2246 * This fast open can be used if the tty is already open.
2247 * No memory is allocated, and the only failures are from
2248 * attempting to open a closing tty or attempting multiple
2249 * opens on a pty master.
2250 */
2251fast_track:
2252 if (test_bit(TTY_CLOSING, &tty->flags)) {
2253 retval = -EIO;
2254 goto end_init;
2255 }
2256 if (driver->type == TTY_DRIVER_TYPE_PTY &&
2257 driver->subtype == PTY_TYPE_MASTER) {
2258 /*
37bdfb07 2259 * special case for PTY masters: only one open permitted,
1da177e4
LT
2260 * and the slave side open count is incremented as well.
2261 */
2262 if (tty->count) {
2263 retval = -EIO;
2264 goto end_init;
2265 }
2266 tty->link->count++;
2267 }
2268 tty->count++;
2269 tty->driver = driver; /* N.B. why do this every time?? */
2270
2271 /* FIXME */
37bdfb07 2272 if (!test_bit(TTY_LDISC, &tty->flags))
1da177e4
LT
2273 printk(KERN_ERR "init_dev but no ldisc\n");
2274success:
2275 *ret_tty = tty;
37bdfb07 2276
70522e12 2277 /* All paths come through here to release the mutex */
1da177e4
LT
2278end_init:
2279 return retval;
2280
2281 /* Release locally allocated memory ... nothing placed in slots */
2282free_mem_out:
735d5661 2283 kfree(o_tp);
1da177e4
LT
2284 if (o_tty)
2285 free_tty_struct(o_tty);
735d5661
JJ
2286 kfree(ltp);
2287 kfree(tp);
1da177e4
LT
2288 free_tty_struct(tty);
2289
2290fail_no_mem:
2291 module_put(driver->owner);
2292 retval = -ENOMEM;
2293 goto end_init;
2294
d5698c28 2295 /* call the tty release_tty routine to clean out this slot */
1da177e4 2296release_mem_out:
4050914f
AM
2297 if (printk_ratelimit())
2298 printk(KERN_INFO "init_dev: ldisc open failed, "
2299 "clearing slot %d\n", idx);
d5698c28 2300 release_tty(tty, idx);
1da177e4
LT
2301 goto end_init;
2302}
2303
af9b897e 2304/**
d5698c28 2305 * release_one_tty - release tty structure memory
af9b897e
AC
2306 *
2307 * Releases memory associated with a tty structure, and clears out the
2308 * driver table slots. This function is called when a device is no longer
2309 * in use. It also gets called when setup of a device fails.
2310 *
2311 * Locking:
2312 * tty_mutex - sometimes only
2313 * takes the file list lock internally when working on the list
2314 * of ttys that the driver keeps.
2315 * FIXME: should we require tty_mutex is held here ??
1da177e4 2316 */
d5698c28 2317static void release_one_tty(struct tty_struct *tty, int idx)
1da177e4 2318{
1da177e4 2319 int devpts = tty->driver->flags & TTY_DRIVER_DEVPTS_MEM;
d5698c28 2320 struct ktermios *tp;
1da177e4
LT
2321
2322 if (!devpts)
2323 tty->driver->ttys[idx] = NULL;
d5698c28 2324
1da177e4
LT
2325 if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS) {
2326 tp = tty->termios;
2327 if (!devpts)
2328 tty->driver->termios[idx] = NULL;
2329 kfree(tp);
2330
2331 tp = tty->termios_locked;
2332 if (!devpts)
2333 tty->driver->termios_locked[idx] = NULL;
2334 kfree(tp);
2335 }
2336
d5698c28 2337
1da177e4
LT
2338 tty->magic = 0;
2339 tty->driver->refcount--;
d5698c28 2340
1da177e4
LT
2341 file_list_lock();
2342 list_del_init(&tty->tty_files);
2343 file_list_unlock();
d5698c28 2344
1da177e4
LT
2345 free_tty_struct(tty);
2346}
2347
d5698c28
CH
2348/**
2349 * release_tty - release tty structure memory
2350 *
2351 * Release both @tty and a possible linked partner (think pty pair),
2352 * and decrement the refcount of the backing module.
2353 *
2354 * Locking:
2355 * tty_mutex - sometimes only
2356 * takes the file list lock internally when working on the list
2357 * of ttys that the driver keeps.
2358 * FIXME: should we require tty_mutex is held here ??
2359 */
2360static void release_tty(struct tty_struct *tty, int idx)
2361{
2362 struct tty_driver *driver = tty->driver;
2363
2364 if (tty->link)
2365 release_one_tty(tty->link, idx);
2366 release_one_tty(tty, idx);
2367 module_put(driver->owner);
2368}
2369
1da177e4
LT
2370/*
2371 * Even releasing the tty structures is a tricky business.. We have
2372 * to be very careful that the structures are all released at the
2373 * same time, as interrupts might otherwise get the wrong pointers.
2374 *
2375 * WSH 09/09/97: rewritten to avoid some nasty race conditions that could
2376 * lead to double frees or releasing memory still in use.
2377 */
37bdfb07 2378static void release_dev(struct file *filp)
1da177e4
LT
2379{
2380 struct tty_struct *tty, *o_tty;
2381 int pty_master, tty_closing, o_tty_closing, do_sleep;
14a6283e 2382 int devpts;
1da177e4
LT
2383 int idx;
2384 char buf[64];
2385 unsigned long flags;
37bdfb07 2386
1da177e4 2387 tty = (struct tty_struct *)filp->private_data;
37bdfb07
AC
2388 if (tty_paranoia_check(tty, filp->f_path.dentry->d_inode,
2389 "release_dev"))
1da177e4
LT
2390 return;
2391
2392 check_tty_count(tty, "release_dev");
2393
2394 tty_fasync(-1, filp, 0);
2395
2396 idx = tty->index;
2397 pty_master = (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
2398 tty->driver->subtype == PTY_TYPE_MASTER);
2399 devpts = (tty->driver->flags & TTY_DRIVER_DEVPTS_MEM) != 0;
1da177e4
LT
2400 o_tty = tty->link;
2401
2402#ifdef TTY_PARANOIA_CHECK
2403 if (idx < 0 || idx >= tty->driver->num) {
2404 printk(KERN_DEBUG "release_dev: bad idx when trying to "
2405 "free (%s)\n", tty->name);
2406 return;
2407 }
2408 if (!(tty->driver->flags & TTY_DRIVER_DEVPTS_MEM)) {
2409 if (tty != tty->driver->ttys[idx]) {
2410 printk(KERN_DEBUG "release_dev: driver.table[%d] not tty "
2411 "for (%s)\n", idx, tty->name);
2412 return;
2413 }
2414 if (tty->termios != tty->driver->termios[idx]) {
2415 printk(KERN_DEBUG "release_dev: driver.termios[%d] not termios "
2416 "for (%s)\n",
2417 idx, tty->name);
2418 return;
2419 }
2420 if (tty->termios_locked != tty->driver->termios_locked[idx]) {
2421 printk(KERN_DEBUG "release_dev: driver.termios_locked[%d] not "
2422 "termios_locked for (%s)\n",
2423 idx, tty->name);
2424 return;
2425 }
2426 }
2427#endif
2428
2429#ifdef TTY_DEBUG_HANGUP
2430 printk(KERN_DEBUG "release_dev of %s (tty count=%d)...",
2431 tty_name(tty, buf), tty->count);
2432#endif
2433
2434#ifdef TTY_PARANOIA_CHECK
2435 if (tty->driver->other &&
2436 !(tty->driver->flags & TTY_DRIVER_DEVPTS_MEM)) {
2437 if (o_tty != tty->driver->other->ttys[idx]) {
2438 printk(KERN_DEBUG "release_dev: other->table[%d] "
2439 "not o_tty for (%s)\n",
2440 idx, tty->name);
2441 return;
2442 }
2443 if (o_tty->termios != tty->driver->other->termios[idx]) {
2444 printk(KERN_DEBUG "release_dev: other->termios[%d] "
2445 "not o_termios for (%s)\n",
2446 idx, tty->name);
2447 return;
2448 }
37bdfb07 2449 if (o_tty->termios_locked !=
1da177e4
LT
2450 tty->driver->other->termios_locked[idx]) {
2451 printk(KERN_DEBUG "release_dev: other->termios_locked["
2452 "%d] not o_termios_locked for (%s)\n",
2453 idx, tty->name);
2454 return;
2455 }
2456 if (o_tty->link != tty) {
2457 printk(KERN_DEBUG "release_dev: bad pty pointers\n");
2458 return;
2459 }
2460 }
2461#endif
f34d7a5b
AC
2462 if (tty->ops->close)
2463 tty->ops->close(tty, filp);
1da177e4
LT
2464
2465 /*
2466 * Sanity check: if tty->count is going to zero, there shouldn't be
2467 * any waiters on tty->read_wait or tty->write_wait. We test the
2468 * wait queues and kick everyone out _before_ actually starting to
2469 * close. This ensures that we won't block while releasing the tty
2470 * structure.
2471 *
2472 * The test for the o_tty closing is necessary, since the master and
2473 * slave sides may close in any order. If the slave side closes out
2474 * first, its count will be one, since the master side holds an open.
2475 * Thus this test wouldn't be triggered at the time the slave closes,
2476 * so we do it now.
2477 *
2478 * Note that it's possible for the tty to be opened again while we're
2479 * flushing out waiters. By recalculating the closing flags before
2480 * each iteration we avoid any problems.
2481 */
2482 while (1) {
2483 /* Guard against races with tty->count changes elsewhere and
2484 opens on /dev/tty */
37bdfb07 2485
70522e12 2486 mutex_lock(&tty_mutex);
1da177e4
LT
2487 tty_closing = tty->count <= 1;
2488 o_tty_closing = o_tty &&
2489 (o_tty->count <= (pty_master ? 1 : 0));
1da177e4
LT
2490 do_sleep = 0;
2491
2492 if (tty_closing) {
2493 if (waitqueue_active(&tty->read_wait)) {
2494 wake_up(&tty->read_wait);
2495 do_sleep++;
2496 }
2497 if (waitqueue_active(&tty->write_wait)) {
2498 wake_up(&tty->write_wait);
2499 do_sleep++;
2500 }
2501 }
2502 if (o_tty_closing) {
2503 if (waitqueue_active(&o_tty->read_wait)) {
2504 wake_up(&o_tty->read_wait);
2505 do_sleep++;
2506 }
2507 if (waitqueue_active(&o_tty->write_wait)) {
2508 wake_up(&o_tty->write_wait);
2509 do_sleep++;
2510 }
2511 }
2512 if (!do_sleep)
2513 break;
2514
2515 printk(KERN_WARNING "release_dev: %s: read/write wait queue "
2516 "active!\n", tty_name(tty, buf));
70522e12 2517 mutex_unlock(&tty_mutex);
1da177e4 2518 schedule();
37bdfb07 2519 }
1da177e4
LT
2520
2521 /*
37bdfb07
AC
2522 * The closing flags are now consistent with the open counts on
2523 * both sides, and we've completed the last operation that could
1da177e4
LT
2524 * block, so it's safe to proceed with closing.
2525 */
1da177e4
LT
2526 if (pty_master) {
2527 if (--o_tty->count < 0) {
2528 printk(KERN_WARNING "release_dev: bad pty slave count "
2529 "(%d) for %s\n",
2530 o_tty->count, tty_name(o_tty, buf));
2531 o_tty->count = 0;
2532 }
2533 }
2534 if (--tty->count < 0) {
2535 printk(KERN_WARNING "release_dev: bad tty->count (%d) for %s\n",
2536 tty->count, tty_name(tty, buf));
2537 tty->count = 0;
2538 }
37bdfb07 2539
1da177e4
LT
2540 /*
2541 * We've decremented tty->count, so we need to remove this file
2542 * descriptor off the tty->tty_files list; this serves two
2543 * purposes:
2544 * - check_tty_count sees the correct number of file descriptors
2545 * associated with this tty.
2546 * - do_tty_hangup no longer sees this file descriptor as
2547 * something that needs to be handled for hangups.
2548 */
2549 file_kill(filp);
2550 filp->private_data = NULL;
2551
2552 /*
2553 * Perform some housekeeping before deciding whether to return.
2554 *
2555 * Set the TTY_CLOSING flag if this was the last open. In the
2556 * case of a pty we may have to wait around for the other side
2557 * to close, and TTY_CLOSING makes sure we can't be reopened.
2558 */
37bdfb07 2559 if (tty_closing)
1da177e4 2560 set_bit(TTY_CLOSING, &tty->flags);
37bdfb07 2561 if (o_tty_closing)
1da177e4
LT
2562 set_bit(TTY_CLOSING, &o_tty->flags);
2563
2564 /*
2565 * If _either_ side is closing, make sure there aren't any
2566 * processes that still think tty or o_tty is their controlling
2567 * tty.
2568 */
2569 if (tty_closing || o_tty_closing) {
1da177e4 2570 read_lock(&tasklist_lock);
24ec839c 2571 session_clear_tty(tty->session);
1da177e4 2572 if (o_tty)
24ec839c 2573 session_clear_tty(o_tty->session);
1da177e4
LT
2574 read_unlock(&tasklist_lock);
2575 }
2576
70522e12 2577 mutex_unlock(&tty_mutex);
da965822 2578
1da177e4
LT
2579 /* check whether both sides are closing ... */
2580 if (!tty_closing || (o_tty && !o_tty_closing))
2581 return;
37bdfb07 2582
1da177e4
LT
2583#ifdef TTY_DEBUG_HANGUP
2584 printk(KERN_DEBUG "freeing tty structure...");
2585#endif
2586 /*
2587 * Prevent flush_to_ldisc() from rescheduling the work for later. Then
2588 * kill any delayed work. As this is the final close it does not
2589 * race with the set_ldisc code path.
2590 */
2591 clear_bit(TTY_LDISC, &tty->flags);
33f0f88f 2592 cancel_delayed_work(&tty->buf.work);
1da177e4
LT
2593
2594 /*
33f0f88f 2595 * Wait for ->hangup_work and ->buf.work handlers to terminate
1da177e4 2596 */
37bdfb07 2597
1da177e4 2598 flush_scheduled_work();
37bdfb07 2599
1da177e4
LT
2600 /*
2601 * Wait for any short term users (we know they are just driver
2602 * side waiters as the file is closing so user count on the file
2603 * side is zero.
2604 */
2605 spin_lock_irqsave(&tty_ldisc_lock, flags);
37bdfb07 2606 while (tty->ldisc.refcount) {
1da177e4
LT
2607 spin_unlock_irqrestore(&tty_ldisc_lock, flags);
2608 wait_event(tty_ldisc_wait, tty->ldisc.refcount == 0);
2609 spin_lock_irqsave(&tty_ldisc_lock, flags);
2610 }
2611 spin_unlock_irqrestore(&tty_ldisc_lock, flags);
2612 /*
2613 * Shutdown the current line discipline, and reset it to N_TTY.
2614 * N.B. why reset ldisc when we're releasing the memory??
2615 *
2616 * FIXME: this MUST get fixed for the new reflocking
2617 */
2618 if (tty->ldisc.close)
2619 (tty->ldisc.close)(tty);
2620 tty_ldisc_put(tty->ldisc.num);
37bdfb07 2621
1da177e4
LT
2622 /*
2623 * Switch the line discipline back
2624 */
2625 tty_ldisc_assign(tty, tty_ldisc_get(N_TTY));
37bdfb07 2626 tty_set_termios_ldisc(tty, N_TTY);
1da177e4
LT
2627 if (o_tty) {
2628 /* FIXME: could o_tty be in setldisc here ? */
2629 clear_bit(TTY_LDISC, &o_tty->flags);
2630 if (o_tty->ldisc.close)
2631 (o_tty->ldisc.close)(o_tty);
2632 tty_ldisc_put(o_tty->ldisc.num);
2633 tty_ldisc_assign(o_tty, tty_ldisc_get(N_TTY));
37bdfb07 2634 tty_set_termios_ldisc(o_tty, N_TTY);
1da177e4
LT
2635 }
2636 /*
d5698c28 2637 * The release_tty function takes care of the details of clearing
1da177e4
LT
2638 * the slots and preserving the termios structure.
2639 */
d5698c28 2640 release_tty(tty, idx);
1da177e4
LT
2641
2642#ifdef CONFIG_UNIX98_PTYS
2643 /* Make this pty number available for reallocation */
2644 if (devpts) {
a6752f3f 2645 mutex_lock(&allocated_ptys_lock);
1da177e4 2646 idr_remove(&allocated_ptys, idx);
a6752f3f 2647 mutex_unlock(&allocated_ptys_lock);
1da177e4
LT
2648 }
2649#endif
2650
2651}
2652
af9b897e
AC
2653/**
2654 * tty_open - open a tty device
2655 * @inode: inode of device file
2656 * @filp: file pointer to tty
1da177e4 2657 *
af9b897e
AC
2658 * tty_open and tty_release keep up the tty count that contains the
2659 * number of opens done on a tty. We cannot use the inode-count, as
2660 * different inodes might point to the same tty.
1da177e4 2661 *
af9b897e
AC
2662 * Open-counting is needed for pty masters, as well as for keeping
2663 * track of serial lines: DTR is dropped when the last close happens.
2664 * (This is not done solely through tty->count, now. - Ted 1/27/92)
2665 *
2666 * The termios state of a pty is reset on first open so that
2667 * settings don't persist across reuse.
2668 *
24ec839c
PZ
2669 * Locking: tty_mutex protects tty, get_tty_driver and init_dev work.
2670 * tty->count should protect the rest.
2671 * ->siglock protects ->signal/->sighand
1da177e4 2672 */
af9b897e 2673
37bdfb07 2674static int tty_open(struct inode *inode, struct file *filp)
1da177e4
LT
2675{
2676 struct tty_struct *tty;
2677 int noctty, retval;
2678 struct tty_driver *driver;
2679 int index;
2680 dev_t device = inode->i_rdev;
2681 unsigned short saved_flags = filp->f_flags;
2682
2683 nonseekable_open(inode, filp);
37bdfb07 2684
1da177e4
LT
2685retry_open:
2686 noctty = filp->f_flags & O_NOCTTY;
2687 index = -1;
2688 retval = 0;
37bdfb07 2689
70522e12 2690 mutex_lock(&tty_mutex);
1da177e4 2691
37bdfb07 2692 if (device == MKDEV(TTYAUX_MAJOR, 0)) {
24ec839c
PZ
2693 tty = get_current_tty();
2694 if (!tty) {
70522e12 2695 mutex_unlock(&tty_mutex);
1da177e4
LT
2696 return -ENXIO;
2697 }
24ec839c
PZ
2698 driver = tty->driver;
2699 index = tty->index;
1da177e4
LT
2700 filp->f_flags |= O_NONBLOCK; /* Don't let /dev/tty block */
2701 /* noctty = 1; */
2702 goto got_driver;
2703 }
2704#ifdef CONFIG_VT
37bdfb07 2705 if (device == MKDEV(TTY_MAJOR, 0)) {
1da177e4
LT
2706 extern struct tty_driver *console_driver;
2707 driver = console_driver;
2708 index = fg_console;
2709 noctty = 1;
2710 goto got_driver;
2711 }
2712#endif
37bdfb07 2713 if (device == MKDEV(TTYAUX_MAJOR, 1)) {
1da177e4
LT
2714 driver = console_device(&index);
2715 if (driver) {
2716 /* Don't let /dev/console block */
2717 filp->f_flags |= O_NONBLOCK;
2718 noctty = 1;
2719 goto got_driver;
2720 }
70522e12 2721 mutex_unlock(&tty_mutex);
1da177e4
LT
2722 return -ENODEV;
2723 }
2724
2725 driver = get_tty_driver(device, &index);
2726 if (!driver) {
70522e12 2727 mutex_unlock(&tty_mutex);
1da177e4
LT
2728 return -ENODEV;
2729 }
2730got_driver:
2731 retval = init_dev(driver, index, &tty);
70522e12 2732 mutex_unlock(&tty_mutex);
1da177e4
LT
2733 if (retval)
2734 return retval;
2735
2736 filp->private_data = tty;
2737 file_move(filp, &tty->tty_files);
2738 check_tty_count(tty, "tty_open");
2739 if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
2740 tty->driver->subtype == PTY_TYPE_MASTER)
2741 noctty = 1;
2742#ifdef TTY_DEBUG_HANGUP
2743 printk(KERN_DEBUG "opening %s...", tty->name);
2744#endif
2745 if (!retval) {
f34d7a5b
AC
2746 if (tty->ops->open)
2747 retval = tty->ops->open(tty, filp);
1da177e4
LT
2748 else
2749 retval = -ENODEV;
2750 }
2751 filp->f_flags = saved_flags;
2752
37bdfb07
AC
2753 if (!retval && test_bit(TTY_EXCLUSIVE, &tty->flags) &&
2754 !capable(CAP_SYS_ADMIN))
1da177e4
LT
2755 retval = -EBUSY;
2756
2757 if (retval) {
2758#ifdef TTY_DEBUG_HANGUP
2759 printk(KERN_DEBUG "error %d in opening %s...", retval,
2760 tty->name);
2761#endif
2762 release_dev(filp);
2763 if (retval != -ERESTARTSYS)
2764 return retval;
2765 if (signal_pending(current))
2766 return retval;
2767 schedule();
2768 /*
2769 * Need to reset f_op in case a hangup happened.
2770 */
2771 if (filp->f_op == &hung_up_tty_fops)
2772 filp->f_op = &tty_fops;
2773 goto retry_open;
2774 }
24ec839c
PZ
2775
2776 mutex_lock(&tty_mutex);
2777 spin_lock_irq(&current->sighand->siglock);
1da177e4
LT
2778 if (!noctty &&
2779 current->signal->leader &&
2780 !current->signal->tty &&
ab521dc0 2781 tty->session == NULL)
2a65f1d9 2782 __proc_set_tty(current, tty);
24ec839c
PZ
2783 spin_unlock_irq(&current->sighand->siglock);
2784 mutex_unlock(&tty_mutex);
1da177e4
LT
2785 return 0;
2786}
2787
2788#ifdef CONFIG_UNIX98_PTYS
af9b897e
AC
2789/**
2790 * ptmx_open - open a unix 98 pty master
2791 * @inode: inode of device file
2792 * @filp: file pointer to tty
2793 *
2794 * Allocate a unix98 pty master device from the ptmx driver.
2795 *
2796 * Locking: tty_mutex protects theinit_dev work. tty->count should
37bdfb07 2797 * protect the rest.
af9b897e
AC
2798 * allocated_ptys_lock handles the list of free pty numbers
2799 */
2800
37bdfb07 2801static int ptmx_open(struct inode *inode, struct file *filp)
1da177e4
LT
2802{
2803 struct tty_struct *tty;
2804 int retval;
2805 int index;
2806 int idr_ret;
2807
2808 nonseekable_open(inode, filp);
2809
2810 /* find a device that is not in use. */
a6752f3f 2811 mutex_lock(&allocated_ptys_lock);
1da177e4 2812 if (!idr_pre_get(&allocated_ptys, GFP_KERNEL)) {
a6752f3f 2813 mutex_unlock(&allocated_ptys_lock);
1da177e4
LT
2814 return -ENOMEM;
2815 }
2816 idr_ret = idr_get_new(&allocated_ptys, NULL, &index);
2817 if (idr_ret < 0) {
a6752f3f 2818 mutex_unlock(&allocated_ptys_lock);
1da177e4
LT
2819 if (idr_ret == -EAGAIN)
2820 return -ENOMEM;
2821 return -EIO;
2822 }
2823 if (index >= pty_limit) {
2824 idr_remove(&allocated_ptys, index);
a6752f3f 2825 mutex_unlock(&allocated_ptys_lock);
1da177e4
LT
2826 return -EIO;
2827 }
a6752f3f 2828 mutex_unlock(&allocated_ptys_lock);
1da177e4 2829
70522e12 2830 mutex_lock(&tty_mutex);
1da177e4 2831 retval = init_dev(ptm_driver, index, &tty);
70522e12 2832 mutex_unlock(&tty_mutex);
37bdfb07 2833
1da177e4
LT
2834 if (retval)
2835 goto out;
2836
2837 set_bit(TTY_PTY_LOCK, &tty->flags); /* LOCK THE SLAVE */
2838 filp->private_data = tty;
2839 file_move(filp, &tty->tty_files);
2840
4f8f9d66
SB
2841 retval = devpts_pty_new(tty->link);
2842 if (retval)
1da177e4
LT
2843 goto out1;
2844
86a96538 2845 check_tty_count(tty, "ptmx_open");
f34d7a5b 2846 retval = ptm_driver->ops->open(tty, filp);
41126226 2847 if (!retval)
1da177e4
LT
2848 return 0;
2849out1:
2850 release_dev(filp);
9453a5ad 2851 return retval;
1da177e4 2852out:
a6752f3f 2853 mutex_lock(&allocated_ptys_lock);
1da177e4 2854 idr_remove(&allocated_ptys, index);
a6752f3f 2855 mutex_unlock(&allocated_ptys_lock);
1da177e4
LT
2856 return retval;
2857}
2858#endif
2859
af9b897e
AC
2860/**
2861 * tty_release - vfs callback for close
2862 * @inode: inode of tty
2863 * @filp: file pointer for handle to tty
2864 *
2865 * Called the last time each file handle is closed that references
2866 * this tty. There may however be several such references.
2867 *
2868 * Locking:
2869 * Takes bkl. See release_dev
2870 */
2871
37bdfb07 2872static int tty_release(struct inode *inode, struct file *filp)
1da177e4
LT
2873{
2874 lock_kernel();
2875 release_dev(filp);
2876 unlock_kernel();
2877 return 0;
2878}
2879
af9b897e
AC
2880/**
2881 * tty_poll - check tty status
2882 * @filp: file being polled
2883 * @wait: poll wait structures to update
2884 *
2885 * Call the line discipline polling method to obtain the poll
2886 * status of the device.
2887 *
2888 * Locking: locks called line discipline but ldisc poll method
2889 * may be re-entered freely by other callers.
2890 */
2891
37bdfb07 2892static unsigned int tty_poll(struct file *filp, poll_table *wait)
1da177e4 2893{
37bdfb07 2894 struct tty_struct *tty;
1da177e4
LT
2895 struct tty_ldisc *ld;
2896 int ret = 0;
2897
2898 tty = (struct tty_struct *)filp->private_data;
a7113a96 2899 if (tty_paranoia_check(tty, filp->f_path.dentry->d_inode, "tty_poll"))
1da177e4 2900 return 0;
37bdfb07 2901
1da177e4
LT
2902 ld = tty_ldisc_ref_wait(tty);
2903 if (ld->poll)
2904 ret = (ld->poll)(tty, filp, wait);
2905 tty_ldisc_deref(ld);
2906 return ret;
2907}
2908
37bdfb07 2909static int tty_fasync(int fd, struct file *filp, int on)
1da177e4 2910{
37bdfb07 2911 struct tty_struct *tty;
47f86834 2912 unsigned long flags;
1da177e4
LT
2913 int retval;
2914
2915 tty = (struct tty_struct *)filp->private_data;
a7113a96 2916 if (tty_paranoia_check(tty, filp->f_path.dentry->d_inode, "tty_fasync"))
1da177e4 2917 return 0;
37bdfb07 2918
1da177e4
LT
2919 retval = fasync_helper(fd, filp, on, &tty->fasync);
2920 if (retval <= 0)
2921 return retval;
2922
2923 if (on) {
ab521dc0
EB
2924 enum pid_type type;
2925 struct pid *pid;
1da177e4
LT
2926 if (!waitqueue_active(&tty->read_wait))
2927 tty->minimum_to_wake = 1;
47f86834 2928 spin_lock_irqsave(&tty->ctrl_lock, flags);
ab521dc0
EB
2929 if (tty->pgrp) {
2930 pid = tty->pgrp;
2931 type = PIDTYPE_PGID;
2932 } else {
2933 pid = task_pid(current);
2934 type = PIDTYPE_PID;
2935 }
47f86834 2936 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
ab521dc0 2937 retval = __f_setown(filp, pid, type, 0);
1da177e4
LT
2938 if (retval)
2939 return retval;
2940 } else {
2941 if (!tty->fasync && !waitqueue_active(&tty->read_wait))
2942 tty->minimum_to_wake = N_TTY_BUF_SIZE;
2943 }
2944 return 0;
2945}
2946
af9b897e
AC
2947/**
2948 * tiocsti - fake input character
2949 * @tty: tty to fake input into
2950 * @p: pointer to character
2951 *
3a4fa0a2 2952 * Fake input to a tty device. Does the necessary locking and
af9b897e
AC
2953 * input management.
2954 *
2955 * FIXME: does not honour flow control ??
2956 *
2957 * Locking:
2958 * Called functions take tty_ldisc_lock
2959 * current->signal->tty check is safe without locks
28298232
AC
2960 *
2961 * FIXME: may race normal receive processing
af9b897e
AC
2962 */
2963
1da177e4
LT
2964static int tiocsti(struct tty_struct *tty, char __user *p)
2965{
2966 char ch, mbz = 0;
2967 struct tty_ldisc *ld;
37bdfb07 2968
1da177e4
LT
2969 if ((current->signal->tty != tty) && !capable(CAP_SYS_ADMIN))
2970 return -EPERM;
2971 if (get_user(ch, p))
2972 return -EFAULT;
2973 ld = tty_ldisc_ref_wait(tty);
2974 ld->receive_buf(tty, &ch, &mbz, 1);
2975 tty_ldisc_deref(ld);
2976 return 0;
2977}
2978
af9b897e
AC
2979/**
2980 * tiocgwinsz - implement window query ioctl
2981 * @tty; tty
2982 * @arg: user buffer for result
2983 *
808a0d38 2984 * Copies the kernel idea of the window size into the user buffer.
af9b897e 2985 *
24ec839c 2986 * Locking: tty->termios_mutex is taken to ensure the winsize data
808a0d38 2987 * is consistent.
af9b897e
AC
2988 */
2989
37bdfb07 2990static int tiocgwinsz(struct tty_struct *tty, struct winsize __user *arg)
1da177e4 2991{
808a0d38
AC
2992 int err;
2993
5785c95b 2994 mutex_lock(&tty->termios_mutex);
808a0d38 2995 err = copy_to_user(arg, &tty->winsize, sizeof(*arg));
5785c95b 2996 mutex_unlock(&tty->termios_mutex);
808a0d38
AC
2997
2998 return err ? -EFAULT: 0;
1da177e4
LT
2999}
3000
af9b897e
AC
3001/**
3002 * tiocswinsz - implement window size set ioctl
3003 * @tty; tty
3004 * @arg: user buffer for result
3005 *
3006 * Copies the user idea of the window size to the kernel. Traditionally
3007 * this is just advisory information but for the Linux console it
3008 * actually has driver level meaning and triggers a VC resize.
3009 *
3010 * Locking:
ca9bda00
AC
3011 * Called function use the console_sem is used to ensure we do
3012 * not try and resize the console twice at once.
24ec839c
PZ
3013 * The tty->termios_mutex is used to ensure we don't double
3014 * resize and get confused. Lock order - tty->termios_mutex before
ca9bda00 3015 * console sem
af9b897e
AC
3016 */
3017
1da177e4 3018static int tiocswinsz(struct tty_struct *tty, struct tty_struct *real_tty,
37bdfb07 3019 struct winsize __user *arg)
1da177e4
LT
3020{
3021 struct winsize tmp_ws;
47f86834
AC
3022 struct pid *pgrp, *rpgrp;
3023 unsigned long flags;
1da177e4
LT
3024
3025 if (copy_from_user(&tmp_ws, arg, sizeof(*arg)))
3026 return -EFAULT;
ca9bda00 3027
5785c95b 3028 mutex_lock(&tty->termios_mutex);
1da177e4 3029 if (!memcmp(&tmp_ws, &tty->winsize, sizeof(*arg)))
ca9bda00
AC
3030 goto done;
3031
1da177e4
LT
3032#ifdef CONFIG_VT
3033 if (tty->driver->type == TTY_DRIVER_TYPE_CONSOLE) {
5785c95b
AV
3034 if (vc_lock_resize(tty->driver_data, tmp_ws.ws_col,
3035 tmp_ws.ws_row)) {
3036 mutex_unlock(&tty->termios_mutex);
37bdfb07 3037 return -ENXIO;
ca9bda00 3038 }
1da177e4
LT
3039 }
3040#endif
47f86834
AC
3041 /* Get the PID values and reference them so we can
3042 avoid holding the tty ctrl lock while sending signals */
3043 spin_lock_irqsave(&tty->ctrl_lock, flags);
3044 pgrp = get_pid(tty->pgrp);
3045 rpgrp = get_pid(real_tty->pgrp);
3046 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
3047
3048 if (pgrp)
3049 kill_pgrp(pgrp, SIGWINCH, 1);
3050 if (rpgrp != pgrp && rpgrp)
3051 kill_pgrp(rpgrp, SIGWINCH, 1);
3052
3053 put_pid(pgrp);
3054 put_pid(rpgrp);
3055
1da177e4
LT
3056 tty->winsize = tmp_ws;
3057 real_tty->winsize = tmp_ws;
ca9bda00 3058done:
5785c95b 3059 mutex_unlock(&tty->termios_mutex);
1da177e4
LT
3060 return 0;
3061}
3062
af9b897e
AC
3063/**
3064 * tioccons - allow admin to move logical console
3065 * @file: the file to become console
3066 *
3067 * Allow the adminstrator to move the redirected console device
3068 *
3069 * Locking: uses redirect_lock to guard the redirect information
3070 */
3071
1da177e4
LT
3072static int tioccons(struct file *file)
3073{
3074 if (!capable(CAP_SYS_ADMIN))
3075 return -EPERM;
3076 if (file->f_op->write == redirected_tty_write) {
3077 struct file *f;
3078 spin_lock(&redirect_lock);
3079 f = redirect;
3080 redirect = NULL;
3081 spin_unlock(&redirect_lock);
3082 if (f)
3083 fput(f);
3084 return 0;
3085 }
3086 spin_lock(&redirect_lock);
3087 if (redirect) {
3088 spin_unlock(&redirect_lock);
3089 return -EBUSY;
3090 }
3091 get_file(file);
3092 redirect = file;
3093 spin_unlock(&redirect_lock);
3094 return 0;
3095}
3096
af9b897e
AC
3097/**
3098 * fionbio - non blocking ioctl
3099 * @file: file to set blocking value
3100 * @p: user parameter
3101 *
3102 * Historical tty interfaces had a blocking control ioctl before
3103 * the generic functionality existed. This piece of history is preserved
3104 * in the expected tty API of posix OS's.
3105 *
3106 * Locking: none, the open fle handle ensures it won't go away.
3107 */
1da177e4
LT
3108
3109static int fionbio(struct file *file, int __user *p)
3110{
3111 int nonblock;
3112
3113 if (get_user(nonblock, p))
3114 return -EFAULT;
3115
04f378b1
AC
3116 /* file->f_flags is still BKL protected in the fs layer - vomit */
3117 lock_kernel();
1da177e4
LT
3118 if (nonblock)
3119 file->f_flags |= O_NONBLOCK;
3120 else
3121 file->f_flags &= ~O_NONBLOCK;
04f378b1 3122 unlock_kernel();
1da177e4
LT
3123 return 0;
3124}
3125
af9b897e
AC
3126/**
3127 * tiocsctty - set controlling tty
3128 * @tty: tty structure
3129 * @arg: user argument
3130 *
3131 * This ioctl is used to manage job control. It permits a session
3132 * leader to set this tty as the controlling tty for the session.
3133 *
3134 * Locking:
28298232 3135 * Takes tty_mutex() to protect tty instance
24ec839c
PZ
3136 * Takes tasklist_lock internally to walk sessions
3137 * Takes ->siglock() when updating signal->tty
af9b897e
AC
3138 */
3139
1da177e4
LT
3140static int tiocsctty(struct tty_struct *tty, int arg)
3141{
24ec839c 3142 int ret = 0;
ab521dc0 3143 if (current->signal->leader && (task_session(current) == tty->session))
24ec839c
PZ
3144 return ret;
3145
3146 mutex_lock(&tty_mutex);
1da177e4
LT
3147 /*
3148 * The process must be a session leader and
3149 * not have a controlling tty already.
3150 */
24ec839c
PZ
3151 if (!current->signal->leader || current->signal->tty) {
3152 ret = -EPERM;
3153 goto unlock;
3154 }
3155
ab521dc0 3156 if (tty->session) {
1da177e4
LT
3157 /*
3158 * This tty is already the controlling
3159 * tty for another session group!
3160 */
37bdfb07 3161 if (arg == 1 && capable(CAP_SYS_ADMIN)) {
1da177e4
LT
3162 /*
3163 * Steal it away
3164 */
1da177e4 3165 read_lock(&tasklist_lock);
24ec839c 3166 session_clear_tty(tty->session);
1da177e4 3167 read_unlock(&tasklist_lock);
24ec839c
PZ
3168 } else {
3169 ret = -EPERM;
3170 goto unlock;
3171 }
1da177e4 3172 }
24ec839c
PZ
3173 proc_set_tty(current, tty);
3174unlock:
28298232 3175 mutex_unlock(&tty_mutex);
24ec839c 3176 return ret;
1da177e4
LT
3177}
3178
5d0fdf1e
AC
3179/**
3180 * tty_get_pgrp - return a ref counted pgrp pid
3181 * @tty: tty to read
3182 *
3183 * Returns a refcounted instance of the pid struct for the process
3184 * group controlling the tty.
3185 */
3186
3187struct pid *tty_get_pgrp(struct tty_struct *tty)
3188{
3189 unsigned long flags;
3190 struct pid *pgrp;
3191
3192 spin_lock_irqsave(&tty->ctrl_lock, flags);
3193 pgrp = get_pid(tty->pgrp);
3194 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
3195
3196 return pgrp;
3197}
3198EXPORT_SYMBOL_GPL(tty_get_pgrp);
3199
af9b897e
AC
3200/**
3201 * tiocgpgrp - get process group
3202 * @tty: tty passed by user
3203 * @real_tty: tty side of the tty pased by the user if a pty else the tty
3204 * @p: returned pid
3205 *
3206 * Obtain the process group of the tty. If there is no process group
3207 * return an error.
3208 *
24ec839c 3209 * Locking: none. Reference to current->signal->tty is safe.
af9b897e
AC
3210 */
3211
1da177e4
LT
3212static int tiocgpgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t __user *p)
3213{
5d0fdf1e
AC
3214 struct pid *pid;
3215 int ret;
1da177e4
LT
3216 /*
3217 * (tty == real_tty) is a cheap way of
3218 * testing if the tty is NOT a master pty.
3219 */
3220 if (tty == real_tty && current->signal->tty != real_tty)
3221 return -ENOTTY;
5d0fdf1e
AC
3222 pid = tty_get_pgrp(real_tty);
3223 ret = put_user(pid_vnr(pid), p);
3224 put_pid(pid);
3225 return ret;
1da177e4
LT
3226}
3227
af9b897e
AC
3228/**
3229 * tiocspgrp - attempt to set process group
3230 * @tty: tty passed by user
3231 * @real_tty: tty side device matching tty passed by user
3232 * @p: pid pointer
3233 *
3234 * Set the process group of the tty to the session passed. Only
3235 * permitted where the tty session is our session.
3236 *
47f86834 3237 * Locking: RCU, ctrl lock
af9b897e
AC
3238 */
3239
1da177e4
LT
3240static int tiocspgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t __user *p)
3241{
04a2e6a5
EB
3242 struct pid *pgrp;
3243 pid_t pgrp_nr;
1da177e4 3244 int retval = tty_check_change(real_tty);
47f86834 3245 unsigned long flags;
1da177e4
LT
3246
3247 if (retval == -EIO)
3248 return -ENOTTY;
3249 if (retval)
3250 return retval;
3251 if (!current->signal->tty ||
3252 (current->signal->tty != real_tty) ||
ab521dc0 3253 (real_tty->session != task_session(current)))
1da177e4 3254 return -ENOTTY;
04a2e6a5 3255 if (get_user(pgrp_nr, p))
1da177e4 3256 return -EFAULT;
04a2e6a5 3257 if (pgrp_nr < 0)
1da177e4 3258 return -EINVAL;
04a2e6a5 3259 rcu_read_lock();
b488893a 3260 pgrp = find_vpid(pgrp_nr);
04a2e6a5
EB
3261 retval = -ESRCH;
3262 if (!pgrp)
3263 goto out_unlock;
3264 retval = -EPERM;
3265 if (session_of_pgrp(pgrp) != task_session(current))
3266 goto out_unlock;
3267 retval = 0;
47f86834 3268 spin_lock_irqsave(&tty->ctrl_lock, flags);
ab521dc0
EB
3269 put_pid(real_tty->pgrp);
3270 real_tty->pgrp = get_pid(pgrp);
47f86834 3271 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
04a2e6a5
EB
3272out_unlock:
3273 rcu_read_unlock();
3274 return retval;
1da177e4
LT
3275}
3276
af9b897e
AC
3277/**
3278 * tiocgsid - get session id
3279 * @tty: tty passed by user
3280 * @real_tty: tty side of the tty pased by the user if a pty else the tty
3281 * @p: pointer to returned session id
3282 *
3283 * Obtain the session id of the tty. If there is no session
3284 * return an error.
3285 *
24ec839c 3286 * Locking: none. Reference to current->signal->tty is safe.
af9b897e
AC
3287 */
3288
1da177e4
LT
3289static int tiocgsid(struct tty_struct *tty, struct tty_struct *real_tty, pid_t __user *p)
3290{
3291 /*
3292 * (tty == real_tty) is a cheap way of
3293 * testing if the tty is NOT a master pty.
3294 */
3295 if (tty == real_tty && current->signal->tty != real_tty)
3296 return -ENOTTY;
ab521dc0 3297 if (!real_tty->session)
1da177e4 3298 return -ENOTTY;
b488893a 3299 return put_user(pid_vnr(real_tty->session), p);
1da177e4
LT
3300}
3301
af9b897e
AC
3302/**
3303 * tiocsetd - set line discipline
3304 * @tty: tty device
3305 * @p: pointer to user data
3306 *
3307 * Set the line discipline according to user request.
3308 *
3309 * Locking: see tty_set_ldisc, this function is just a helper
3310 */
3311
1da177e4
LT
3312static int tiocsetd(struct tty_struct *tty, int __user *p)
3313{
3314 int ldisc;
04f378b1 3315 int ret;
1da177e4
LT
3316
3317 if (get_user(ldisc, p))
3318 return -EFAULT;
04f378b1
AC
3319
3320 lock_kernel();
3321 ret = tty_set_ldisc(tty, ldisc);
3322 unlock_kernel();
3323
3324 return ret;
1da177e4
LT
3325}
3326
af9b897e
AC
3327/**
3328 * send_break - performed time break
3329 * @tty: device to break on
3330 * @duration: timeout in mS
3331 *
3332 * Perform a timed break on hardware that lacks its own driver level
3333 * timed break functionality.
3334 *
3335 * Locking:
28298232 3336 * atomic_write_lock serializes
af9b897e 3337 *
af9b897e
AC
3338 */
3339
b20f3ae5 3340static int send_break(struct tty_struct *tty, unsigned int duration)
1da177e4 3341{
9c1729db 3342 if (tty_write_lock(tty, 0) < 0)
f34d7a5b
AC
3343 return -EINTR;
3344 tty->ops->break_ctl(tty, -1);
9c1729db 3345 if (!signal_pending(current))
b20f3ae5 3346 msleep_interruptible(duration);
f34d7a5b 3347 tty->ops->break_ctl(tty, 0);
9c1729db 3348 tty_write_unlock(tty);
04f378b1 3349 if (!signal_pending(current))
f34d7a5b
AC
3350 return -EINTR;
3351 return 0;
1da177e4
LT
3352}
3353
af9b897e 3354/**
f34d7a5b 3355 * tty_tiocmget - get modem status
af9b897e
AC
3356 * @tty: tty device
3357 * @file: user file pointer
3358 * @p: pointer to result
3359 *
3360 * Obtain the modem status bits from the tty driver if the feature
3361 * is supported. Return -EINVAL if it is not available.
3362 *
3363 * Locking: none (up to the driver)
3364 */
3365
3366static int tty_tiocmget(struct tty_struct *tty, struct file *file, int __user *p)
1da177e4
LT
3367{
3368 int retval = -EINVAL;
3369
f34d7a5b
AC
3370 if (tty->ops->tiocmget) {
3371 retval = tty->ops->tiocmget(tty, file);
1da177e4
LT
3372
3373 if (retval >= 0)
3374 retval = put_user(retval, p);
3375 }
3376 return retval;
3377}
3378
af9b897e 3379/**
f34d7a5b 3380 * tty_tiocmset - set modem status
af9b897e
AC
3381 * @tty: tty device
3382 * @file: user file pointer
3383 * @cmd: command - clear bits, set bits or set all
3384 * @p: pointer to desired bits
3385 *
3386 * Set the modem status bits from the tty driver if the feature
3387 * is supported. Return -EINVAL if it is not available.
3388 *
3389 * Locking: none (up to the driver)
3390 */
3391
3392static int tty_tiocmset(struct tty_struct *tty, struct file *file, unsigned int cmd,
1da177e4
LT
3393 unsigned __user *p)
3394{
3395 int retval = -EINVAL;
3396
f34d7a5b 3397 if (tty->ops->tiocmset) {
1da177e4
LT
3398 unsigned int set, clear, val;
3399
3400 retval = get_user(val, p);
3401 if (retval)
3402 return retval;
3403
3404 set = clear = 0;
3405 switch (cmd) {
3406 case TIOCMBIS:
3407 set = val;
3408 break;
3409 case TIOCMBIC:
3410 clear = val;
3411 break;
3412 case TIOCMSET:
3413 set = val;
3414 clear = ~val;
3415 break;
3416 }
3417
3418 set &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP;
3419 clear &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP;
3420
f34d7a5b 3421 retval = tty->ops->tiocmset(tty, file, set, clear);
1da177e4
LT
3422 }
3423 return retval;
3424}
3425
3426/*
3427 * Split this up, as gcc can choke on it otherwise..
3428 */
04f378b1 3429long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
1da177e4
LT
3430{
3431 struct tty_struct *tty, *real_tty;
3432 void __user *p = (void __user *)arg;
3433 int retval;
3434 struct tty_ldisc *ld;
04f378b1 3435 struct inode *inode = file->f_dentry->d_inode;
37bdfb07 3436
1da177e4
LT
3437 tty = (struct tty_struct *)file->private_data;
3438 if (tty_paranoia_check(tty, inode, "tty_ioctl"))
3439 return -EINVAL;
3440
3441 real_tty = tty;
3442 if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
3443 tty->driver->subtype == PTY_TYPE_MASTER)
3444 real_tty = tty->link;
3445
3446 /*
3447 * Break handling by driver
3448 */
04f378b1
AC
3449
3450 retval = -EINVAL;
3451
f34d7a5b 3452 if (!tty->ops->break_ctl) {
37bdfb07 3453 switch (cmd) {
1da177e4
LT
3454 case TIOCSBRK:
3455 case TIOCCBRK:
f34d7a5b
AC
3456 if (tty->ops->ioctl)
3457 retval = tty->ops->ioctl(tty, file, cmd, arg);
3458 if (retval != -EINVAL && retval != -ENOIOCTLCMD)
3459 printk(KERN_WARNING "tty: driver %s needs updating to use break_ctl\n", tty->driver->name);
04f378b1 3460 return retval;
37bdfb07 3461
1da177e4
LT
3462 /* These two ioctl's always return success; even if */
3463 /* the driver doesn't support them. */
3464 case TCSBRK:
3465 case TCSBRKP:
f34d7a5b 3466 if (!tty->ops->ioctl)
1da177e4 3467 return 0;
f34d7a5b
AC
3468 retval = tty->ops->ioctl(tty, file, cmd, arg);
3469 if (retval != -EINVAL && retval != -ENOIOCTLCMD)
3470 printk(KERN_WARNING "tty: driver %s needs updating to use break_ctl\n", tty->driver->name);
1da177e4
LT
3471 if (retval == -ENOIOCTLCMD)
3472 retval = 0;
3473 return retval;
3474 }
3475 }
3476
3477 /*
3478 * Factor out some common prep work
3479 */
3480 switch (cmd) {
3481 case TIOCSETD:
3482 case TIOCSBRK:
3483 case TIOCCBRK:
3484 case TCSBRK:
37bdfb07 3485 case TCSBRKP:
1da177e4
LT
3486 retval = tty_check_change(tty);
3487 if (retval)
3488 return retval;
3489 if (cmd != TIOCCBRK) {
3490 tty_wait_until_sent(tty, 0);
3491 if (signal_pending(current))
3492 return -EINTR;
3493 }
3494 break;
3495 }
3496
3497 switch (cmd) {
37bdfb07
AC
3498 case TIOCSTI:
3499 return tiocsti(tty, p);
3500 case TIOCGWINSZ:
3501 return tiocgwinsz(tty, p);
3502 case TIOCSWINSZ:
3503 return tiocswinsz(tty, real_tty, p);
3504 case TIOCCONS:
3505 return real_tty != tty ? -EINVAL : tioccons(file);
3506 case FIONBIO:
3507 return fionbio(file, p);
3508 case TIOCEXCL:
3509 set_bit(TTY_EXCLUSIVE, &tty->flags);
3510 return 0;
3511 case TIOCNXCL:
3512 clear_bit(TTY_EXCLUSIVE, &tty->flags);
3513 return 0;
3514 case TIOCNOTTY:
3515 if (current->signal->tty != tty)
3516 return -ENOTTY;
3517 no_tty();
3518 return 0;
3519 case TIOCSCTTY:
3520 return tiocsctty(tty, arg);
3521 case TIOCGPGRP:
3522 return tiocgpgrp(tty, real_tty, p);
3523 case TIOCSPGRP:
3524 return tiocspgrp(tty, real_tty, p);
3525 case TIOCGSID:
3526 return tiocgsid(tty, real_tty, p);
3527 case TIOCGETD:
37bdfb07
AC
3528 return put_user(tty->ldisc.num, (int __user *)p);
3529 case TIOCSETD:
3530 return tiocsetd(tty, p);
1da177e4 3531#ifdef CONFIG_VT
37bdfb07
AC
3532 case TIOCLINUX:
3533 return tioclinux(tty, arg);
1da177e4 3534#endif
37bdfb07
AC
3535 /*
3536 * Break handling
3537 */
3538 case TIOCSBRK: /* Turn break on, unconditionally */
f34d7a5b
AC
3539 if (tty->ops->break_ctl)
3540 tty->ops->break_ctl(tty, -1);
37bdfb07 3541 return 0;
1da177e4 3542
37bdfb07 3543 case TIOCCBRK: /* Turn break off, unconditionally */
f34d7a5b
AC
3544 if (tty->ops->break_ctl)
3545 tty->ops->break_ctl(tty, 0);
37bdfb07
AC
3546 return 0;
3547 case TCSBRK: /* SVID version: non-zero arg --> no break */
3548 /* non-zero arg means wait for all output data
3549 * to be sent (performed above) but don't send break.
3550 * This is used by the tcdrain() termios function.
3551 */
3552 if (!arg)
3553 return send_break(tty, 250);
3554 return 0;
3555 case TCSBRKP: /* support for POSIX tcsendbreak() */
3556 return send_break(tty, arg ? arg*100 : 250);
3557
3558 case TIOCMGET:
3559 return tty_tiocmget(tty, file, p);
3560 case TIOCMSET:
3561 case TIOCMBIC:
3562 case TIOCMBIS:
3563 return tty_tiocmset(tty, file, cmd, p);
3564 case TCFLSH:
3565 switch (arg) {
3566 case TCIFLUSH:
3567 case TCIOFLUSH:
3568 /* flush tty buffer and allow ldisc to process ioctl */
3569 tty_buffer_flush(tty);
c5c34d48 3570 break;
37bdfb07
AC
3571 }
3572 break;
1da177e4 3573 }
f34d7a5b
AC
3574 if (tty->ops->ioctl) {
3575 retval = (tty->ops->ioctl)(tty, file, cmd, arg);
1da177e4
LT
3576 if (retval != -ENOIOCTLCMD)
3577 return retval;
3578 }
3579 ld = tty_ldisc_ref_wait(tty);
3580 retval = -EINVAL;
3581 if (ld->ioctl) {
3582 retval = ld->ioctl(tty, file, cmd, arg);
3583 if (retval == -ENOIOCTLCMD)
3584 retval = -EINVAL;
3585 }
3586 tty_ldisc_deref(ld);
3587 return retval;
3588}
3589
e10cc1df 3590#ifdef CONFIG_COMPAT
37bdfb07 3591static long tty_compat_ioctl(struct file *file, unsigned int cmd,
e10cc1df
PF
3592 unsigned long arg)
3593{
3594 struct inode *inode = file->f_dentry->d_inode;
3595 struct tty_struct *tty = file->private_data;
3596 struct tty_ldisc *ld;
3597 int retval = -ENOIOCTLCMD;
3598
3599 if (tty_paranoia_check(tty, inode, "tty_ioctl"))
3600 return -EINVAL;
3601
f34d7a5b
AC
3602 if (tty->ops->compat_ioctl) {
3603 retval = (tty->ops->compat_ioctl)(tty, file, cmd, arg);
e10cc1df
PF
3604 if (retval != -ENOIOCTLCMD)
3605 return retval;
3606 }
3607
3608 ld = tty_ldisc_ref_wait(tty);
3609 if (ld->compat_ioctl)
3610 retval = ld->compat_ioctl(tty, file, cmd, arg);
3611 tty_ldisc_deref(ld);
3612
3613 return retval;
3614}
3615#endif
1da177e4
LT
3616
3617/*
3618 * This implements the "Secure Attention Key" --- the idea is to
3619 * prevent trojan horses by killing all processes associated with this
3620 * tty when the user hits the "Secure Attention Key". Required for
3621 * super-paranoid applications --- see the Orange Book for more details.
37bdfb07 3622 *
1da177e4
LT
3623 * This code could be nicer; ideally it should send a HUP, wait a few
3624 * seconds, then send a INT, and then a KILL signal. But you then
3625 * have to coordinate with the init process, since all processes associated
3626 * with the current tty must be dead before the new getty is allowed
3627 * to spawn.
3628 *
3629 * Now, if it would be correct ;-/ The current code has a nasty hole -
3630 * it doesn't catch files in flight. We may send the descriptor to ourselves
3631 * via AF_UNIX socket, close it and later fetch from socket. FIXME.
3632 *
3633 * Nasty bug: do_SAK is being called in interrupt context. This can
3634 * deadlock. We punt it up to process context. AKPM - 16Mar2001
3635 */
8b6312f4 3636void __do_SAK(struct tty_struct *tty)
1da177e4
LT
3637{
3638#ifdef TTY_SOFT_SAK
3639 tty_hangup(tty);
3640#else
652486fb 3641 struct task_struct *g, *p;
ab521dc0 3642 struct pid *session;
1da177e4
LT
3643 int i;
3644 struct file *filp;
badf1662 3645 struct fdtable *fdt;
37bdfb07 3646
1da177e4
LT
3647 if (!tty)
3648 return;
24ec839c 3649 session = tty->session;
37bdfb07 3650
b3f13deb 3651 tty_ldisc_flush(tty);
1da177e4 3652
f34d7a5b 3653 tty_driver_flush_buffer(tty);
37bdfb07 3654
1da177e4 3655 read_lock(&tasklist_lock);
652486fb 3656 /* Kill the entire session */
ab521dc0 3657 do_each_pid_task(session, PIDTYPE_SID, p) {
652486fb 3658 printk(KERN_NOTICE "SAK: killed process %d"
a47afb0f 3659 " (%s): task_session_nr(p)==tty->session\n",
ba25f9dc 3660 task_pid_nr(p), p->comm);
652486fb 3661 send_sig(SIGKILL, p, 1);
ab521dc0 3662 } while_each_pid_task(session, PIDTYPE_SID, p);
652486fb
EB
3663 /* Now kill any processes that happen to have the
3664 * tty open.
3665 */
3666 do_each_thread(g, p) {
3667 if (p->signal->tty == tty) {
1da177e4 3668 printk(KERN_NOTICE "SAK: killed process %d"
a47afb0f 3669 " (%s): task_session_nr(p)==tty->session\n",
ba25f9dc 3670 task_pid_nr(p), p->comm);
1da177e4
LT
3671 send_sig(SIGKILL, p, 1);
3672 continue;
3673 }
3674 task_lock(p);
3675 if (p->files) {
ca99c1da
DS
3676 /*
3677 * We don't take a ref to the file, so we must
3678 * hold ->file_lock instead.
3679 */
3680 spin_lock(&p->files->file_lock);
badf1662 3681 fdt = files_fdtable(p->files);
37bdfb07 3682 for (i = 0; i < fdt->max_fds; i++) {
1da177e4
LT
3683 filp = fcheck_files(p->files, i);
3684 if (!filp)
3685 continue;
3686 if (filp->f_op->read == tty_read &&
3687 filp->private_data == tty) {
3688 printk(KERN_NOTICE "SAK: killed process %d"
3689 " (%s): fd#%d opened to the tty\n",
ba25f9dc 3690 task_pid_nr(p), p->comm, i);
20ac9437 3691 force_sig(SIGKILL, p);
1da177e4
LT
3692 break;
3693 }
3694 }
ca99c1da 3695 spin_unlock(&p->files->file_lock);
1da177e4
LT
3696 }
3697 task_unlock(p);
652486fb 3698 } while_each_thread(g, p);
1da177e4
LT
3699 read_unlock(&tasklist_lock);
3700#endif
3701}
3702
8b6312f4
EB
3703static void do_SAK_work(struct work_struct *work)
3704{
3705 struct tty_struct *tty =
3706 container_of(work, struct tty_struct, SAK_work);
3707 __do_SAK(tty);
3708}
3709
1da177e4
LT
3710/*
3711 * The tq handling here is a little racy - tty->SAK_work may already be queued.
3712 * Fortunately we don't need to worry, because if ->SAK_work is already queued,
3713 * the values which we write to it will be identical to the values which it
3714 * already has. --akpm
3715 */
3716void do_SAK(struct tty_struct *tty)
3717{
3718 if (!tty)
3719 return;
1da177e4
LT
3720 schedule_work(&tty->SAK_work);
3721}
3722
3723EXPORT_SYMBOL(do_SAK);
3724
af9b897e
AC
3725/**
3726 * flush_to_ldisc
65f27f38 3727 * @work: tty structure passed from work queue.
af9b897e
AC
3728 *
3729 * This routine is called out of the software interrupt to flush data
3730 * from the buffer chain to the line discipline.
3731 *
3732 * Locking: holds tty->buf.lock to guard buffer list. Drops the lock
3733 * while invoking the line discipline receive_buf method. The
3734 * receive_buf method is single threaded for each tty instance.
1da177e4 3735 */
37bdfb07 3736
65f27f38 3737static void flush_to_ldisc(struct work_struct *work)
1da177e4 3738{
65f27f38
DH
3739 struct tty_struct *tty =
3740 container_of(work, struct tty_struct, buf.work.work);
1da177e4
LT
3741 unsigned long flags;
3742 struct tty_ldisc *disc;
2c3bb20f 3743 struct tty_buffer *tbuf, *head;
8977d929
PF
3744 char *char_buf;
3745 unsigned char *flag_buf;
1da177e4
LT
3746
3747 disc = tty_ldisc_ref(tty);
3748 if (disc == NULL) /* !TTY_LDISC */
3749 return;
3750
808249ce 3751 spin_lock_irqsave(&tty->buf.lock, flags);
37bdfb07
AC
3752 /* So we know a flush is running */
3753 set_bit(TTY_FLUSHING, &tty->flags);
2c3bb20f
PF
3754 head = tty->buf.head;
3755 if (head != NULL) {
3756 tty->buf.head = NULL;
3757 for (;;) {
3758 int count = head->commit - head->read;
3759 if (!count) {
3760 if (head->next == NULL)
3761 break;
3762 tbuf = head;
3763 head = head->next;
3764 tty_buffer_free(tty, tbuf);
3765 continue;
3766 }
42fd552e
AC
3767 /* Ldisc or user is trying to flush the buffers
3768 we are feeding to the ldisc, stop feeding the
3769 line discipline as we want to empty the queue */
3770 if (test_bit(TTY_FLUSHPENDING, &tty->flags))
3771 break;
2c3bb20f
PF
3772 if (!tty->receive_room) {
3773 schedule_delayed_work(&tty->buf.work, 1);
3774 break;
3775 }
3776 if (count > tty->receive_room)
3777 count = tty->receive_room;
3778 char_buf = head->char_buf_ptr + head->read;
3779 flag_buf = head->flag_buf_ptr + head->read;
3780 head->read += count;
8977d929
PF
3781 spin_unlock_irqrestore(&tty->buf.lock, flags);
3782 disc->receive_buf(tty, char_buf, flag_buf, count);
3783 spin_lock_irqsave(&tty->buf.lock, flags);
3784 }
42fd552e 3785 /* Restore the queue head */
2c3bb20f 3786 tty->buf.head = head;
33f0f88f 3787 }
42fd552e
AC
3788 /* We may have a deferred request to flush the input buffer,
3789 if so pull the chain under the lock and empty the queue */
3790 if (test_bit(TTY_FLUSHPENDING, &tty->flags)) {
3791 __tty_buffer_flush(tty);
3792 clear_bit(TTY_FLUSHPENDING, &tty->flags);
3793 wake_up(&tty->read_wait);
3794 }
3795 clear_bit(TTY_FLUSHING, &tty->flags);
808249ce 3796 spin_unlock_irqrestore(&tty->buf.lock, flags);
817d6d3b 3797
1da177e4
LT
3798 tty_ldisc_deref(disc);
3799}
3800
1da177e4
LT
3801/**
3802 * tty_flip_buffer_push - terminal
3803 * @tty: tty to push
3804 *
3805 * Queue a push of the terminal flip buffers to the line discipline. This
3806 * function must not be called from IRQ context if tty->low_latency is set.
3807 *
3808 * In the event of the queue being busy for flipping the work will be
3809 * held off and retried later.
af9b897e
AC
3810 *
3811 * Locking: tty buffer lock. Driver locks in low latency mode.
1da177e4
LT
3812 */
3813
3814void tty_flip_buffer_push(struct tty_struct *tty)
3815{
808249ce
PF
3816 unsigned long flags;
3817 spin_lock_irqsave(&tty->buf.lock, flags);
33b37a33 3818 if (tty->buf.tail != NULL)
8977d929 3819 tty->buf.tail->commit = tty->buf.tail->used;
808249ce
PF
3820 spin_unlock_irqrestore(&tty->buf.lock, flags);
3821
1da177e4 3822 if (tty->low_latency)
65f27f38 3823 flush_to_ldisc(&tty->buf.work.work);
1da177e4 3824 else
33f0f88f 3825 schedule_delayed_work(&tty->buf.work, 1);
1da177e4
LT
3826}
3827
3828EXPORT_SYMBOL(tty_flip_buffer_push);
3829
33f0f88f 3830
af9b897e
AC
3831/**
3832 * initialize_tty_struct
3833 * @tty: tty to initialize
3834 *
3835 * This subroutine initializes a tty structure that has been newly
3836 * allocated.
3837 *
3838 * Locking: none - tty in question must not be exposed at this point
1da177e4 3839 */
af9b897e 3840
1da177e4
LT
3841static void initialize_tty_struct(struct tty_struct *tty)
3842{
3843 memset(tty, 0, sizeof(struct tty_struct));
3844 tty->magic = TTY_MAGIC;
3845 tty_ldisc_assign(tty, tty_ldisc_get(N_TTY));
ab521dc0
EB
3846 tty->session = NULL;
3847 tty->pgrp = NULL;
1da177e4 3848 tty->overrun_time = jiffies;
33f0f88f
AC
3849 tty->buf.head = tty->buf.tail = NULL;
3850 tty_buffer_init(tty);
65f27f38 3851 INIT_DELAYED_WORK(&tty->buf.work, flush_to_ldisc);
5785c95b 3852 mutex_init(&tty->termios_mutex);
1da177e4
LT
3853 init_waitqueue_head(&tty->write_wait);
3854 init_waitqueue_head(&tty->read_wait);
65f27f38 3855 INIT_WORK(&tty->hangup_work, do_tty_hangup);
70522e12
IM
3856 mutex_init(&tty->atomic_read_lock);
3857 mutex_init(&tty->atomic_write_lock);
1da177e4 3858 spin_lock_init(&tty->read_lock);
04f378b1 3859 spin_lock_init(&tty->ctrl_lock);
1da177e4 3860 INIT_LIST_HEAD(&tty->tty_files);
7f1f86a0 3861 INIT_WORK(&tty->SAK_work, do_SAK_work);
1da177e4
LT
3862}
3863
f34d7a5b
AC
3864/**
3865 * tty_put_char - write one character to a tty
3866 * @tty: tty
3867 * @ch: character
3868 *
3869 * Write one byte to the tty using the provided put_char method
3870 * if present. Returns the number of characters successfully output.
3871 *
3872 * Note: the specific put_char operation in the driver layer may go
3873 * away soon. Don't call it directly, use this method
1da177e4 3874 */
af9b897e 3875
f34d7a5b 3876int tty_put_char(struct tty_struct *tty, unsigned char ch)
1da177e4 3877{
f34d7a5b
AC
3878 if (tty->ops->put_char)
3879 return tty->ops->put_char(tty, ch);
3880 return tty->ops->write(tty, &ch, 1);
1da177e4
LT
3881}
3882
f34d7a5b
AC
3883EXPORT_SYMBOL_GPL(tty_put_char);
3884
7fe845d1 3885static struct class *tty_class;
1da177e4
LT
3886
3887/**
af9b897e
AC
3888 * tty_register_device - register a tty device
3889 * @driver: the tty driver that describes the tty device
3890 * @index: the index in the tty driver for this tty device
3891 * @device: a struct device that is associated with this tty device.
3892 * This field is optional, if there is no known struct device
3893 * for this tty device it can be set to NULL safely.
1da177e4 3894 *
01107d34
GKH
3895 * Returns a pointer to the struct device for this tty device
3896 * (or ERR_PTR(-EFOO) on error).
1cdcb6b4 3897 *
af9b897e
AC
3898 * This call is required to be made to register an individual tty device
3899 * if the tty driver's flags have the TTY_DRIVER_DYNAMIC_DEV bit set. If
3900 * that bit is not set, this function should not be called by a tty
3901 * driver.
3902 *
3903 * Locking: ??
1da177e4 3904 */
af9b897e 3905
01107d34
GKH
3906struct device *tty_register_device(struct tty_driver *driver, unsigned index,
3907 struct device *device)
1da177e4
LT
3908{
3909 char name[64];
3910 dev_t dev = MKDEV(driver->major, driver->minor_start) + index;
3911
3912 if (index >= driver->num) {
3913 printk(KERN_ERR "Attempt to register invalid tty line number "
3914 " (%d).\n", index);
1cdcb6b4 3915 return ERR_PTR(-EINVAL);
1da177e4
LT
3916 }
3917
1da177e4
LT
3918 if (driver->type == TTY_DRIVER_TYPE_PTY)
3919 pty_line_name(driver, index, name);
3920 else
3921 tty_line_name(driver, index, name);
1cdcb6b4 3922
01107d34 3923 return device_create(tty_class, device, dev, name);
1da177e4
LT
3924}
3925
3926/**
af9b897e
AC
3927 * tty_unregister_device - unregister a tty device
3928 * @driver: the tty driver that describes the tty device
3929 * @index: the index in the tty driver for this tty device
1da177e4 3930 *
af9b897e
AC
3931 * If a tty device is registered with a call to tty_register_device() then
3932 * this function must be called when the tty device is gone.
3933 *
3934 * Locking: ??
1da177e4 3935 */
af9b897e 3936
1da177e4
LT
3937void tty_unregister_device(struct tty_driver *driver, unsigned index)
3938{
37bdfb07
AC
3939 device_destroy(tty_class,
3940 MKDEV(driver->major, driver->minor_start) + index);
1da177e4
LT
3941}
3942
3943EXPORT_SYMBOL(tty_register_device);
3944EXPORT_SYMBOL(tty_unregister_device);
3945
3946struct tty_driver *alloc_tty_driver(int lines)
3947{
3948 struct tty_driver *driver;
3949
506eb99a 3950 driver = kzalloc(sizeof(struct tty_driver), GFP_KERNEL);
1da177e4 3951 if (driver) {
1da177e4
LT
3952 driver->magic = TTY_DRIVER_MAGIC;
3953 driver->num = lines;
3954 /* later we'll move allocation of tables here */
3955 }
3956 return driver;
3957}
3958
3959void put_tty_driver(struct tty_driver *driver)
3960{
3961 kfree(driver);
3962}
3963
b68e31d0
JD
3964void tty_set_operations(struct tty_driver *driver,
3965 const struct tty_operations *op)
1da177e4 3966{
f34d7a5b
AC
3967 driver->ops = op;
3968};
1da177e4
LT
3969
3970EXPORT_SYMBOL(alloc_tty_driver);
3971EXPORT_SYMBOL(put_tty_driver);
3972EXPORT_SYMBOL(tty_set_operations);
3973
3974/*
3975 * Called by a tty driver to register itself.
3976 */
3977int tty_register_driver(struct tty_driver *driver)
3978{
3979 int error;
37bdfb07 3980 int i;
1da177e4
LT
3981 dev_t dev;
3982 void **p = NULL;
3983
3984 if (driver->flags & TTY_DRIVER_INSTALLED)
3985 return 0;
3986
543691a6
AW
3987 if (!(driver->flags & TTY_DRIVER_DEVPTS_MEM) && driver->num) {
3988 p = kzalloc(driver->num * 3 * sizeof(void *), GFP_KERNEL);
1da177e4
LT
3989 if (!p)
3990 return -ENOMEM;
1da177e4
LT
3991 }
3992
3993 if (!driver->major) {
37bdfb07
AC
3994 error = alloc_chrdev_region(&dev, driver->minor_start,
3995 driver->num, driver->name);
1da177e4
LT
3996 if (!error) {
3997 driver->major = MAJOR(dev);
3998 driver->minor_start = MINOR(dev);
3999 }
4000 } else {
4001 dev = MKDEV(driver->major, driver->minor_start);
e5717c48 4002 error = register_chrdev_region(dev, driver->num, driver->name);
1da177e4
LT
4003 }
4004 if (error < 0) {
4005 kfree(p);
4006 return error;
4007 }
4008
4009 if (p) {
4010 driver->ttys = (struct tty_struct **)p;
edc6afc5 4011 driver->termios = (struct ktermios **)(p + driver->num);
37bdfb07
AC
4012 driver->termios_locked = (struct ktermios **)
4013 (p + driver->num * 2);
1da177e4
LT
4014 } else {
4015 driver->ttys = NULL;
4016 driver->termios = NULL;
4017 driver->termios_locked = NULL;
4018 }
4019
4020 cdev_init(&driver->cdev, &tty_fops);
4021 driver->cdev.owner = driver->owner;
4022 error = cdev_add(&driver->cdev, dev, driver->num);
4023 if (error) {
1da177e4
LT
4024 unregister_chrdev_region(dev, driver->num);
4025 driver->ttys = NULL;
4026 driver->termios = driver->termios_locked = NULL;
4027 kfree(p);
4028 return error;
4029 }
4030
ca509f69 4031 mutex_lock(&tty_mutex);
1da177e4 4032 list_add(&driver->tty_drivers, &tty_drivers);
ca509f69 4033 mutex_unlock(&tty_mutex);
37bdfb07
AC
4034
4035 if (!(driver->flags & TTY_DRIVER_DYNAMIC_DEV)) {
4036 for (i = 0; i < driver->num; i++)
1da177e4
LT
4037 tty_register_device(driver, i, NULL);
4038 }
4039 proc_tty_register_driver(driver);
4040 return 0;
4041}
4042
4043EXPORT_SYMBOL(tty_register_driver);
4044
4045/*
4046 * Called by a tty driver to unregister itself.
4047 */
4048int tty_unregister_driver(struct tty_driver *driver)
4049{
4050 int i;
edc6afc5 4051 struct ktermios *tp;
1da177e4
LT
4052 void *p;
4053
4054 if (driver->refcount)
4055 return -EBUSY;
4056
4057 unregister_chrdev_region(MKDEV(driver->major, driver->minor_start),
4058 driver->num);
ca509f69 4059 mutex_lock(&tty_mutex);
1da177e4 4060 list_del(&driver->tty_drivers);
ca509f69 4061 mutex_unlock(&tty_mutex);
1da177e4
LT
4062
4063 /*
4064 * Free the termios and termios_locked structures because
4065 * we don't want to get memory leaks when modular tty
4066 * drivers are removed from the kernel.
4067 */
4068 for (i = 0; i < driver->num; i++) {
4069 tp = driver->termios[i];
4070 if (tp) {
4071 driver->termios[i] = NULL;
4072 kfree(tp);
4073 }
4074 tp = driver->termios_locked[i];
4075 if (tp) {
4076 driver->termios_locked[i] = NULL;
4077 kfree(tp);
4078 }
331b8319 4079 if (!(driver->flags & TTY_DRIVER_DYNAMIC_DEV))
1da177e4
LT
4080 tty_unregister_device(driver, i);
4081 }
4082 p = driver->ttys;
4083 proc_tty_unregister_driver(driver);
4084 driver->ttys = NULL;
4085 driver->termios = driver->termios_locked = NULL;
4086 kfree(p);
4087 cdev_del(&driver->cdev);
4088 return 0;
4089}
1da177e4
LT
4090EXPORT_SYMBOL(tty_unregister_driver);
4091
24ec839c
PZ
4092dev_t tty_devnum(struct tty_struct *tty)
4093{
4094 return MKDEV(tty->driver->major, tty->driver->minor_start) + tty->index;
4095}
4096EXPORT_SYMBOL(tty_devnum);
4097
4098void proc_clear_tty(struct task_struct *p)
4099{
4100 spin_lock_irq(&p->sighand->siglock);
4101 p->signal->tty = NULL;
4102 spin_unlock_irq(&p->sighand->siglock);
4103}
7cac4ce5 4104EXPORT_SYMBOL(proc_clear_tty);
24ec839c 4105
47f86834
AC
4106/* Called under the sighand lock */
4107
2a65f1d9 4108static void __proc_set_tty(struct task_struct *tsk, struct tty_struct *tty)
24ec839c
PZ
4109{
4110 if (tty) {
47f86834
AC
4111 unsigned long flags;
4112 /* We should not have a session or pgrp to put here but.... */
4113 spin_lock_irqsave(&tty->ctrl_lock, flags);
d9c1e9a8
EB
4114 put_pid(tty->session);
4115 put_pid(tty->pgrp);
ab521dc0 4116 tty->pgrp = get_pid(task_pgrp(tsk));
47f86834
AC
4117 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
4118 tty->session = get_pid(task_session(tsk));
24ec839c 4119 }
2a65f1d9 4120 put_pid(tsk->signal->tty_old_pgrp);
24ec839c 4121 tsk->signal->tty = tty;
ab521dc0 4122 tsk->signal->tty_old_pgrp = NULL;
24ec839c
PZ
4123}
4124
98a27ba4 4125static void proc_set_tty(struct task_struct *tsk, struct tty_struct *tty)
24ec839c
PZ
4126{
4127 spin_lock_irq(&tsk->sighand->siglock);
2a65f1d9 4128 __proc_set_tty(tsk, tty);
24ec839c
PZ
4129 spin_unlock_irq(&tsk->sighand->siglock);
4130}
4131
4132struct tty_struct *get_current_tty(void)
4133{
4134 struct tty_struct *tty;
4135 WARN_ON_ONCE(!mutex_is_locked(&tty_mutex));
4136 tty = current->signal->tty;
4137 /*
4138 * session->tty can be changed/cleared from under us, make sure we
4139 * issue the load. The obtained pointer, when not NULL, is valid as
4140 * long as we hold tty_mutex.
4141 */
4142 barrier();
4143 return tty;
4144}
a311f743 4145EXPORT_SYMBOL_GPL(get_current_tty);
1da177e4
LT
4146
4147/*
4148 * Initialize the console device. This is called *early*, so
4149 * we can't necessarily depend on lots of kernel help here.
4150 * Just do some early initializations, and do the complex setup
4151 * later.
4152 */
4153void __init console_init(void)
4154{
4155 initcall_t *call;
4156
4157 /* Setup the default TTY line discipline. */
4158 (void) tty_register_ldisc(N_TTY, &tty_ldisc_N_TTY);
4159
4160 /*
37bdfb07 4161 * set up the console device so that later boot sequences can
1da177e4
LT
4162 * inform about problems etc..
4163 */
1da177e4
LT
4164 call = __con_initcall_start;
4165 while (call < __con_initcall_end) {
4166 (*call)();
4167 call++;
4168 }
4169}
4170
1da177e4
LT
4171static int __init tty_class_init(void)
4172{
7fe845d1 4173 tty_class = class_create(THIS_MODULE, "tty");
1da177e4
LT
4174 if (IS_ERR(tty_class))
4175 return PTR_ERR(tty_class);
4176 return 0;
4177}
4178
4179postcore_initcall(tty_class_init);
4180
4181/* 3/2004 jmc: why do these devices exist? */
4182
4183static struct cdev tty_cdev, console_cdev;
4184#ifdef CONFIG_UNIX98_PTYS
4185static struct cdev ptmx_cdev;
4186#endif
4187#ifdef CONFIG_VT
4188static struct cdev vc0_cdev;
4189#endif
4190
4191/*
4192 * Ok, now we can initialize the rest of the tty devices and can count
4193 * on memory allocations, interrupts etc..
4194 */
4195static int __init tty_init(void)
4196{
4197 cdev_init(&tty_cdev, &tty_fops);
4198 if (cdev_add(&tty_cdev, MKDEV(TTYAUX_MAJOR, 0), 1) ||
4199 register_chrdev_region(MKDEV(TTYAUX_MAJOR, 0), 1, "/dev/tty") < 0)
4200 panic("Couldn't register /dev/tty driver\n");
01107d34 4201 device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 0), "tty");
1da177e4
LT
4202
4203 cdev_init(&console_cdev, &console_fops);
4204 if (cdev_add(&console_cdev, MKDEV(TTYAUX_MAJOR, 1), 1) ||
4205 register_chrdev_region(MKDEV(TTYAUX_MAJOR, 1), 1, "/dev/console") < 0)
4206 panic("Couldn't register /dev/console driver\n");
01107d34 4207 device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 1), "console");
1da177e4
LT
4208
4209#ifdef CONFIG_UNIX98_PTYS
4210 cdev_init(&ptmx_cdev, &ptmx_fops);
4211 if (cdev_add(&ptmx_cdev, MKDEV(TTYAUX_MAJOR, 2), 1) ||
4212 register_chrdev_region(MKDEV(TTYAUX_MAJOR, 2), 1, "/dev/ptmx") < 0)
4213 panic("Couldn't register /dev/ptmx driver\n");
01107d34 4214 device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 2), "ptmx");
1da177e4
LT
4215#endif
4216
4217#ifdef CONFIG_VT
4218 cdev_init(&vc0_cdev, &console_fops);
4219 if (cdev_add(&vc0_cdev, MKDEV(TTY_MAJOR, 0), 1) ||
4220 register_chrdev_region(MKDEV(TTY_MAJOR, 0), 1, "/dev/vc/0") < 0)
4221 panic("Couldn't register /dev/tty0 driver\n");
01107d34 4222 device_create(tty_class, NULL, MKDEV(TTY_MAJOR, 0), "tty0");
1da177e4
LT
4223
4224 vty_init();
4225#endif
4226 return 0;
4227}
4228module_init(tty_init);