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