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