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