Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v2.6.13-rc2 2991 lines 76 kB view raw
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 22 * makes for cleaner and more compact code. -TYT, 9/17/92 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 44 * 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. 65 * alloc_tty_struct() always uses kmalloc() -- Andrew Morton <andrewm@uow.edu.eu> 17Mar01 66 */ 67 68#include <linux/config.h> 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> 97#include <linux/delay.h> 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> 105#include <linux/devfs_fs_kernel.h> 106 107#include <linux/kmod.h> 108 109#undef TTY_DEBUG_HANGUP 110 111#define TTY_PARANOIA_CHECK 1 112#define CHECK_TTY_COUNT 1 113 114struct termios tty_std_termios = { /* for the benefit of tty drivers */ 115 .c_iflag = ICRNL | IXON, 116 .c_oflag = OPOST | ONLCR, 117 .c_cflag = B38400 | CS8 | CREAD | HUPCL, 118 .c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK | 119 ECHOCTL | ECHOKE | IEXTEN, 120 .c_cc = INIT_C_CC 121}; 122 123EXPORT_SYMBOL(tty_std_termios); 124 125/* This list gets poked at by procfs and various bits of boot up code. This 126 could do with some rationalisation such as pulling the tty proc function 127 into this file */ 128 129LIST_HEAD(tty_drivers); /* linked list of tty drivers */ 130 131/* Semaphore to protect creating and releasing a tty. This is shared with 132 vt.c for deeply disgusting hack reasons */ 133DECLARE_MUTEX(tty_sem); 134 135#ifdef CONFIG_UNIX98_PTYS 136extern struct tty_driver *ptm_driver; /* Unix98 pty masters; for /dev/ptmx */ 137extern int pty_limit; /* Config limit on Unix98 ptys */ 138static DEFINE_IDR(allocated_ptys); 139static DECLARE_MUTEX(allocated_ptys_lock); 140static int ptmx_open(struct inode *, struct file *); 141#endif 142 143extern void disable_early_printk(void); 144 145static void initialize_tty_struct(struct tty_struct *tty); 146 147static ssize_t tty_read(struct file *, char __user *, size_t, loff_t *); 148static ssize_t tty_write(struct file *, const char __user *, size_t, loff_t *); 149ssize_t redirected_tty_write(struct file *, const char __user *, size_t, loff_t *); 150static unsigned int tty_poll(struct file *, poll_table *); 151static int tty_open(struct inode *, struct file *); 152static int tty_release(struct inode *, struct file *); 153int tty_ioctl(struct inode * inode, struct file * file, 154 unsigned int cmd, unsigned long arg); 155static int tty_fasync(int fd, struct file * filp, int on); 156extern void rs_360_init(void); 157static void release_mem(struct tty_struct *tty, int idx); 158 159 160static struct tty_struct *alloc_tty_struct(void) 161{ 162 struct tty_struct *tty; 163 164 tty = kmalloc(sizeof(struct tty_struct), GFP_KERNEL); 165 if (tty) 166 memset(tty, 0, sizeof(struct tty_struct)); 167 return tty; 168} 169 170static inline void free_tty_struct(struct tty_struct *tty) 171{ 172 kfree(tty->write_buf); 173 kfree(tty); 174} 175 176#define TTY_NUMBER(tty) ((tty)->index + (tty)->driver->name_base) 177 178char *tty_name(struct tty_struct *tty, char *buf) 179{ 180 if (!tty) /* Hmm. NULL pointer. That's fun. */ 181 strcpy(buf, "NULL tty"); 182 else 183 strcpy(buf, tty->name); 184 return buf; 185} 186 187EXPORT_SYMBOL(tty_name); 188 189int tty_paranoia_check(struct tty_struct *tty, struct inode *inode, 190 const char *routine) 191{ 192#ifdef TTY_PARANOIA_CHECK 193 if (!tty) { 194 printk(KERN_WARNING 195 "null TTY for (%d:%d) in %s\n", 196 imajor(inode), iminor(inode), routine); 197 return 1; 198 } 199 if (tty->magic != TTY_MAGIC) { 200 printk(KERN_WARNING 201 "bad magic number for tty struct (%d:%d) in %s\n", 202 imajor(inode), iminor(inode), routine); 203 return 1; 204 } 205#endif 206 return 0; 207} 208 209static int check_tty_count(struct tty_struct *tty, const char *routine) 210{ 211#ifdef CHECK_TTY_COUNT 212 struct list_head *p; 213 int count = 0; 214 215 file_list_lock(); 216 list_for_each(p, &tty->tty_files) { 217 count++; 218 } 219 file_list_unlock(); 220 if (tty->driver->type == TTY_DRIVER_TYPE_PTY && 221 tty->driver->subtype == PTY_TYPE_SLAVE && 222 tty->link && tty->link->count) 223 count++; 224 if (tty->count != count) { 225 printk(KERN_WARNING "Warning: dev (%s) tty->count(%d) " 226 "!= #fd's(%d) in %s\n", 227 tty->name, tty->count, count, routine); 228 return count; 229 } 230#endif 231 return 0; 232} 233 234/* 235 * This is probably overkill for real world processors but 236 * they are not on hot paths so a little discipline won't do 237 * any harm. 238 */ 239 240static void tty_set_termios_ldisc(struct tty_struct *tty, int num) 241{ 242 down(&tty->termios_sem); 243 tty->termios->c_line = num; 244 up(&tty->termios_sem); 245} 246 247/* 248 * This guards the refcounted line discipline lists. The lock 249 * must be taken with irqs off because there are hangup path 250 * callers who will do ldisc lookups and cannot sleep. 251 */ 252 253static DEFINE_SPINLOCK(tty_ldisc_lock); 254static DECLARE_WAIT_QUEUE_HEAD(tty_ldisc_wait); 255static struct tty_ldisc tty_ldiscs[NR_LDISCS]; /* line disc dispatch table */ 256 257int tty_register_ldisc(int disc, struct tty_ldisc *new_ldisc) 258{ 259 unsigned long flags; 260 int ret = 0; 261 262 if (disc < N_TTY || disc >= NR_LDISCS) 263 return -EINVAL; 264 265 spin_lock_irqsave(&tty_ldisc_lock, flags); 266 tty_ldiscs[disc] = *new_ldisc; 267 tty_ldiscs[disc].num = disc; 268 tty_ldiscs[disc].flags |= LDISC_FLAG_DEFINED; 269 tty_ldiscs[disc].refcount = 0; 270 spin_unlock_irqrestore(&tty_ldisc_lock, flags); 271 272 return ret; 273} 274EXPORT_SYMBOL(tty_register_ldisc); 275 276int tty_unregister_ldisc(int disc) 277{ 278 unsigned long flags; 279 int ret = 0; 280 281 if (disc < N_TTY || disc >= NR_LDISCS) 282 return -EINVAL; 283 284 spin_lock_irqsave(&tty_ldisc_lock, flags); 285 if (tty_ldiscs[disc].refcount) 286 ret = -EBUSY; 287 else 288 tty_ldiscs[disc].flags &= ~LDISC_FLAG_DEFINED; 289 spin_unlock_irqrestore(&tty_ldisc_lock, flags); 290 291 return ret; 292} 293EXPORT_SYMBOL(tty_unregister_ldisc); 294 295struct tty_ldisc *tty_ldisc_get(int disc) 296{ 297 unsigned long flags; 298 struct tty_ldisc *ld; 299 300 if (disc < N_TTY || disc >= NR_LDISCS) 301 return NULL; 302 303 spin_lock_irqsave(&tty_ldisc_lock, flags); 304 305 ld = &tty_ldiscs[disc]; 306 /* Check the entry is defined */ 307 if(ld->flags & LDISC_FLAG_DEFINED) 308 { 309 /* If the module is being unloaded we can't use it */ 310 if (!try_module_get(ld->owner)) 311 ld = NULL; 312 else /* lock it */ 313 ld->refcount++; 314 } 315 else 316 ld = NULL; 317 spin_unlock_irqrestore(&tty_ldisc_lock, flags); 318 return ld; 319} 320 321EXPORT_SYMBOL_GPL(tty_ldisc_get); 322 323void tty_ldisc_put(int disc) 324{ 325 struct tty_ldisc *ld; 326 unsigned long flags; 327 328 if (disc < N_TTY || disc >= NR_LDISCS) 329 BUG(); 330 331 spin_lock_irqsave(&tty_ldisc_lock, flags); 332 ld = &tty_ldiscs[disc]; 333 if(ld->refcount == 0) 334 BUG(); 335 ld->refcount --; 336 module_put(ld->owner); 337 spin_unlock_irqrestore(&tty_ldisc_lock, flags); 338} 339 340EXPORT_SYMBOL_GPL(tty_ldisc_put); 341 342static void tty_ldisc_assign(struct tty_struct *tty, struct tty_ldisc *ld) 343{ 344 tty->ldisc = *ld; 345 tty->ldisc.refcount = 0; 346} 347 348/** 349 * tty_ldisc_try - internal helper 350 * @tty: the tty 351 * 352 * Make a single attempt to grab and bump the refcount on 353 * the tty ldisc. Return 0 on failure or 1 on success. This is 354 * used to implement both the waiting and non waiting versions 355 * of tty_ldisc_ref 356 */ 357 358static int tty_ldisc_try(struct tty_struct *tty) 359{ 360 unsigned long flags; 361 struct tty_ldisc *ld; 362 int ret = 0; 363 364 spin_lock_irqsave(&tty_ldisc_lock, flags); 365 ld = &tty->ldisc; 366 if(test_bit(TTY_LDISC, &tty->flags)) 367 { 368 ld->refcount++; 369 ret = 1; 370 } 371 spin_unlock_irqrestore(&tty_ldisc_lock, flags); 372 return ret; 373} 374 375/** 376 * tty_ldisc_ref_wait - wait for the tty ldisc 377 * @tty: tty device 378 * 379 * Dereference the line discipline for the terminal and take a 380 * reference to it. If the line discipline is in flux then 381 * wait patiently until it changes. 382 * 383 * Note: Must not be called from an IRQ/timer context. The caller 384 * must also be careful not to hold other locks that will deadlock 385 * against a discipline change, such as an existing ldisc reference 386 * (which we check for) 387 */ 388 389struct tty_ldisc *tty_ldisc_ref_wait(struct tty_struct *tty) 390{ 391 /* wait_event is a macro */ 392 wait_event(tty_ldisc_wait, tty_ldisc_try(tty)); 393 if(tty->ldisc.refcount == 0) 394 printk(KERN_ERR "tty_ldisc_ref_wait\n"); 395 return &tty->ldisc; 396} 397 398EXPORT_SYMBOL_GPL(tty_ldisc_ref_wait); 399 400/** 401 * tty_ldisc_ref - get the tty ldisc 402 * @tty: tty device 403 * 404 * Dereference the line discipline for the terminal and take a 405 * reference to it. If the line discipline is in flux then 406 * return NULL. Can be called from IRQ and timer functions. 407 */ 408 409struct tty_ldisc *tty_ldisc_ref(struct tty_struct *tty) 410{ 411 if(tty_ldisc_try(tty)) 412 return &tty->ldisc; 413 return NULL; 414} 415 416EXPORT_SYMBOL_GPL(tty_ldisc_ref); 417 418/** 419 * tty_ldisc_deref - free a tty ldisc reference 420 * @ld: reference to free up 421 * 422 * Undoes the effect of tty_ldisc_ref or tty_ldisc_ref_wait. May 423 * be called in IRQ context. 424 */ 425 426void tty_ldisc_deref(struct tty_ldisc *ld) 427{ 428 unsigned long flags; 429 430 if(ld == NULL) 431 BUG(); 432 433 spin_lock_irqsave(&tty_ldisc_lock, flags); 434 if(ld->refcount == 0) 435 printk(KERN_ERR "tty_ldisc_deref: no references.\n"); 436 else 437 ld->refcount--; 438 if(ld->refcount == 0) 439 wake_up(&tty_ldisc_wait); 440 spin_unlock_irqrestore(&tty_ldisc_lock, flags); 441} 442 443EXPORT_SYMBOL_GPL(tty_ldisc_deref); 444 445/** 446 * tty_ldisc_enable - allow ldisc use 447 * @tty: terminal to activate ldisc on 448 * 449 * Set the TTY_LDISC flag when the line discipline can be called 450 * again. Do neccessary wakeups for existing sleepers. 451 * 452 * Note: nobody should set this bit except via this function. Clearing 453 * directly is allowed. 454 */ 455 456static void tty_ldisc_enable(struct tty_struct *tty) 457{ 458 set_bit(TTY_LDISC, &tty->flags); 459 wake_up(&tty_ldisc_wait); 460} 461 462/** 463 * tty_set_ldisc - set line discipline 464 * @tty: the terminal to set 465 * @ldisc: the line discipline 466 * 467 * Set the discipline of a tty line. Must be called from a process 468 * context. 469 */ 470 471static int tty_set_ldisc(struct tty_struct *tty, int ldisc) 472{ 473 int retval = 0; 474 struct tty_ldisc o_ldisc; 475 char buf[64]; 476 int work; 477 unsigned long flags; 478 struct tty_ldisc *ld; 479 480 if ((ldisc < N_TTY) || (ldisc >= NR_LDISCS)) 481 return -EINVAL; 482 483restart: 484 485 if (tty->ldisc.num == ldisc) 486 return 0; /* We are already in the desired discipline */ 487 488 ld = tty_ldisc_get(ldisc); 489 /* Eduardo Blanco <ejbs@cs.cs.com.uy> */ 490 /* Cyrus Durgin <cider@speakeasy.org> */ 491 if (ld == NULL) { 492 request_module("tty-ldisc-%d", ldisc); 493 ld = tty_ldisc_get(ldisc); 494 } 495 if (ld == NULL) 496 return -EINVAL; 497 498 o_ldisc = tty->ldisc; 499 500 tty_wait_until_sent(tty, 0); 501 502 /* 503 * Make sure we don't change while someone holds a 504 * reference to the line discipline. The TTY_LDISC bit 505 * prevents anyone taking a reference once it is clear. 506 * We need the lock to avoid racing reference takers. 507 */ 508 509 spin_lock_irqsave(&tty_ldisc_lock, flags); 510 if(tty->ldisc.refcount) 511 { 512 /* Free the new ldisc we grabbed. Must drop the lock 513 first. */ 514 spin_unlock_irqrestore(&tty_ldisc_lock, flags); 515 tty_ldisc_put(ldisc); 516 /* 517 * There are several reasons we may be busy, including 518 * random momentary I/O traffic. We must therefore 519 * retry. We could distinguish between blocking ops 520 * and retries if we made tty_ldisc_wait() smarter. That 521 * is up for discussion. 522 */ 523 if(wait_event_interruptible(tty_ldisc_wait, tty->ldisc.refcount == 0) < 0) 524 return -ERESTARTSYS; 525 goto restart; 526 } 527 clear_bit(TTY_LDISC, &tty->flags); 528 clear_bit(TTY_DONT_FLIP, &tty->flags); 529 spin_unlock_irqrestore(&tty_ldisc_lock, flags); 530 531 /* 532 * From this point on we know nobody has an ldisc 533 * usage reference, nor can they obtain one until 534 * we say so later on. 535 */ 536 537 work = cancel_delayed_work(&tty->flip.work); 538 /* 539 * Wait for ->hangup_work and ->flip.work handlers to terminate 540 */ 541 542 flush_scheduled_work(); 543 /* Shutdown the current discipline. */ 544 if (tty->ldisc.close) 545 (tty->ldisc.close)(tty); 546 547 /* Now set up the new line discipline. */ 548 tty_ldisc_assign(tty, ld); 549 tty_set_termios_ldisc(tty, ldisc); 550 if (tty->ldisc.open) 551 retval = (tty->ldisc.open)(tty); 552 if (retval < 0) { 553 tty_ldisc_put(ldisc); 554 /* There is an outstanding reference here so this is safe */ 555 tty_ldisc_assign(tty, tty_ldisc_get(o_ldisc.num)); 556 tty_set_termios_ldisc(tty, tty->ldisc.num); 557 if (tty->ldisc.open && (tty->ldisc.open(tty) < 0)) { 558 tty_ldisc_put(o_ldisc.num); 559 /* This driver is always present */ 560 tty_ldisc_assign(tty, tty_ldisc_get(N_TTY)); 561 tty_set_termios_ldisc(tty, N_TTY); 562 if (tty->ldisc.open) { 563 int r = tty->ldisc.open(tty); 564 565 if (r < 0) 566 panic("Couldn't open N_TTY ldisc for " 567 "%s --- error %d.", 568 tty_name(tty, buf), r); 569 } 570 } 571 } 572 /* At this point we hold a reference to the new ldisc and a 573 a reference to the old ldisc. If we ended up flipping back 574 to the existing ldisc we have two references to it */ 575 576 if (tty->ldisc.num != o_ldisc.num && tty->driver->set_ldisc) 577 tty->driver->set_ldisc(tty); 578 579 tty_ldisc_put(o_ldisc.num); 580 581 /* 582 * Allow ldisc referencing to occur as soon as the driver 583 * ldisc callback completes. 584 */ 585 586 tty_ldisc_enable(tty); 587 588 /* Restart it in case no characters kick it off. Safe if 589 already running */ 590 if(work) 591 schedule_delayed_work(&tty->flip.work, 1); 592 return retval; 593} 594 595/* 596 * This routine returns a tty driver structure, given a device number 597 */ 598static struct tty_driver *get_tty_driver(dev_t device, int *index) 599{ 600 struct tty_driver *p; 601 602 list_for_each_entry(p, &tty_drivers, tty_drivers) { 603 dev_t base = MKDEV(p->major, p->minor_start); 604 if (device < base || device >= base + p->num) 605 continue; 606 *index = device - base; 607 return p; 608 } 609 return NULL; 610} 611 612/* 613 * If we try to write to, or set the state of, a terminal and we're 614 * not in the foreground, send a SIGTTOU. If the signal is blocked or 615 * ignored, go ahead and perform the operation. (POSIX 7.2) 616 */ 617int tty_check_change(struct tty_struct * tty) 618{ 619 if (current->signal->tty != tty) 620 return 0; 621 if (tty->pgrp <= 0) { 622 printk(KERN_WARNING "tty_check_change: tty->pgrp <= 0!\n"); 623 return 0; 624 } 625 if (process_group(current) == tty->pgrp) 626 return 0; 627 if (is_ignored(SIGTTOU)) 628 return 0; 629 if (is_orphaned_pgrp(process_group(current))) 630 return -EIO; 631 (void) kill_pg(process_group(current), SIGTTOU, 1); 632 return -ERESTARTSYS; 633} 634 635EXPORT_SYMBOL(tty_check_change); 636 637static ssize_t hung_up_tty_read(struct file * file, char __user * buf, 638 size_t count, loff_t *ppos) 639{ 640 return 0; 641} 642 643static ssize_t hung_up_tty_write(struct file * file, const char __user * buf, 644 size_t count, loff_t *ppos) 645{ 646 return -EIO; 647} 648 649/* No kernel lock held - none needed ;) */ 650static unsigned int hung_up_tty_poll(struct file * filp, poll_table * wait) 651{ 652 return POLLIN | POLLOUT | POLLERR | POLLHUP | POLLRDNORM | POLLWRNORM; 653} 654 655static int hung_up_tty_ioctl(struct inode * inode, struct file * file, 656 unsigned int cmd, unsigned long arg) 657{ 658 return cmd == TIOCSPGRP ? -ENOTTY : -EIO; 659} 660 661static struct file_operations tty_fops = { 662 .llseek = no_llseek, 663 .read = tty_read, 664 .write = tty_write, 665 .poll = tty_poll, 666 .ioctl = tty_ioctl, 667 .open = tty_open, 668 .release = tty_release, 669 .fasync = tty_fasync, 670}; 671 672#ifdef CONFIG_UNIX98_PTYS 673static struct file_operations ptmx_fops = { 674 .llseek = no_llseek, 675 .read = tty_read, 676 .write = tty_write, 677 .poll = tty_poll, 678 .ioctl = tty_ioctl, 679 .open = ptmx_open, 680 .release = tty_release, 681 .fasync = tty_fasync, 682}; 683#endif 684 685static struct file_operations console_fops = { 686 .llseek = no_llseek, 687 .read = tty_read, 688 .write = redirected_tty_write, 689 .poll = tty_poll, 690 .ioctl = tty_ioctl, 691 .open = tty_open, 692 .release = tty_release, 693 .fasync = tty_fasync, 694}; 695 696static struct file_operations hung_up_tty_fops = { 697 .llseek = no_llseek, 698 .read = hung_up_tty_read, 699 .write = hung_up_tty_write, 700 .poll = hung_up_tty_poll, 701 .ioctl = hung_up_tty_ioctl, 702 .release = tty_release, 703}; 704 705static DEFINE_SPINLOCK(redirect_lock); 706static struct file *redirect; 707 708/** 709 * tty_wakeup - request more data 710 * @tty: terminal 711 * 712 * Internal and external helper for wakeups of tty. This function 713 * informs the line discipline if present that the driver is ready 714 * to receive more output data. 715 */ 716 717void tty_wakeup(struct tty_struct *tty) 718{ 719 struct tty_ldisc *ld; 720 721 if (test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) { 722 ld = tty_ldisc_ref(tty); 723 if(ld) { 724 if(ld->write_wakeup) 725 ld->write_wakeup(tty); 726 tty_ldisc_deref(ld); 727 } 728 } 729 wake_up_interruptible(&tty->write_wait); 730} 731 732EXPORT_SYMBOL_GPL(tty_wakeup); 733 734/** 735 * tty_ldisc_flush - flush line discipline queue 736 * @tty: tty 737 * 738 * Flush the line discipline queue (if any) for this tty. If there 739 * is no line discipline active this is a no-op. 740 */ 741 742void tty_ldisc_flush(struct tty_struct *tty) 743{ 744 struct tty_ldisc *ld = tty_ldisc_ref(tty); 745 if(ld) { 746 if(ld->flush_buffer) 747 ld->flush_buffer(tty); 748 tty_ldisc_deref(ld); 749 } 750} 751 752EXPORT_SYMBOL_GPL(tty_ldisc_flush); 753 754/* 755 * This can be called by the "eventd" kernel thread. That is process synchronous, 756 * but doesn't hold any locks, so we need to make sure we have the appropriate 757 * locks for what we're doing.. 758 */ 759static void do_tty_hangup(void *data) 760{ 761 struct tty_struct *tty = (struct tty_struct *) data; 762 struct file * cons_filp = NULL; 763 struct file *filp, *f = NULL; 764 struct task_struct *p; 765 struct tty_ldisc *ld; 766 int closecount = 0, n; 767 768 if (!tty) 769 return; 770 771 /* inuse_filps is protected by the single kernel lock */ 772 lock_kernel(); 773 774 spin_lock(&redirect_lock); 775 if (redirect && redirect->private_data == tty) { 776 f = redirect; 777 redirect = NULL; 778 } 779 spin_unlock(&redirect_lock); 780 781 check_tty_count(tty, "do_tty_hangup"); 782 file_list_lock(); 783 /* This breaks for file handles being sent over AF_UNIX sockets ? */ 784 list_for_each_entry(filp, &tty->tty_files, f_list) { 785 if (filp->f_op->write == redirected_tty_write) 786 cons_filp = filp; 787 if (filp->f_op->write != tty_write) 788 continue; 789 closecount++; 790 tty_fasync(-1, filp, 0); /* can't block */ 791 filp->f_op = &hung_up_tty_fops; 792 } 793 file_list_unlock(); 794 795 /* FIXME! What are the locking issues here? This may me overdoing things.. 796 * this question is especially important now that we've removed the irqlock. */ 797 798 ld = tty_ldisc_ref(tty); 799 if(ld != NULL) /* We may have no line discipline at this point */ 800 { 801 if (ld->flush_buffer) 802 ld->flush_buffer(tty); 803 if (tty->driver->flush_buffer) 804 tty->driver->flush_buffer(tty); 805 if ((test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) && 806 ld->write_wakeup) 807 ld->write_wakeup(tty); 808 if (ld->hangup) 809 ld->hangup(tty); 810 } 811 812 /* FIXME: Once we trust the LDISC code better we can wait here for 813 ldisc completion and fix the driver call race */ 814 815 wake_up_interruptible(&tty->write_wait); 816 wake_up_interruptible(&tty->read_wait); 817 818 /* 819 * Shutdown the current line discipline, and reset it to 820 * N_TTY. 821 */ 822 if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS) 823 { 824 down(&tty->termios_sem); 825 *tty->termios = tty->driver->init_termios; 826 up(&tty->termios_sem); 827 } 828 829 /* Defer ldisc switch */ 830 /* tty_deferred_ldisc_switch(N_TTY); 831 832 This should get done automatically when the port closes and 833 tty_release is called */ 834 835 read_lock(&tasklist_lock); 836 if (tty->session > 0) { 837 do_each_task_pid(tty->session, PIDTYPE_SID, p) { 838 if (p->signal->tty == tty) 839 p->signal->tty = NULL; 840 if (!p->signal->leader) 841 continue; 842 send_group_sig_info(SIGHUP, SEND_SIG_PRIV, p); 843 send_group_sig_info(SIGCONT, SEND_SIG_PRIV, p); 844 if (tty->pgrp > 0) 845 p->signal->tty_old_pgrp = tty->pgrp; 846 } while_each_task_pid(tty->session, PIDTYPE_SID, p); 847 } 848 read_unlock(&tasklist_lock); 849 850 tty->flags = 0; 851 tty->session = 0; 852 tty->pgrp = -1; 853 tty->ctrl_status = 0; 854 /* 855 * If one of the devices matches a console pointer, we 856 * cannot just call hangup() because that will cause 857 * tty->count and state->count to go out of sync. 858 * So we just call close() the right number of times. 859 */ 860 if (cons_filp) { 861 if (tty->driver->close) 862 for (n = 0; n < closecount; n++) 863 tty->driver->close(tty, cons_filp); 864 } else if (tty->driver->hangup) 865 (tty->driver->hangup)(tty); 866 867 /* We don't want to have driver/ldisc interactions beyond 868 the ones we did here. The driver layer expects no 869 calls after ->hangup() from the ldisc side. However we 870 can't yet guarantee all that */ 871 872 set_bit(TTY_HUPPED, &tty->flags); 873 if (ld) { 874 tty_ldisc_enable(tty); 875 tty_ldisc_deref(ld); 876 } 877 unlock_kernel(); 878 if (f) 879 fput(f); 880} 881 882void tty_hangup(struct tty_struct * tty) 883{ 884#ifdef TTY_DEBUG_HANGUP 885 char buf[64]; 886 887 printk(KERN_DEBUG "%s hangup...\n", tty_name(tty, buf)); 888#endif 889 schedule_work(&tty->hangup_work); 890} 891 892EXPORT_SYMBOL(tty_hangup); 893 894void tty_vhangup(struct tty_struct * tty) 895{ 896#ifdef TTY_DEBUG_HANGUP 897 char buf[64]; 898 899 printk(KERN_DEBUG "%s vhangup...\n", tty_name(tty, buf)); 900#endif 901 do_tty_hangup((void *) tty); 902} 903EXPORT_SYMBOL(tty_vhangup); 904 905int tty_hung_up_p(struct file * filp) 906{ 907 return (filp->f_op == &hung_up_tty_fops); 908} 909 910EXPORT_SYMBOL(tty_hung_up_p); 911 912/* 913 * This function is typically called only by the session leader, when 914 * it wants to disassociate itself from its controlling tty. 915 * 916 * It performs the following functions: 917 * (1) Sends a SIGHUP and SIGCONT to the foreground process group 918 * (2) Clears the tty from being controlling the session 919 * (3) Clears the controlling tty for all processes in the 920 * session group. 921 * 922 * The argument on_exit is set to 1 if called when a process is 923 * exiting; it is 0 if called by the ioctl TIOCNOTTY. 924 */ 925void disassociate_ctty(int on_exit) 926{ 927 struct tty_struct *tty; 928 struct task_struct *p; 929 int tty_pgrp = -1; 930 931 lock_kernel(); 932 933 down(&tty_sem); 934 tty = current->signal->tty; 935 if (tty) { 936 tty_pgrp = tty->pgrp; 937 up(&tty_sem); 938 if (on_exit && tty->driver->type != TTY_DRIVER_TYPE_PTY) 939 tty_vhangup(tty); 940 } else { 941 if (current->signal->tty_old_pgrp) { 942 kill_pg(current->signal->tty_old_pgrp, SIGHUP, on_exit); 943 kill_pg(current->signal->tty_old_pgrp, SIGCONT, on_exit); 944 } 945 up(&tty_sem); 946 unlock_kernel(); 947 return; 948 } 949 if (tty_pgrp > 0) { 950 kill_pg(tty_pgrp, SIGHUP, on_exit); 951 if (!on_exit) 952 kill_pg(tty_pgrp, SIGCONT, on_exit); 953 } 954 955 /* Must lock changes to tty_old_pgrp */ 956 down(&tty_sem); 957 current->signal->tty_old_pgrp = 0; 958 tty->session = 0; 959 tty->pgrp = -1; 960 961 /* Now clear signal->tty under the lock */ 962 read_lock(&tasklist_lock); 963 do_each_task_pid(current->signal->session, PIDTYPE_SID, p) { 964 p->signal->tty = NULL; 965 } while_each_task_pid(current->signal->session, PIDTYPE_SID, p); 966 read_unlock(&tasklist_lock); 967 up(&tty_sem); 968 unlock_kernel(); 969} 970 971void stop_tty(struct tty_struct *tty) 972{ 973 if (tty->stopped) 974 return; 975 tty->stopped = 1; 976 if (tty->link && tty->link->packet) { 977 tty->ctrl_status &= ~TIOCPKT_START; 978 tty->ctrl_status |= TIOCPKT_STOP; 979 wake_up_interruptible(&tty->link->read_wait); 980 } 981 if (tty->driver->stop) 982 (tty->driver->stop)(tty); 983} 984 985EXPORT_SYMBOL(stop_tty); 986 987void start_tty(struct tty_struct *tty) 988{ 989 if (!tty->stopped || tty->flow_stopped) 990 return; 991 tty->stopped = 0; 992 if (tty->link && tty->link->packet) { 993 tty->ctrl_status &= ~TIOCPKT_STOP; 994 tty->ctrl_status |= TIOCPKT_START; 995 wake_up_interruptible(&tty->link->read_wait); 996 } 997 if (tty->driver->start) 998 (tty->driver->start)(tty); 999 1000 /* If we have a running line discipline it may need kicking */ 1001 tty_wakeup(tty); 1002 wake_up_interruptible(&tty->write_wait); 1003} 1004 1005EXPORT_SYMBOL(start_tty); 1006 1007static ssize_t tty_read(struct file * file, char __user * buf, size_t count, 1008 loff_t *ppos) 1009{ 1010 int i; 1011 struct tty_struct * tty; 1012 struct inode *inode; 1013 struct tty_ldisc *ld; 1014 1015 tty = (struct tty_struct *)file->private_data; 1016 inode = file->f_dentry->d_inode; 1017 if (tty_paranoia_check(tty, inode, "tty_read")) 1018 return -EIO; 1019 if (!tty || (test_bit(TTY_IO_ERROR, &tty->flags))) 1020 return -EIO; 1021 1022 /* We want to wait for the line discipline to sort out in this 1023 situation */ 1024 ld = tty_ldisc_ref_wait(tty); 1025 lock_kernel(); 1026 if (ld->read) 1027 i = (ld->read)(tty,file,buf,count); 1028 else 1029 i = -EIO; 1030 tty_ldisc_deref(ld); 1031 unlock_kernel(); 1032 if (i > 0) 1033 inode->i_atime = current_fs_time(inode->i_sb); 1034 return i; 1035} 1036 1037/* 1038 * Split writes up in sane blocksizes to avoid 1039 * denial-of-service type attacks 1040 */ 1041static inline ssize_t do_tty_write( 1042 ssize_t (*write)(struct tty_struct *, struct file *, const unsigned char *, size_t), 1043 struct tty_struct *tty, 1044 struct file *file, 1045 const char __user *buf, 1046 size_t count) 1047{ 1048 ssize_t ret = 0, written = 0; 1049 unsigned int chunk; 1050 1051 if (down_interruptible(&tty->atomic_write)) { 1052 return -ERESTARTSYS; 1053 } 1054 1055 /* 1056 * We chunk up writes into a temporary buffer. This 1057 * simplifies low-level drivers immensely, since they 1058 * don't have locking issues and user mode accesses. 1059 * 1060 * But if TTY_NO_WRITE_SPLIT is set, we should use a 1061 * big chunk-size.. 1062 * 1063 * The default chunk-size is 2kB, because the NTTY 1064 * layer has problems with bigger chunks. It will 1065 * claim to be able to handle more characters than 1066 * it actually does. 1067 */ 1068 chunk = 2048; 1069 if (test_bit(TTY_NO_WRITE_SPLIT, &tty->flags)) 1070 chunk = 65536; 1071 if (count < chunk) 1072 chunk = count; 1073 1074 /* write_buf/write_cnt is protected by the atomic_write semaphore */ 1075 if (tty->write_cnt < chunk) { 1076 unsigned char *buf; 1077 1078 if (chunk < 1024) 1079 chunk = 1024; 1080 1081 buf = kmalloc(chunk, GFP_KERNEL); 1082 if (!buf) { 1083 up(&tty->atomic_write); 1084 return -ENOMEM; 1085 } 1086 kfree(tty->write_buf); 1087 tty->write_cnt = chunk; 1088 tty->write_buf = buf; 1089 } 1090 1091 /* Do the write .. */ 1092 for (;;) { 1093 size_t size = count; 1094 if (size > chunk) 1095 size = chunk; 1096 ret = -EFAULT; 1097 if (copy_from_user(tty->write_buf, buf, size)) 1098 break; 1099 lock_kernel(); 1100 ret = write(tty, file, tty->write_buf, size); 1101 unlock_kernel(); 1102 if (ret <= 0) 1103 break; 1104 written += ret; 1105 buf += ret; 1106 count -= ret; 1107 if (!count) 1108 break; 1109 ret = -ERESTARTSYS; 1110 if (signal_pending(current)) 1111 break; 1112 cond_resched(); 1113 } 1114 if (written) { 1115 struct inode *inode = file->f_dentry->d_inode; 1116 inode->i_mtime = current_fs_time(inode->i_sb); 1117 ret = written; 1118 } 1119 up(&tty->atomic_write); 1120 return ret; 1121} 1122 1123 1124static ssize_t tty_write(struct file * file, const char __user * buf, size_t count, 1125 loff_t *ppos) 1126{ 1127 struct tty_struct * tty; 1128 struct inode *inode = file->f_dentry->d_inode; 1129 ssize_t ret; 1130 struct tty_ldisc *ld; 1131 1132 tty = (struct tty_struct *)file->private_data; 1133 if (tty_paranoia_check(tty, inode, "tty_write")) 1134 return -EIO; 1135 if (!tty || !tty->driver->write || (test_bit(TTY_IO_ERROR, &tty->flags))) 1136 return -EIO; 1137 1138 ld = tty_ldisc_ref_wait(tty); 1139 if (!ld->write) 1140 ret = -EIO; 1141 else 1142 ret = do_tty_write(ld->write, tty, file, buf, count); 1143 tty_ldisc_deref(ld); 1144 return ret; 1145} 1146 1147ssize_t redirected_tty_write(struct file * file, const char __user * buf, size_t count, 1148 loff_t *ppos) 1149{ 1150 struct file *p = NULL; 1151 1152 spin_lock(&redirect_lock); 1153 if (redirect) { 1154 get_file(redirect); 1155 p = redirect; 1156 } 1157 spin_unlock(&redirect_lock); 1158 1159 if (p) { 1160 ssize_t res; 1161 res = vfs_write(p, buf, count, &p->f_pos); 1162 fput(p); 1163 return res; 1164 } 1165 1166 return tty_write(file, buf, count, ppos); 1167} 1168 1169static char ptychar[] = "pqrstuvwxyzabcde"; 1170 1171static inline void pty_line_name(struct tty_driver *driver, int index, char *p) 1172{ 1173 int i = index + driver->name_base; 1174 /* ->name is initialized to "ttyp", but "tty" is expected */ 1175 sprintf(p, "%s%c%x", 1176 driver->subtype == PTY_TYPE_SLAVE ? "tty" : driver->name, 1177 ptychar[i >> 4 & 0xf], i & 0xf); 1178} 1179 1180static inline void tty_line_name(struct tty_driver *driver, int index, char *p) 1181{ 1182 sprintf(p, "%s%d", driver->name, index + driver->name_base); 1183} 1184 1185/* 1186 * WSH 06/09/97: Rewritten to remove races and properly clean up after a 1187 * failed open. The new code protects the open with a semaphore, so it's 1188 * really quite straightforward. The semaphore locking can probably be 1189 * relaxed for the (most common) case of reopening a tty. 1190 */ 1191static int init_dev(struct tty_driver *driver, int idx, 1192 struct tty_struct **ret_tty) 1193{ 1194 struct tty_struct *tty, *o_tty; 1195 struct termios *tp, **tp_loc, *o_tp, **o_tp_loc; 1196 struct termios *ltp, **ltp_loc, *o_ltp, **o_ltp_loc; 1197 int retval=0; 1198 1199 /* check whether we're reopening an existing tty */ 1200 if (driver->flags & TTY_DRIVER_DEVPTS_MEM) { 1201 tty = devpts_get_tty(idx); 1202 if (tty && driver->subtype == PTY_TYPE_MASTER) 1203 tty = tty->link; 1204 } else { 1205 tty = driver->ttys[idx]; 1206 } 1207 if (tty) goto fast_track; 1208 1209 /* 1210 * First time open is complex, especially for PTY devices. 1211 * This code guarantees that either everything succeeds and the 1212 * TTY is ready for operation, or else the table slots are vacated 1213 * and the allocated memory released. (Except that the termios 1214 * and locked termios may be retained.) 1215 */ 1216 1217 if (!try_module_get(driver->owner)) { 1218 retval = -ENODEV; 1219 goto end_init; 1220 } 1221 1222 o_tty = NULL; 1223 tp = o_tp = NULL; 1224 ltp = o_ltp = NULL; 1225 1226 tty = alloc_tty_struct(); 1227 if(!tty) 1228 goto fail_no_mem; 1229 initialize_tty_struct(tty); 1230 tty->driver = driver; 1231 tty->index = idx; 1232 tty_line_name(driver, idx, tty->name); 1233 1234 if (driver->flags & TTY_DRIVER_DEVPTS_MEM) { 1235 tp_loc = &tty->termios; 1236 ltp_loc = &tty->termios_locked; 1237 } else { 1238 tp_loc = &driver->termios[idx]; 1239 ltp_loc = &driver->termios_locked[idx]; 1240 } 1241 1242 if (!*tp_loc) { 1243 tp = (struct termios *) kmalloc(sizeof(struct termios), 1244 GFP_KERNEL); 1245 if (!tp) 1246 goto free_mem_out; 1247 *tp = driver->init_termios; 1248 } 1249 1250 if (!*ltp_loc) { 1251 ltp = (struct termios *) kmalloc(sizeof(struct termios), 1252 GFP_KERNEL); 1253 if (!ltp) 1254 goto free_mem_out; 1255 memset(ltp, 0, sizeof(struct termios)); 1256 } 1257 1258 if (driver->type == TTY_DRIVER_TYPE_PTY) { 1259 o_tty = alloc_tty_struct(); 1260 if (!o_tty) 1261 goto free_mem_out; 1262 initialize_tty_struct(o_tty); 1263 o_tty->driver = driver->other; 1264 o_tty->index = idx; 1265 tty_line_name(driver->other, idx, o_tty->name); 1266 1267 if (driver->flags & TTY_DRIVER_DEVPTS_MEM) { 1268 o_tp_loc = &o_tty->termios; 1269 o_ltp_loc = &o_tty->termios_locked; 1270 } else { 1271 o_tp_loc = &driver->other->termios[idx]; 1272 o_ltp_loc = &driver->other->termios_locked[idx]; 1273 } 1274 1275 if (!*o_tp_loc) { 1276 o_tp = (struct termios *) 1277 kmalloc(sizeof(struct termios), GFP_KERNEL); 1278 if (!o_tp) 1279 goto free_mem_out; 1280 *o_tp = driver->other->init_termios; 1281 } 1282 1283 if (!*o_ltp_loc) { 1284 o_ltp = (struct termios *) 1285 kmalloc(sizeof(struct termios), GFP_KERNEL); 1286 if (!o_ltp) 1287 goto free_mem_out; 1288 memset(o_ltp, 0, sizeof(struct termios)); 1289 } 1290 1291 /* 1292 * Everything allocated ... set up the o_tty structure. 1293 */ 1294 if (!(driver->other->flags & TTY_DRIVER_DEVPTS_MEM)) { 1295 driver->other->ttys[idx] = o_tty; 1296 } 1297 if (!*o_tp_loc) 1298 *o_tp_loc = o_tp; 1299 if (!*o_ltp_loc) 1300 *o_ltp_loc = o_ltp; 1301 o_tty->termios = *o_tp_loc; 1302 o_tty->termios_locked = *o_ltp_loc; 1303 driver->other->refcount++; 1304 if (driver->subtype == PTY_TYPE_MASTER) 1305 o_tty->count++; 1306 1307 /* Establish the links in both directions */ 1308 tty->link = o_tty; 1309 o_tty->link = tty; 1310 } 1311 1312 /* 1313 * All structures have been allocated, so now we install them. 1314 * Failures after this point use release_mem to clean up, so 1315 * there's no need to null out the local pointers. 1316 */ 1317 if (!(driver->flags & TTY_DRIVER_DEVPTS_MEM)) { 1318 driver->ttys[idx] = tty; 1319 } 1320 1321 if (!*tp_loc) 1322 *tp_loc = tp; 1323 if (!*ltp_loc) 1324 *ltp_loc = ltp; 1325 tty->termios = *tp_loc; 1326 tty->termios_locked = *ltp_loc; 1327 driver->refcount++; 1328 tty->count++; 1329 1330 /* 1331 * Structures all installed ... call the ldisc open routines. 1332 * If we fail here just call release_mem to clean up. No need 1333 * to decrement the use counts, as release_mem doesn't care. 1334 */ 1335 1336 if (tty->ldisc.open) { 1337 retval = (tty->ldisc.open)(tty); 1338 if (retval) 1339 goto release_mem_out; 1340 } 1341 if (o_tty && o_tty->ldisc.open) { 1342 retval = (o_tty->ldisc.open)(o_tty); 1343 if (retval) { 1344 if (tty->ldisc.close) 1345 (tty->ldisc.close)(tty); 1346 goto release_mem_out; 1347 } 1348 tty_ldisc_enable(o_tty); 1349 } 1350 tty_ldisc_enable(tty); 1351 goto success; 1352 1353 /* 1354 * This fast open can be used if the tty is already open. 1355 * No memory is allocated, and the only failures are from 1356 * attempting to open a closing tty or attempting multiple 1357 * opens on a pty master. 1358 */ 1359fast_track: 1360 if (test_bit(TTY_CLOSING, &tty->flags)) { 1361 retval = -EIO; 1362 goto end_init; 1363 } 1364 if (driver->type == TTY_DRIVER_TYPE_PTY && 1365 driver->subtype == PTY_TYPE_MASTER) { 1366 /* 1367 * special case for PTY masters: only one open permitted, 1368 * and the slave side open count is incremented as well. 1369 */ 1370 if (tty->count) { 1371 retval = -EIO; 1372 goto end_init; 1373 } 1374 tty->link->count++; 1375 } 1376 tty->count++; 1377 tty->driver = driver; /* N.B. why do this every time?? */ 1378 1379 /* FIXME */ 1380 if(!test_bit(TTY_LDISC, &tty->flags)) 1381 printk(KERN_ERR "init_dev but no ldisc\n"); 1382success: 1383 *ret_tty = tty; 1384 1385 /* All paths come through here to release the semaphore */ 1386end_init: 1387 return retval; 1388 1389 /* Release locally allocated memory ... nothing placed in slots */ 1390free_mem_out: 1391 if (o_tp) 1392 kfree(o_tp); 1393 if (o_tty) 1394 free_tty_struct(o_tty); 1395 if (ltp) 1396 kfree(ltp); 1397 if (tp) 1398 kfree(tp); 1399 free_tty_struct(tty); 1400 1401fail_no_mem: 1402 module_put(driver->owner); 1403 retval = -ENOMEM; 1404 goto end_init; 1405 1406 /* call the tty release_mem routine to clean out this slot */ 1407release_mem_out: 1408 printk(KERN_INFO "init_dev: ldisc open failed, " 1409 "clearing slot %d\n", idx); 1410 release_mem(tty, idx); 1411 goto end_init; 1412} 1413 1414/* 1415 * Releases memory associated with a tty structure, and clears out the 1416 * driver table slots. 1417 */ 1418static void release_mem(struct tty_struct *tty, int idx) 1419{ 1420 struct tty_struct *o_tty; 1421 struct termios *tp; 1422 int devpts = tty->driver->flags & TTY_DRIVER_DEVPTS_MEM; 1423 1424 if ((o_tty = tty->link) != NULL) { 1425 if (!devpts) 1426 o_tty->driver->ttys[idx] = NULL; 1427 if (o_tty->driver->flags & TTY_DRIVER_RESET_TERMIOS) { 1428 tp = o_tty->termios; 1429 if (!devpts) 1430 o_tty->driver->termios[idx] = NULL; 1431 kfree(tp); 1432 1433 tp = o_tty->termios_locked; 1434 if (!devpts) 1435 o_tty->driver->termios_locked[idx] = NULL; 1436 kfree(tp); 1437 } 1438 o_tty->magic = 0; 1439 o_tty->driver->refcount--; 1440 file_list_lock(); 1441 list_del_init(&o_tty->tty_files); 1442 file_list_unlock(); 1443 free_tty_struct(o_tty); 1444 } 1445 1446 if (!devpts) 1447 tty->driver->ttys[idx] = NULL; 1448 if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS) { 1449 tp = tty->termios; 1450 if (!devpts) 1451 tty->driver->termios[idx] = NULL; 1452 kfree(tp); 1453 1454 tp = tty->termios_locked; 1455 if (!devpts) 1456 tty->driver->termios_locked[idx] = NULL; 1457 kfree(tp); 1458 } 1459 1460 tty->magic = 0; 1461 tty->driver->refcount--; 1462 file_list_lock(); 1463 list_del_init(&tty->tty_files); 1464 file_list_unlock(); 1465 module_put(tty->driver->owner); 1466 free_tty_struct(tty); 1467} 1468 1469/* 1470 * Even releasing the tty structures is a tricky business.. We have 1471 * to be very careful that the structures are all released at the 1472 * same time, as interrupts might otherwise get the wrong pointers. 1473 * 1474 * WSH 09/09/97: rewritten to avoid some nasty race conditions that could 1475 * lead to double frees or releasing memory still in use. 1476 */ 1477static void release_dev(struct file * filp) 1478{ 1479 struct tty_struct *tty, *o_tty; 1480 int pty_master, tty_closing, o_tty_closing, do_sleep; 1481 int devpts_master, devpts; 1482 int idx; 1483 char buf[64]; 1484 unsigned long flags; 1485 1486 tty = (struct tty_struct *)filp->private_data; 1487 if (tty_paranoia_check(tty, filp->f_dentry->d_inode, "release_dev")) 1488 return; 1489 1490 check_tty_count(tty, "release_dev"); 1491 1492 tty_fasync(-1, filp, 0); 1493 1494 idx = tty->index; 1495 pty_master = (tty->driver->type == TTY_DRIVER_TYPE_PTY && 1496 tty->driver->subtype == PTY_TYPE_MASTER); 1497 devpts = (tty->driver->flags & TTY_DRIVER_DEVPTS_MEM) != 0; 1498 devpts_master = pty_master && devpts; 1499 o_tty = tty->link; 1500 1501#ifdef TTY_PARANOIA_CHECK 1502 if (idx < 0 || idx >= tty->driver->num) { 1503 printk(KERN_DEBUG "release_dev: bad idx when trying to " 1504 "free (%s)\n", tty->name); 1505 return; 1506 } 1507 if (!(tty->driver->flags & TTY_DRIVER_DEVPTS_MEM)) { 1508 if (tty != tty->driver->ttys[idx]) { 1509 printk(KERN_DEBUG "release_dev: driver.table[%d] not tty " 1510 "for (%s)\n", idx, tty->name); 1511 return; 1512 } 1513 if (tty->termios != tty->driver->termios[idx]) { 1514 printk(KERN_DEBUG "release_dev: driver.termios[%d] not termios " 1515 "for (%s)\n", 1516 idx, tty->name); 1517 return; 1518 } 1519 if (tty->termios_locked != tty->driver->termios_locked[idx]) { 1520 printk(KERN_DEBUG "release_dev: driver.termios_locked[%d] not " 1521 "termios_locked for (%s)\n", 1522 idx, tty->name); 1523 return; 1524 } 1525 } 1526#endif 1527 1528#ifdef TTY_DEBUG_HANGUP 1529 printk(KERN_DEBUG "release_dev of %s (tty count=%d)...", 1530 tty_name(tty, buf), tty->count); 1531#endif 1532 1533#ifdef TTY_PARANOIA_CHECK 1534 if (tty->driver->other && 1535 !(tty->driver->flags & TTY_DRIVER_DEVPTS_MEM)) { 1536 if (o_tty != tty->driver->other->ttys[idx]) { 1537 printk(KERN_DEBUG "release_dev: other->table[%d] " 1538 "not o_tty for (%s)\n", 1539 idx, tty->name); 1540 return; 1541 } 1542 if (o_tty->termios != tty->driver->other->termios[idx]) { 1543 printk(KERN_DEBUG "release_dev: other->termios[%d] " 1544 "not o_termios for (%s)\n", 1545 idx, tty->name); 1546 return; 1547 } 1548 if (o_tty->termios_locked != 1549 tty->driver->other->termios_locked[idx]) { 1550 printk(KERN_DEBUG "release_dev: other->termios_locked[" 1551 "%d] not o_termios_locked for (%s)\n", 1552 idx, tty->name); 1553 return; 1554 } 1555 if (o_tty->link != tty) { 1556 printk(KERN_DEBUG "release_dev: bad pty pointers\n"); 1557 return; 1558 } 1559 } 1560#endif 1561 if (tty->driver->close) 1562 tty->driver->close(tty, filp); 1563 1564 /* 1565 * Sanity check: if tty->count is going to zero, there shouldn't be 1566 * any waiters on tty->read_wait or tty->write_wait. We test the 1567 * wait queues and kick everyone out _before_ actually starting to 1568 * close. This ensures that we won't block while releasing the tty 1569 * structure. 1570 * 1571 * The test for the o_tty closing is necessary, since the master and 1572 * slave sides may close in any order. If the slave side closes out 1573 * first, its count will be one, since the master side holds an open. 1574 * Thus this test wouldn't be triggered at the time the slave closes, 1575 * so we do it now. 1576 * 1577 * Note that it's possible for the tty to be opened again while we're 1578 * flushing out waiters. By recalculating the closing flags before 1579 * each iteration we avoid any problems. 1580 */ 1581 while (1) { 1582 /* Guard against races with tty->count changes elsewhere and 1583 opens on /dev/tty */ 1584 1585 down(&tty_sem); 1586 tty_closing = tty->count <= 1; 1587 o_tty_closing = o_tty && 1588 (o_tty->count <= (pty_master ? 1 : 0)); 1589 up(&tty_sem); 1590 do_sleep = 0; 1591 1592 if (tty_closing) { 1593 if (waitqueue_active(&tty->read_wait)) { 1594 wake_up(&tty->read_wait); 1595 do_sleep++; 1596 } 1597 if (waitqueue_active(&tty->write_wait)) { 1598 wake_up(&tty->write_wait); 1599 do_sleep++; 1600 } 1601 } 1602 if (o_tty_closing) { 1603 if (waitqueue_active(&o_tty->read_wait)) { 1604 wake_up(&o_tty->read_wait); 1605 do_sleep++; 1606 } 1607 if (waitqueue_active(&o_tty->write_wait)) { 1608 wake_up(&o_tty->write_wait); 1609 do_sleep++; 1610 } 1611 } 1612 if (!do_sleep) 1613 break; 1614 1615 printk(KERN_WARNING "release_dev: %s: read/write wait queue " 1616 "active!\n", tty_name(tty, buf)); 1617 schedule(); 1618 } 1619 1620 /* 1621 * The closing flags are now consistent with the open counts on 1622 * both sides, and we've completed the last operation that could 1623 * block, so it's safe to proceed with closing. 1624 */ 1625 1626 down(&tty_sem); 1627 if (pty_master) { 1628 if (--o_tty->count < 0) { 1629 printk(KERN_WARNING "release_dev: bad pty slave count " 1630 "(%d) for %s\n", 1631 o_tty->count, tty_name(o_tty, buf)); 1632 o_tty->count = 0; 1633 } 1634 } 1635 if (--tty->count < 0) { 1636 printk(KERN_WARNING "release_dev: bad tty->count (%d) for %s\n", 1637 tty->count, tty_name(tty, buf)); 1638 tty->count = 0; 1639 } 1640 up(&tty_sem); 1641 1642 /* 1643 * We've decremented tty->count, so we need to remove this file 1644 * descriptor off the tty->tty_files list; this serves two 1645 * purposes: 1646 * - check_tty_count sees the correct number of file descriptors 1647 * associated with this tty. 1648 * - do_tty_hangup no longer sees this file descriptor as 1649 * something that needs to be handled for hangups. 1650 */ 1651 file_kill(filp); 1652 filp->private_data = NULL; 1653 1654 /* 1655 * Perform some housekeeping before deciding whether to return. 1656 * 1657 * Set the TTY_CLOSING flag if this was the last open. In the 1658 * case of a pty we may have to wait around for the other side 1659 * to close, and TTY_CLOSING makes sure we can't be reopened. 1660 */ 1661 if(tty_closing) 1662 set_bit(TTY_CLOSING, &tty->flags); 1663 if(o_tty_closing) 1664 set_bit(TTY_CLOSING, &o_tty->flags); 1665 1666 /* 1667 * If _either_ side is closing, make sure there aren't any 1668 * processes that still think tty or o_tty is their controlling 1669 * tty. 1670 */ 1671 if (tty_closing || o_tty_closing) { 1672 struct task_struct *p; 1673 1674 read_lock(&tasklist_lock); 1675 do_each_task_pid(tty->session, PIDTYPE_SID, p) { 1676 p->signal->tty = NULL; 1677 } while_each_task_pid(tty->session, PIDTYPE_SID, p); 1678 if (o_tty) 1679 do_each_task_pid(o_tty->session, PIDTYPE_SID, p) { 1680 p->signal->tty = NULL; 1681 } while_each_task_pid(o_tty->session, PIDTYPE_SID, p); 1682 read_unlock(&tasklist_lock); 1683 } 1684 1685 /* check whether both sides are closing ... */ 1686 if (!tty_closing || (o_tty && !o_tty_closing)) 1687 return; 1688 1689#ifdef TTY_DEBUG_HANGUP 1690 printk(KERN_DEBUG "freeing tty structure..."); 1691#endif 1692 /* 1693 * Prevent flush_to_ldisc() from rescheduling the work for later. Then 1694 * kill any delayed work. As this is the final close it does not 1695 * race with the set_ldisc code path. 1696 */ 1697 clear_bit(TTY_LDISC, &tty->flags); 1698 clear_bit(TTY_DONT_FLIP, &tty->flags); 1699 cancel_delayed_work(&tty->flip.work); 1700 1701 /* 1702 * Wait for ->hangup_work and ->flip.work handlers to terminate 1703 */ 1704 1705 flush_scheduled_work(); 1706 1707 /* 1708 * Wait for any short term users (we know they are just driver 1709 * side waiters as the file is closing so user count on the file 1710 * side is zero. 1711 */ 1712 spin_lock_irqsave(&tty_ldisc_lock, flags); 1713 while(tty->ldisc.refcount) 1714 { 1715 spin_unlock_irqrestore(&tty_ldisc_lock, flags); 1716 wait_event(tty_ldisc_wait, tty->ldisc.refcount == 0); 1717 spin_lock_irqsave(&tty_ldisc_lock, flags); 1718 } 1719 spin_unlock_irqrestore(&tty_ldisc_lock, flags); 1720 /* 1721 * Shutdown the current line discipline, and reset it to N_TTY. 1722 * N.B. why reset ldisc when we're releasing the memory?? 1723 * 1724 * FIXME: this MUST get fixed for the new reflocking 1725 */ 1726 if (tty->ldisc.close) 1727 (tty->ldisc.close)(tty); 1728 tty_ldisc_put(tty->ldisc.num); 1729 1730 /* 1731 * Switch the line discipline back 1732 */ 1733 tty_ldisc_assign(tty, tty_ldisc_get(N_TTY)); 1734 tty_set_termios_ldisc(tty,N_TTY); 1735 if (o_tty) { 1736 /* FIXME: could o_tty be in setldisc here ? */ 1737 clear_bit(TTY_LDISC, &o_tty->flags); 1738 if (o_tty->ldisc.close) 1739 (o_tty->ldisc.close)(o_tty); 1740 tty_ldisc_put(o_tty->ldisc.num); 1741 tty_ldisc_assign(o_tty, tty_ldisc_get(N_TTY)); 1742 tty_set_termios_ldisc(o_tty,N_TTY); 1743 } 1744 /* 1745 * The release_mem function takes care of the details of clearing 1746 * the slots and preserving the termios structure. 1747 */ 1748 release_mem(tty, idx); 1749 1750#ifdef CONFIG_UNIX98_PTYS 1751 /* Make this pty number available for reallocation */ 1752 if (devpts) { 1753 down(&allocated_ptys_lock); 1754 idr_remove(&allocated_ptys, idx); 1755 up(&allocated_ptys_lock); 1756 } 1757#endif 1758 1759} 1760 1761/* 1762 * tty_open and tty_release keep up the tty count that contains the 1763 * number of opens done on a tty. We cannot use the inode-count, as 1764 * different inodes might point to the same tty. 1765 * 1766 * Open-counting is needed for pty masters, as well as for keeping 1767 * track of serial lines: DTR is dropped when the last close happens. 1768 * (This is not done solely through tty->count, now. - Ted 1/27/92) 1769 * 1770 * The termios state of a pty is reset on first open so that 1771 * settings don't persist across reuse. 1772 */ 1773static int tty_open(struct inode * inode, struct file * filp) 1774{ 1775 struct tty_struct *tty; 1776 int noctty, retval; 1777 struct tty_driver *driver; 1778 int index; 1779 dev_t device = inode->i_rdev; 1780 unsigned short saved_flags = filp->f_flags; 1781 1782 nonseekable_open(inode, filp); 1783 1784retry_open: 1785 noctty = filp->f_flags & O_NOCTTY; 1786 index = -1; 1787 retval = 0; 1788 1789 down(&tty_sem); 1790 1791 if (device == MKDEV(TTYAUX_MAJOR,0)) { 1792 if (!current->signal->tty) { 1793 up(&tty_sem); 1794 return -ENXIO; 1795 } 1796 driver = current->signal->tty->driver; 1797 index = current->signal->tty->index; 1798 filp->f_flags |= O_NONBLOCK; /* Don't let /dev/tty block */ 1799 /* noctty = 1; */ 1800 goto got_driver; 1801 } 1802#ifdef CONFIG_VT 1803 if (device == MKDEV(TTY_MAJOR,0)) { 1804 extern struct tty_driver *console_driver; 1805 driver = console_driver; 1806 index = fg_console; 1807 noctty = 1; 1808 goto got_driver; 1809 } 1810#endif 1811 if (device == MKDEV(TTYAUX_MAJOR,1)) { 1812 driver = console_device(&index); 1813 if (driver) { 1814 /* Don't let /dev/console block */ 1815 filp->f_flags |= O_NONBLOCK; 1816 noctty = 1; 1817 goto got_driver; 1818 } 1819 up(&tty_sem); 1820 return -ENODEV; 1821 } 1822 1823 driver = get_tty_driver(device, &index); 1824 if (!driver) { 1825 up(&tty_sem); 1826 return -ENODEV; 1827 } 1828got_driver: 1829 retval = init_dev(driver, index, &tty); 1830 up(&tty_sem); 1831 if (retval) 1832 return retval; 1833 1834 filp->private_data = tty; 1835 file_move(filp, &tty->tty_files); 1836 check_tty_count(tty, "tty_open"); 1837 if (tty->driver->type == TTY_DRIVER_TYPE_PTY && 1838 tty->driver->subtype == PTY_TYPE_MASTER) 1839 noctty = 1; 1840#ifdef TTY_DEBUG_HANGUP 1841 printk(KERN_DEBUG "opening %s...", tty->name); 1842#endif 1843 if (!retval) { 1844 if (tty->driver->open) 1845 retval = tty->driver->open(tty, filp); 1846 else 1847 retval = -ENODEV; 1848 } 1849 filp->f_flags = saved_flags; 1850 1851 if (!retval && test_bit(TTY_EXCLUSIVE, &tty->flags) && !capable(CAP_SYS_ADMIN)) 1852 retval = -EBUSY; 1853 1854 if (retval) { 1855#ifdef TTY_DEBUG_HANGUP 1856 printk(KERN_DEBUG "error %d in opening %s...", retval, 1857 tty->name); 1858#endif 1859 release_dev(filp); 1860 if (retval != -ERESTARTSYS) 1861 return retval; 1862 if (signal_pending(current)) 1863 return retval; 1864 schedule(); 1865 /* 1866 * Need to reset f_op in case a hangup happened. 1867 */ 1868 if (filp->f_op == &hung_up_tty_fops) 1869 filp->f_op = &tty_fops; 1870 goto retry_open; 1871 } 1872 if (!noctty && 1873 current->signal->leader && 1874 !current->signal->tty && 1875 tty->session == 0) { 1876 task_lock(current); 1877 current->signal->tty = tty; 1878 task_unlock(current); 1879 current->signal->tty_old_pgrp = 0; 1880 tty->session = current->signal->session; 1881 tty->pgrp = process_group(current); 1882 } 1883 return 0; 1884} 1885 1886#ifdef CONFIG_UNIX98_PTYS 1887static int ptmx_open(struct inode * inode, struct file * filp) 1888{ 1889 struct tty_struct *tty; 1890 int retval; 1891 int index; 1892 int idr_ret; 1893 1894 nonseekable_open(inode, filp); 1895 1896 /* find a device that is not in use. */ 1897 down(&allocated_ptys_lock); 1898 if (!idr_pre_get(&allocated_ptys, GFP_KERNEL)) { 1899 up(&allocated_ptys_lock); 1900 return -ENOMEM; 1901 } 1902 idr_ret = idr_get_new(&allocated_ptys, NULL, &index); 1903 if (idr_ret < 0) { 1904 up(&allocated_ptys_lock); 1905 if (idr_ret == -EAGAIN) 1906 return -ENOMEM; 1907 return -EIO; 1908 } 1909 if (index >= pty_limit) { 1910 idr_remove(&allocated_ptys, index); 1911 up(&allocated_ptys_lock); 1912 return -EIO; 1913 } 1914 up(&allocated_ptys_lock); 1915 1916 down(&tty_sem); 1917 retval = init_dev(ptm_driver, index, &tty); 1918 up(&tty_sem); 1919 1920 if (retval) 1921 goto out; 1922 1923 set_bit(TTY_PTY_LOCK, &tty->flags); /* LOCK THE SLAVE */ 1924 filp->private_data = tty; 1925 file_move(filp, &tty->tty_files); 1926 1927 retval = -ENOMEM; 1928 if (devpts_pty_new(tty->link)) 1929 goto out1; 1930 1931 check_tty_count(tty, "tty_open"); 1932 retval = ptm_driver->open(tty, filp); 1933 if (!retval) 1934 return 0; 1935out1: 1936 release_dev(filp); 1937out: 1938 down(&allocated_ptys_lock); 1939 idr_remove(&allocated_ptys, index); 1940 up(&allocated_ptys_lock); 1941 return retval; 1942} 1943#endif 1944 1945static int tty_release(struct inode * inode, struct file * filp) 1946{ 1947 lock_kernel(); 1948 release_dev(filp); 1949 unlock_kernel(); 1950 return 0; 1951} 1952 1953/* No kernel lock held - fine */ 1954static unsigned int tty_poll(struct file * filp, poll_table * wait) 1955{ 1956 struct tty_struct * tty; 1957 struct tty_ldisc *ld; 1958 int ret = 0; 1959 1960 tty = (struct tty_struct *)filp->private_data; 1961 if (tty_paranoia_check(tty, filp->f_dentry->d_inode, "tty_poll")) 1962 return 0; 1963 1964 ld = tty_ldisc_ref_wait(tty); 1965 if (ld->poll) 1966 ret = (ld->poll)(tty, filp, wait); 1967 tty_ldisc_deref(ld); 1968 return ret; 1969} 1970 1971static int tty_fasync(int fd, struct file * filp, int on) 1972{ 1973 struct tty_struct * tty; 1974 int retval; 1975 1976 tty = (struct tty_struct *)filp->private_data; 1977 if (tty_paranoia_check(tty, filp->f_dentry->d_inode, "tty_fasync")) 1978 return 0; 1979 1980 retval = fasync_helper(fd, filp, on, &tty->fasync); 1981 if (retval <= 0) 1982 return retval; 1983 1984 if (on) { 1985 if (!waitqueue_active(&tty->read_wait)) 1986 tty->minimum_to_wake = 1; 1987 retval = f_setown(filp, (-tty->pgrp) ? : current->pid, 0); 1988 if (retval) 1989 return retval; 1990 } else { 1991 if (!tty->fasync && !waitqueue_active(&tty->read_wait)) 1992 tty->minimum_to_wake = N_TTY_BUF_SIZE; 1993 } 1994 return 0; 1995} 1996 1997static int tiocsti(struct tty_struct *tty, char __user *p) 1998{ 1999 char ch, mbz = 0; 2000 struct tty_ldisc *ld; 2001 2002 if ((current->signal->tty != tty) && !capable(CAP_SYS_ADMIN)) 2003 return -EPERM; 2004 if (get_user(ch, p)) 2005 return -EFAULT; 2006 ld = tty_ldisc_ref_wait(tty); 2007 ld->receive_buf(tty, &ch, &mbz, 1); 2008 tty_ldisc_deref(ld); 2009 return 0; 2010} 2011 2012static int tiocgwinsz(struct tty_struct *tty, struct winsize __user * arg) 2013{ 2014 if (copy_to_user(arg, &tty->winsize, sizeof(*arg))) 2015 return -EFAULT; 2016 return 0; 2017} 2018 2019static int tiocswinsz(struct tty_struct *tty, struct tty_struct *real_tty, 2020 struct winsize __user * arg) 2021{ 2022 struct winsize tmp_ws; 2023 2024 if (copy_from_user(&tmp_ws, arg, sizeof(*arg))) 2025 return -EFAULT; 2026 if (!memcmp(&tmp_ws, &tty->winsize, sizeof(*arg))) 2027 return 0; 2028#ifdef CONFIG_VT 2029 if (tty->driver->type == TTY_DRIVER_TYPE_CONSOLE) { 2030 int rc; 2031 2032 acquire_console_sem(); 2033 rc = vc_resize(tty->driver_data, tmp_ws.ws_col, tmp_ws.ws_row); 2034 release_console_sem(); 2035 if (rc) 2036 return -ENXIO; 2037 } 2038#endif 2039 if (tty->pgrp > 0) 2040 kill_pg(tty->pgrp, SIGWINCH, 1); 2041 if ((real_tty->pgrp != tty->pgrp) && (real_tty->pgrp > 0)) 2042 kill_pg(real_tty->pgrp, SIGWINCH, 1); 2043 tty->winsize = tmp_ws; 2044 real_tty->winsize = tmp_ws; 2045 return 0; 2046} 2047 2048static int tioccons(struct file *file) 2049{ 2050 if (!capable(CAP_SYS_ADMIN)) 2051 return -EPERM; 2052 if (file->f_op->write == redirected_tty_write) { 2053 struct file *f; 2054 spin_lock(&redirect_lock); 2055 f = redirect; 2056 redirect = NULL; 2057 spin_unlock(&redirect_lock); 2058 if (f) 2059 fput(f); 2060 return 0; 2061 } 2062 spin_lock(&redirect_lock); 2063 if (redirect) { 2064 spin_unlock(&redirect_lock); 2065 return -EBUSY; 2066 } 2067 get_file(file); 2068 redirect = file; 2069 spin_unlock(&redirect_lock); 2070 return 0; 2071} 2072 2073 2074static int fionbio(struct file *file, int __user *p) 2075{ 2076 int nonblock; 2077 2078 if (get_user(nonblock, p)) 2079 return -EFAULT; 2080 2081 if (nonblock) 2082 file->f_flags |= O_NONBLOCK; 2083 else 2084 file->f_flags &= ~O_NONBLOCK; 2085 return 0; 2086} 2087 2088static int tiocsctty(struct tty_struct *tty, int arg) 2089{ 2090 task_t *p; 2091 2092 if (current->signal->leader && 2093 (current->signal->session == tty->session)) 2094 return 0; 2095 /* 2096 * The process must be a session leader and 2097 * not have a controlling tty already. 2098 */ 2099 if (!current->signal->leader || current->signal->tty) 2100 return -EPERM; 2101 if (tty->session > 0) { 2102 /* 2103 * This tty is already the controlling 2104 * tty for another session group! 2105 */ 2106 if ((arg == 1) && capable(CAP_SYS_ADMIN)) { 2107 /* 2108 * Steal it away 2109 */ 2110 2111 read_lock(&tasklist_lock); 2112 do_each_task_pid(tty->session, PIDTYPE_SID, p) { 2113 p->signal->tty = NULL; 2114 } while_each_task_pid(tty->session, PIDTYPE_SID, p); 2115 read_unlock(&tasklist_lock); 2116 } else 2117 return -EPERM; 2118 } 2119 task_lock(current); 2120 current->signal->tty = tty; 2121 task_unlock(current); 2122 current->signal->tty_old_pgrp = 0; 2123 tty->session = current->signal->session; 2124 tty->pgrp = process_group(current); 2125 return 0; 2126} 2127 2128static int tiocgpgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t __user *p) 2129{ 2130 /* 2131 * (tty == real_tty) is a cheap way of 2132 * testing if the tty is NOT a master pty. 2133 */ 2134 if (tty == real_tty && current->signal->tty != real_tty) 2135 return -ENOTTY; 2136 return put_user(real_tty->pgrp, p); 2137} 2138 2139static int tiocspgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t __user *p) 2140{ 2141 pid_t pgrp; 2142 int retval = tty_check_change(real_tty); 2143 2144 if (retval == -EIO) 2145 return -ENOTTY; 2146 if (retval) 2147 return retval; 2148 if (!current->signal->tty || 2149 (current->signal->tty != real_tty) || 2150 (real_tty->session != current->signal->session)) 2151 return -ENOTTY; 2152 if (get_user(pgrp, p)) 2153 return -EFAULT; 2154 if (pgrp < 0) 2155 return -EINVAL; 2156 if (session_of_pgrp(pgrp) != current->signal->session) 2157 return -EPERM; 2158 real_tty->pgrp = pgrp; 2159 return 0; 2160} 2161 2162static int tiocgsid(struct tty_struct *tty, struct tty_struct *real_tty, pid_t __user *p) 2163{ 2164 /* 2165 * (tty == real_tty) is a cheap way of 2166 * testing if the tty is NOT a master pty. 2167 */ 2168 if (tty == real_tty && current->signal->tty != real_tty) 2169 return -ENOTTY; 2170 if (real_tty->session <= 0) 2171 return -ENOTTY; 2172 return put_user(real_tty->session, p); 2173} 2174 2175static int tiocsetd(struct tty_struct *tty, int __user *p) 2176{ 2177 int ldisc; 2178 2179 if (get_user(ldisc, p)) 2180 return -EFAULT; 2181 return tty_set_ldisc(tty, ldisc); 2182} 2183 2184static int send_break(struct tty_struct *tty, unsigned int duration) 2185{ 2186 tty->driver->break_ctl(tty, -1); 2187 if (!signal_pending(current)) { 2188 msleep_interruptible(duration); 2189 } 2190 tty->driver->break_ctl(tty, 0); 2191 if (signal_pending(current)) 2192 return -EINTR; 2193 return 0; 2194} 2195 2196static int 2197tty_tiocmget(struct tty_struct *tty, struct file *file, int __user *p) 2198{ 2199 int retval = -EINVAL; 2200 2201 if (tty->driver->tiocmget) { 2202 retval = tty->driver->tiocmget(tty, file); 2203 2204 if (retval >= 0) 2205 retval = put_user(retval, p); 2206 } 2207 return retval; 2208} 2209 2210static int 2211tty_tiocmset(struct tty_struct *tty, struct file *file, unsigned int cmd, 2212 unsigned __user *p) 2213{ 2214 int retval = -EINVAL; 2215 2216 if (tty->driver->tiocmset) { 2217 unsigned int set, clear, val; 2218 2219 retval = get_user(val, p); 2220 if (retval) 2221 return retval; 2222 2223 set = clear = 0; 2224 switch (cmd) { 2225 case TIOCMBIS: 2226 set = val; 2227 break; 2228 case TIOCMBIC: 2229 clear = val; 2230 break; 2231 case TIOCMSET: 2232 set = val; 2233 clear = ~val; 2234 break; 2235 } 2236 2237 set &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP; 2238 clear &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP; 2239 2240 retval = tty->driver->tiocmset(tty, file, set, clear); 2241 } 2242 return retval; 2243} 2244 2245/* 2246 * Split this up, as gcc can choke on it otherwise.. 2247 */ 2248int tty_ioctl(struct inode * inode, struct file * file, 2249 unsigned int cmd, unsigned long arg) 2250{ 2251 struct tty_struct *tty, *real_tty; 2252 void __user *p = (void __user *)arg; 2253 int retval; 2254 struct tty_ldisc *ld; 2255 2256 tty = (struct tty_struct *)file->private_data; 2257 if (tty_paranoia_check(tty, inode, "tty_ioctl")) 2258 return -EINVAL; 2259 2260 real_tty = tty; 2261 if (tty->driver->type == TTY_DRIVER_TYPE_PTY && 2262 tty->driver->subtype == PTY_TYPE_MASTER) 2263 real_tty = tty->link; 2264 2265 /* 2266 * Break handling by driver 2267 */ 2268 if (!tty->driver->break_ctl) { 2269 switch(cmd) { 2270 case TIOCSBRK: 2271 case TIOCCBRK: 2272 if (tty->driver->ioctl) 2273 return tty->driver->ioctl(tty, file, cmd, arg); 2274 return -EINVAL; 2275 2276 /* These two ioctl's always return success; even if */ 2277 /* the driver doesn't support them. */ 2278 case TCSBRK: 2279 case TCSBRKP: 2280 if (!tty->driver->ioctl) 2281 return 0; 2282 retval = tty->driver->ioctl(tty, file, cmd, arg); 2283 if (retval == -ENOIOCTLCMD) 2284 retval = 0; 2285 return retval; 2286 } 2287 } 2288 2289 /* 2290 * Factor out some common prep work 2291 */ 2292 switch (cmd) { 2293 case TIOCSETD: 2294 case TIOCSBRK: 2295 case TIOCCBRK: 2296 case TCSBRK: 2297 case TCSBRKP: 2298 retval = tty_check_change(tty); 2299 if (retval) 2300 return retval; 2301 if (cmd != TIOCCBRK) { 2302 tty_wait_until_sent(tty, 0); 2303 if (signal_pending(current)) 2304 return -EINTR; 2305 } 2306 break; 2307 } 2308 2309 switch (cmd) { 2310 case TIOCSTI: 2311 return tiocsti(tty, p); 2312 case TIOCGWINSZ: 2313 return tiocgwinsz(tty, p); 2314 case TIOCSWINSZ: 2315 return tiocswinsz(tty, real_tty, p); 2316 case TIOCCONS: 2317 return real_tty!=tty ? -EINVAL : tioccons(file); 2318 case FIONBIO: 2319 return fionbio(file, p); 2320 case TIOCEXCL: 2321 set_bit(TTY_EXCLUSIVE, &tty->flags); 2322 return 0; 2323 case TIOCNXCL: 2324 clear_bit(TTY_EXCLUSIVE, &tty->flags); 2325 return 0; 2326 case TIOCNOTTY: 2327 if (current->signal->tty != tty) 2328 return -ENOTTY; 2329 if (current->signal->leader) 2330 disassociate_ctty(0); 2331 task_lock(current); 2332 current->signal->tty = NULL; 2333 task_unlock(current); 2334 return 0; 2335 case TIOCSCTTY: 2336 return tiocsctty(tty, arg); 2337 case TIOCGPGRP: 2338 return tiocgpgrp(tty, real_tty, p); 2339 case TIOCSPGRP: 2340 return tiocspgrp(tty, real_tty, p); 2341 case TIOCGSID: 2342 return tiocgsid(tty, real_tty, p); 2343 case TIOCGETD: 2344 /* FIXME: check this is ok */ 2345 return put_user(tty->ldisc.num, (int __user *)p); 2346 case TIOCSETD: 2347 return tiocsetd(tty, p); 2348#ifdef CONFIG_VT 2349 case TIOCLINUX: 2350 return tioclinux(tty, arg); 2351#endif 2352 /* 2353 * Break handling 2354 */ 2355 case TIOCSBRK: /* Turn break on, unconditionally */ 2356 tty->driver->break_ctl(tty, -1); 2357 return 0; 2358 2359 case TIOCCBRK: /* Turn break off, unconditionally */ 2360 tty->driver->break_ctl(tty, 0); 2361 return 0; 2362 case TCSBRK: /* SVID version: non-zero arg --> no break */ 2363 /* 2364 * XXX is the above comment correct, or the 2365 * code below correct? Is this ioctl used at 2366 * all by anyone? 2367 */ 2368 if (!arg) 2369 return send_break(tty, 250); 2370 return 0; 2371 case TCSBRKP: /* support for POSIX tcsendbreak() */ 2372 return send_break(tty, arg ? arg*100 : 250); 2373 2374 case TIOCMGET: 2375 return tty_tiocmget(tty, file, p); 2376 2377 case TIOCMSET: 2378 case TIOCMBIC: 2379 case TIOCMBIS: 2380 return tty_tiocmset(tty, file, cmd, p); 2381 } 2382 if (tty->driver->ioctl) { 2383 retval = (tty->driver->ioctl)(tty, file, cmd, arg); 2384 if (retval != -ENOIOCTLCMD) 2385 return retval; 2386 } 2387 ld = tty_ldisc_ref_wait(tty); 2388 retval = -EINVAL; 2389 if (ld->ioctl) { 2390 retval = ld->ioctl(tty, file, cmd, arg); 2391 if (retval == -ENOIOCTLCMD) 2392 retval = -EINVAL; 2393 } 2394 tty_ldisc_deref(ld); 2395 return retval; 2396} 2397 2398 2399/* 2400 * This implements the "Secure Attention Key" --- the idea is to 2401 * prevent trojan horses by killing all processes associated with this 2402 * tty when the user hits the "Secure Attention Key". Required for 2403 * super-paranoid applications --- see the Orange Book for more details. 2404 * 2405 * This code could be nicer; ideally it should send a HUP, wait a few 2406 * seconds, then send a INT, and then a KILL signal. But you then 2407 * have to coordinate with the init process, since all processes associated 2408 * with the current tty must be dead before the new getty is allowed 2409 * to spawn. 2410 * 2411 * Now, if it would be correct ;-/ The current code has a nasty hole - 2412 * it doesn't catch files in flight. We may send the descriptor to ourselves 2413 * via AF_UNIX socket, close it and later fetch from socket. FIXME. 2414 * 2415 * Nasty bug: do_SAK is being called in interrupt context. This can 2416 * deadlock. We punt it up to process context. AKPM - 16Mar2001 2417 */ 2418static void __do_SAK(void *arg) 2419{ 2420#ifdef TTY_SOFT_SAK 2421 tty_hangup(tty); 2422#else 2423 struct tty_struct *tty = arg; 2424 struct task_struct *p; 2425 int session; 2426 int i; 2427 struct file *filp; 2428 struct tty_ldisc *disc; 2429 2430 if (!tty) 2431 return; 2432 session = tty->session; 2433 2434 /* We don't want an ldisc switch during this */ 2435 disc = tty_ldisc_ref(tty); 2436 if (disc && disc->flush_buffer) 2437 disc->flush_buffer(tty); 2438 tty_ldisc_deref(disc); 2439 2440 if (tty->driver->flush_buffer) 2441 tty->driver->flush_buffer(tty); 2442 2443 read_lock(&tasklist_lock); 2444 do_each_task_pid(session, PIDTYPE_SID, p) { 2445 if (p->signal->tty == tty || session > 0) { 2446 printk(KERN_NOTICE "SAK: killed process %d" 2447 " (%s): p->signal->session==tty->session\n", 2448 p->pid, p->comm); 2449 send_sig(SIGKILL, p, 1); 2450 continue; 2451 } 2452 task_lock(p); 2453 if (p->files) { 2454 spin_lock(&p->files->file_lock); 2455 for (i=0; i < p->files->max_fds; i++) { 2456 filp = fcheck_files(p->files, i); 2457 if (!filp) 2458 continue; 2459 if (filp->f_op->read == tty_read && 2460 filp->private_data == tty) { 2461 printk(KERN_NOTICE "SAK: killed process %d" 2462 " (%s): fd#%d opened to the tty\n", 2463 p->pid, p->comm, i); 2464 send_sig(SIGKILL, p, 1); 2465 break; 2466 } 2467 } 2468 spin_unlock(&p->files->file_lock); 2469 } 2470 task_unlock(p); 2471 } while_each_task_pid(session, PIDTYPE_SID, p); 2472 read_unlock(&tasklist_lock); 2473#endif 2474} 2475 2476/* 2477 * The tq handling here is a little racy - tty->SAK_work may already be queued. 2478 * Fortunately we don't need to worry, because if ->SAK_work is already queued, 2479 * the values which we write to it will be identical to the values which it 2480 * already has. --akpm 2481 */ 2482void do_SAK(struct tty_struct *tty) 2483{ 2484 if (!tty) 2485 return; 2486 PREPARE_WORK(&tty->SAK_work, __do_SAK, tty); 2487 schedule_work(&tty->SAK_work); 2488} 2489 2490EXPORT_SYMBOL(do_SAK); 2491 2492/* 2493 * This routine is called out of the software interrupt to flush data 2494 * from the flip buffer to the line discipline. 2495 */ 2496 2497static void flush_to_ldisc(void *private_) 2498{ 2499 struct tty_struct *tty = (struct tty_struct *) private_; 2500 unsigned char *cp; 2501 char *fp; 2502 int count; 2503 unsigned long flags; 2504 struct tty_ldisc *disc; 2505 2506 disc = tty_ldisc_ref(tty); 2507 if (disc == NULL) /* !TTY_LDISC */ 2508 return; 2509 2510 if (test_bit(TTY_DONT_FLIP, &tty->flags)) { 2511 /* 2512 * Do it after the next timer tick: 2513 */ 2514 schedule_delayed_work(&tty->flip.work, 1); 2515 goto out; 2516 } 2517 spin_lock_irqsave(&tty->read_lock, flags); 2518 if (tty->flip.buf_num) { 2519 cp = tty->flip.char_buf + TTY_FLIPBUF_SIZE; 2520 fp = tty->flip.flag_buf + TTY_FLIPBUF_SIZE; 2521 tty->flip.buf_num = 0; 2522 tty->flip.char_buf_ptr = tty->flip.char_buf; 2523 tty->flip.flag_buf_ptr = tty->flip.flag_buf; 2524 } else { 2525 cp = tty->flip.char_buf; 2526 fp = tty->flip.flag_buf; 2527 tty->flip.buf_num = 1; 2528 tty->flip.char_buf_ptr = tty->flip.char_buf + TTY_FLIPBUF_SIZE; 2529 tty->flip.flag_buf_ptr = tty->flip.flag_buf + TTY_FLIPBUF_SIZE; 2530 } 2531 count = tty->flip.count; 2532 tty->flip.count = 0; 2533 spin_unlock_irqrestore(&tty->read_lock, flags); 2534 2535 disc->receive_buf(tty, cp, fp, count); 2536out: 2537 tty_ldisc_deref(disc); 2538} 2539 2540/* 2541 * Routine which returns the baud rate of the tty 2542 * 2543 * Note that the baud_table needs to be kept in sync with the 2544 * include/asm/termbits.h file. 2545 */ 2546static int baud_table[] = { 2547 0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, 2548 9600, 19200, 38400, 57600, 115200, 230400, 460800, 2549#ifdef __sparc__ 2550 76800, 153600, 307200, 614400, 921600 2551#else 2552 500000, 576000, 921600, 1000000, 1152000, 1500000, 2000000, 2553 2500000, 3000000, 3500000, 4000000 2554#endif 2555}; 2556 2557static int n_baud_table = ARRAY_SIZE(baud_table); 2558 2559/** 2560 * tty_termios_baud_rate 2561 * @termios: termios structure 2562 * 2563 * Convert termios baud rate data into a speed. This should be called 2564 * with the termios lock held if this termios is a terminal termios 2565 * structure. May change the termios data. 2566 */ 2567 2568int tty_termios_baud_rate(struct termios *termios) 2569{ 2570 unsigned int cbaud; 2571 2572 cbaud = termios->c_cflag & CBAUD; 2573 2574 if (cbaud & CBAUDEX) { 2575 cbaud &= ~CBAUDEX; 2576 2577 if (cbaud < 1 || cbaud + 15 > n_baud_table) 2578 termios->c_cflag &= ~CBAUDEX; 2579 else 2580 cbaud += 15; 2581 } 2582 return baud_table[cbaud]; 2583} 2584 2585EXPORT_SYMBOL(tty_termios_baud_rate); 2586 2587/** 2588 * tty_get_baud_rate - get tty bit rates 2589 * @tty: tty to query 2590 * 2591 * Returns the baud rate as an integer for this terminal. The 2592 * termios lock must be held by the caller and the terminal bit 2593 * flags may be updated. 2594 */ 2595 2596int tty_get_baud_rate(struct tty_struct *tty) 2597{ 2598 int baud = tty_termios_baud_rate(tty->termios); 2599 2600 if (baud == 38400 && tty->alt_speed) { 2601 if (!tty->warned) { 2602 printk(KERN_WARNING "Use of setserial/setrocket to " 2603 "set SPD_* flags is deprecated\n"); 2604 tty->warned = 1; 2605 } 2606 baud = tty->alt_speed; 2607 } 2608 2609 return baud; 2610} 2611 2612EXPORT_SYMBOL(tty_get_baud_rate); 2613 2614/** 2615 * tty_flip_buffer_push - terminal 2616 * @tty: tty to push 2617 * 2618 * Queue a push of the terminal flip buffers to the line discipline. This 2619 * function must not be called from IRQ context if tty->low_latency is set. 2620 * 2621 * In the event of the queue being busy for flipping the work will be 2622 * held off and retried later. 2623 */ 2624 2625void tty_flip_buffer_push(struct tty_struct *tty) 2626{ 2627 if (tty->low_latency) 2628 flush_to_ldisc((void *) tty); 2629 else 2630 schedule_delayed_work(&tty->flip.work, 1); 2631} 2632 2633EXPORT_SYMBOL(tty_flip_buffer_push); 2634 2635/* 2636 * This subroutine initializes a tty structure. 2637 */ 2638static void initialize_tty_struct(struct tty_struct *tty) 2639{ 2640 memset(tty, 0, sizeof(struct tty_struct)); 2641 tty->magic = TTY_MAGIC; 2642 tty_ldisc_assign(tty, tty_ldisc_get(N_TTY)); 2643 tty->pgrp = -1; 2644 tty->overrun_time = jiffies; 2645 tty->flip.char_buf_ptr = tty->flip.char_buf; 2646 tty->flip.flag_buf_ptr = tty->flip.flag_buf; 2647 INIT_WORK(&tty->flip.work, flush_to_ldisc, tty); 2648 init_MUTEX(&tty->flip.pty_sem); 2649 init_MUTEX(&tty->termios_sem); 2650 init_waitqueue_head(&tty->write_wait); 2651 init_waitqueue_head(&tty->read_wait); 2652 INIT_WORK(&tty->hangup_work, do_tty_hangup, tty); 2653 sema_init(&tty->atomic_read, 1); 2654 sema_init(&tty->atomic_write, 1); 2655 spin_lock_init(&tty->read_lock); 2656 INIT_LIST_HEAD(&tty->tty_files); 2657 INIT_WORK(&tty->SAK_work, NULL, NULL); 2658} 2659 2660/* 2661 * The default put_char routine if the driver did not define one. 2662 */ 2663static void tty_default_put_char(struct tty_struct *tty, unsigned char ch) 2664{ 2665 tty->driver->write(tty, &ch, 1); 2666} 2667 2668static struct class *tty_class; 2669 2670/** 2671 * tty_register_device - register a tty device 2672 * @driver: the tty driver that describes the tty device 2673 * @index: the index in the tty driver for this tty device 2674 * @device: a struct device that is associated with this tty device. 2675 * This field is optional, if there is no known struct device for this 2676 * tty device it can be set to NULL safely. 2677 * 2678 * This call is required to be made to register an individual tty device if 2679 * the tty driver's flags have the TTY_DRIVER_NO_DEVFS bit set. If that 2680 * bit is not set, this function should not be called. 2681 */ 2682void tty_register_device(struct tty_driver *driver, unsigned index, 2683 struct device *device) 2684{ 2685 char name[64]; 2686 dev_t dev = MKDEV(driver->major, driver->minor_start) + index; 2687 2688 if (index >= driver->num) { 2689 printk(KERN_ERR "Attempt to register invalid tty line number " 2690 " (%d).\n", index); 2691 return; 2692 } 2693 2694 devfs_mk_cdev(dev, S_IFCHR | S_IRUSR | S_IWUSR, 2695 "%s%d", driver->devfs_name, index + driver->name_base); 2696 2697 if (driver->type == TTY_DRIVER_TYPE_PTY) 2698 pty_line_name(driver, index, name); 2699 else 2700 tty_line_name(driver, index, name); 2701 class_device_create(tty_class, dev, device, name); 2702} 2703 2704/** 2705 * tty_unregister_device - unregister a tty device 2706 * @driver: the tty driver that describes the tty device 2707 * @index: the index in the tty driver for this tty device 2708 * 2709 * If a tty device is registered with a call to tty_register_device() then 2710 * this function must be made when the tty device is gone. 2711 */ 2712void tty_unregister_device(struct tty_driver *driver, unsigned index) 2713{ 2714 devfs_remove("%s%d", driver->devfs_name, index + driver->name_base); 2715 class_device_destroy(tty_class, MKDEV(driver->major, driver->minor_start) + index); 2716} 2717 2718EXPORT_SYMBOL(tty_register_device); 2719EXPORT_SYMBOL(tty_unregister_device); 2720 2721struct tty_driver *alloc_tty_driver(int lines) 2722{ 2723 struct tty_driver *driver; 2724 2725 driver = kmalloc(sizeof(struct tty_driver), GFP_KERNEL); 2726 if (driver) { 2727 memset(driver, 0, sizeof(struct tty_driver)); 2728 driver->magic = TTY_DRIVER_MAGIC; 2729 driver->num = lines; 2730 /* later we'll move allocation of tables here */ 2731 } 2732 return driver; 2733} 2734 2735void put_tty_driver(struct tty_driver *driver) 2736{ 2737 kfree(driver); 2738} 2739 2740void tty_set_operations(struct tty_driver *driver, struct tty_operations *op) 2741{ 2742 driver->open = op->open; 2743 driver->close = op->close; 2744 driver->write = op->write; 2745 driver->put_char = op->put_char; 2746 driver->flush_chars = op->flush_chars; 2747 driver->write_room = op->write_room; 2748 driver->chars_in_buffer = op->chars_in_buffer; 2749 driver->ioctl = op->ioctl; 2750 driver->set_termios = op->set_termios; 2751 driver->throttle = op->throttle; 2752 driver->unthrottle = op->unthrottle; 2753 driver->stop = op->stop; 2754 driver->start = op->start; 2755 driver->hangup = op->hangup; 2756 driver->break_ctl = op->break_ctl; 2757 driver->flush_buffer = op->flush_buffer; 2758 driver->set_ldisc = op->set_ldisc; 2759 driver->wait_until_sent = op->wait_until_sent; 2760 driver->send_xchar = op->send_xchar; 2761 driver->read_proc = op->read_proc; 2762 driver->write_proc = op->write_proc; 2763 driver->tiocmget = op->tiocmget; 2764 driver->tiocmset = op->tiocmset; 2765} 2766 2767 2768EXPORT_SYMBOL(alloc_tty_driver); 2769EXPORT_SYMBOL(put_tty_driver); 2770EXPORT_SYMBOL(tty_set_operations); 2771 2772/* 2773 * Called by a tty driver to register itself. 2774 */ 2775int tty_register_driver(struct tty_driver *driver) 2776{ 2777 int error; 2778 int i; 2779 dev_t dev; 2780 void **p = NULL; 2781 2782 if (driver->flags & TTY_DRIVER_INSTALLED) 2783 return 0; 2784 2785 if (!(driver->flags & TTY_DRIVER_DEVPTS_MEM)) { 2786 p = kmalloc(driver->num * 3 * sizeof(void *), GFP_KERNEL); 2787 if (!p) 2788 return -ENOMEM; 2789 memset(p, 0, driver->num * 3 * sizeof(void *)); 2790 } 2791 2792 if (!driver->major) { 2793 error = alloc_chrdev_region(&dev, driver->minor_start, driver->num, 2794 (char*)driver->name); 2795 if (!error) { 2796 driver->major = MAJOR(dev); 2797 driver->minor_start = MINOR(dev); 2798 } 2799 } else { 2800 dev = MKDEV(driver->major, driver->minor_start); 2801 error = register_chrdev_region(dev, driver->num, 2802 (char*)driver->name); 2803 } 2804 if (error < 0) { 2805 kfree(p); 2806 return error; 2807 } 2808 2809 if (p) { 2810 driver->ttys = (struct tty_struct **)p; 2811 driver->termios = (struct termios **)(p + driver->num); 2812 driver->termios_locked = (struct termios **)(p + driver->num * 2); 2813 } else { 2814 driver->ttys = NULL; 2815 driver->termios = NULL; 2816 driver->termios_locked = NULL; 2817 } 2818 2819 cdev_init(&driver->cdev, &tty_fops); 2820 driver->cdev.owner = driver->owner; 2821 error = cdev_add(&driver->cdev, dev, driver->num); 2822 if (error) { 2823 cdev_del(&driver->cdev); 2824 unregister_chrdev_region(dev, driver->num); 2825 driver->ttys = NULL; 2826 driver->termios = driver->termios_locked = NULL; 2827 kfree(p); 2828 return error; 2829 } 2830 2831 if (!driver->put_char) 2832 driver->put_char = tty_default_put_char; 2833 2834 list_add(&driver->tty_drivers, &tty_drivers); 2835 2836 if ( !(driver->flags & TTY_DRIVER_NO_DEVFS) ) { 2837 for(i = 0; i < driver->num; i++) 2838 tty_register_device(driver, i, NULL); 2839 } 2840 proc_tty_register_driver(driver); 2841 return 0; 2842} 2843 2844EXPORT_SYMBOL(tty_register_driver); 2845 2846/* 2847 * Called by a tty driver to unregister itself. 2848 */ 2849int tty_unregister_driver(struct tty_driver *driver) 2850{ 2851 int i; 2852 struct termios *tp; 2853 void *p; 2854 2855 if (driver->refcount) 2856 return -EBUSY; 2857 2858 unregister_chrdev_region(MKDEV(driver->major, driver->minor_start), 2859 driver->num); 2860 2861 list_del(&driver->tty_drivers); 2862 2863 /* 2864 * Free the termios and termios_locked structures because 2865 * we don't want to get memory leaks when modular tty 2866 * drivers are removed from the kernel. 2867 */ 2868 for (i = 0; i < driver->num; i++) { 2869 tp = driver->termios[i]; 2870 if (tp) { 2871 driver->termios[i] = NULL; 2872 kfree(tp); 2873 } 2874 tp = driver->termios_locked[i]; 2875 if (tp) { 2876 driver->termios_locked[i] = NULL; 2877 kfree(tp); 2878 } 2879 if (!(driver->flags & TTY_DRIVER_NO_DEVFS)) 2880 tty_unregister_device(driver, i); 2881 } 2882 p = driver->ttys; 2883 proc_tty_unregister_driver(driver); 2884 driver->ttys = NULL; 2885 driver->termios = driver->termios_locked = NULL; 2886 kfree(p); 2887 cdev_del(&driver->cdev); 2888 return 0; 2889} 2890 2891EXPORT_SYMBOL(tty_unregister_driver); 2892 2893 2894/* 2895 * Initialize the console device. This is called *early*, so 2896 * we can't necessarily depend on lots of kernel help here. 2897 * Just do some early initializations, and do the complex setup 2898 * later. 2899 */ 2900void __init console_init(void) 2901{ 2902 initcall_t *call; 2903 2904 /* Setup the default TTY line discipline. */ 2905 (void) tty_register_ldisc(N_TTY, &tty_ldisc_N_TTY); 2906 2907 /* 2908 * set up the console device so that later boot sequences can 2909 * inform about problems etc.. 2910 */ 2911#ifdef CONFIG_EARLY_PRINTK 2912 disable_early_printk(); 2913#endif 2914#ifdef CONFIG_SERIAL_68360 2915 /* This is not a console initcall. I know not what it's doing here. 2916 So I haven't moved it. dwmw2 */ 2917 rs_360_init(); 2918#endif 2919 call = __con_initcall_start; 2920 while (call < __con_initcall_end) { 2921 (*call)(); 2922 call++; 2923 } 2924} 2925 2926#ifdef CONFIG_VT 2927extern int vty_init(void); 2928#endif 2929 2930static int __init tty_class_init(void) 2931{ 2932 tty_class = class_create(THIS_MODULE, "tty"); 2933 if (IS_ERR(tty_class)) 2934 return PTR_ERR(tty_class); 2935 return 0; 2936} 2937 2938postcore_initcall(tty_class_init); 2939 2940/* 3/2004 jmc: why do these devices exist? */ 2941 2942static struct cdev tty_cdev, console_cdev; 2943#ifdef CONFIG_UNIX98_PTYS 2944static struct cdev ptmx_cdev; 2945#endif 2946#ifdef CONFIG_VT 2947static struct cdev vc0_cdev; 2948#endif 2949 2950/* 2951 * Ok, now we can initialize the rest of the tty devices and can count 2952 * on memory allocations, interrupts etc.. 2953 */ 2954static int __init tty_init(void) 2955{ 2956 cdev_init(&tty_cdev, &tty_fops); 2957 if (cdev_add(&tty_cdev, MKDEV(TTYAUX_MAJOR, 0), 1) || 2958 register_chrdev_region(MKDEV(TTYAUX_MAJOR, 0), 1, "/dev/tty") < 0) 2959 panic("Couldn't register /dev/tty driver\n"); 2960 devfs_mk_cdev(MKDEV(TTYAUX_MAJOR, 0), S_IFCHR|S_IRUGO|S_IWUGO, "tty"); 2961 class_device_create(tty_class, MKDEV(TTYAUX_MAJOR, 0), NULL, "tty"); 2962 2963 cdev_init(&console_cdev, &console_fops); 2964 if (cdev_add(&console_cdev, MKDEV(TTYAUX_MAJOR, 1), 1) || 2965 register_chrdev_region(MKDEV(TTYAUX_MAJOR, 1), 1, "/dev/console") < 0) 2966 panic("Couldn't register /dev/console driver\n"); 2967 devfs_mk_cdev(MKDEV(TTYAUX_MAJOR, 1), S_IFCHR|S_IRUSR|S_IWUSR, "console"); 2968 class_device_create(tty_class, MKDEV(TTYAUX_MAJOR, 1), NULL, "console"); 2969 2970#ifdef CONFIG_UNIX98_PTYS 2971 cdev_init(&ptmx_cdev, &ptmx_fops); 2972 if (cdev_add(&ptmx_cdev, MKDEV(TTYAUX_MAJOR, 2), 1) || 2973 register_chrdev_region(MKDEV(TTYAUX_MAJOR, 2), 1, "/dev/ptmx") < 0) 2974 panic("Couldn't register /dev/ptmx driver\n"); 2975 devfs_mk_cdev(MKDEV(TTYAUX_MAJOR, 2), S_IFCHR|S_IRUGO|S_IWUGO, "ptmx"); 2976 class_device_create(tty_class, MKDEV(TTYAUX_MAJOR, 2), NULL, "ptmx"); 2977#endif 2978 2979#ifdef CONFIG_VT 2980 cdev_init(&vc0_cdev, &console_fops); 2981 if (cdev_add(&vc0_cdev, MKDEV(TTY_MAJOR, 0), 1) || 2982 register_chrdev_region(MKDEV(TTY_MAJOR, 0), 1, "/dev/vc/0") < 0) 2983 panic("Couldn't register /dev/tty0 driver\n"); 2984 devfs_mk_cdev(MKDEV(TTY_MAJOR, 0), S_IFCHR|S_IRUSR|S_IWUSR, "vc/0"); 2985 class_device_create(tty_class, MKDEV(TTY_MAJOR, 0), NULL, "tty0"); 2986 2987 vty_init(); 2988#endif 2989 return 0; 2990} 2991module_init(tty_init);