From: Greg Kroah-Hartman <gregkh@suse.de>
To: linux-kernel@vger.kernel.org
Cc: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>,
stable <stable@kernel.org>, Greg Kroah-Hartman <gregkh@suse.de>
Subject: [PATCH 24/58] devpts_get_tty() should validate inode
Date: Fri, 11 Dec 2009 15:28:08 -0800 [thread overview]
Message-ID: <1260574122-10676-24-git-send-email-gregkh@suse.de> (raw)
In-Reply-To: <20091211232805.GA10652@kroah.com>
From: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
devpts_get_tty() assumes that the inode passed in is associated with a valid
pty. But if the only reference to the pty is via a bind-mount, the inode
passed to devpts_get_tty() while valid, would refer to a pty that no longer
exists.
With a lot of debug effort, Grzegorz Nosek developed a small program (see
below) to reproduce a crash on recent kernels. This crash is a regression
introduced by the commit:
commit 527b3e4773628b30d03323a2cb5fb0d84441990f
Author: Sukadev Bhattiprolu <sukadev@us.ibm.com>
Date: Mon Oct 13 10:43:08 2008 +0100
To fix, ensure that the dentry associated with the inode has not yet been
deleted/unhashed by devpts_pty_kill().
See also:
https://lists.linux-foundation.org/pipermail/containers/2009-July/019273.html
tty-bug.c:
#define _GNU_SOURCE
#include <fcntl.h>
#include <sched.h>
#include <stdlib.h>
#include <sys/mount.h>
#include <sys/signal.h>
#include <unistd.h>
#include <stdio.h>
#include <linux/fs.h>
void dummy(int sig)
{
}
static int child(void *unused)
{
int fd;
signal(SIGINT, dummy); signal(SIGHUP, dummy);
pause(); /* cheesy synchronisation to wait for /dev/pts/0 to appear */
mount("/dev/pts/0", "/dev/console", NULL, MS_BIND, NULL);
sleep(2);
fd = open("/dev/console", O_RDWR);
dup(0); dup(0);
write(1, "Hello world!\n", sizeof("Hello world!\n")-1);
return 0;
}
int main(void)
{
pid_t pid;
char *stack;
stack = malloc(16384);
pid = clone(child, stack+16384, CLONE_NEWNS|SIGCHLD, NULL);
open("/dev/ptmx", O_RDWR|O_NOCTTY|O_NONBLOCK);
unlockpt(fd); grantpt(fd);
sleep(2);
kill(pid, SIGHUP);
sleep(1);
return 0; /* exit before child opens /dev/console */
}
Reported-by: Grzegorz Nosek <root@localdomain.pl>
Signed-off-by: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Tested-by: Serge Hallyn <serue@us.ibm.com>
Cc: stable <stable@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
fs/devpts/inode.c | 16 ++++++++++++++--
1 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/fs/devpts/inode.c b/fs/devpts/inode.c
index d5f8c96..8882ecc 100644
--- a/fs/devpts/inode.c
+++ b/fs/devpts/inode.c
@@ -517,11 +517,23 @@ int devpts_pty_new(struct inode *ptmx_inode, struct tty_struct *tty)
struct tty_struct *devpts_get_tty(struct inode *pts_inode, int number)
{
+ struct dentry *dentry;
+ struct tty_struct *tty;
+
BUG_ON(pts_inode->i_rdev == MKDEV(TTYAUX_MAJOR, PTMX_MINOR));
+ /* Ensure dentry has not been deleted by devpts_pty_kill() */
+ dentry = d_find_alias(pts_inode);
+ if (!dentry)
+ return NULL;
+
+ tty = NULL;
if (pts_inode->i_sb->s_magic == DEVPTS_SUPER_MAGIC)
- return (struct tty_struct *)pts_inode->i_private;
- return NULL;
+ tty = (struct tty_struct *)pts_inode->i_private;
+
+ dput(dentry);
+
+ return tty;
}
void devpts_pty_kill(struct tty_struct *tty)
--
1.6.5.5
next prev parent reply other threads:[~2009-12-11 23:38 UTC|newest]
Thread overview: 99+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-11 23:28 [GIT PATCH] TTY patches for 2.6.33-git Greg KH
2009-12-11 23:27 ` [PATCH 01/58] jsm: IRQ handlers doesn't need to have IRQ_DISABLED enabled Greg Kroah-Hartman
2009-12-11 23:27 ` [PATCH 02/58] jsm: Rewriting a bad log message Greg Kroah-Hartman
2009-12-11 23:27 ` [PATCH 03/58] jsm: remove the ch_custom_speed field Greg Kroah-Hartman
2009-12-11 23:27 ` [PATCH 04/58] jsm: removing ch_old_baud field Greg Kroah-Hartman
2009-12-11 23:27 ` [PATCH 05/58] jsm: Remove ch_cpstime field Greg Kroah-Hartman
2009-12-11 23:27 ` [PATCH 06/58] jsm: Removing unused jsm_channel->ch_wopen field Greg Kroah-Hartman
2009-12-11 23:27 ` [PATCH 07/58] jsm: removing the field jsm_board->intr_count Greg Kroah-Hartman
2009-12-11 23:27 ` [PATCH 08/58] jsm: adding EEH handlers Greg Kroah-Hartman
2009-12-11 23:27 ` [PATCH 09/58] tty: const: constify remaining tty_operations Greg Kroah-Hartman
2009-12-11 23:27 ` [PATCH 10/58] tty: esp: remove broken driver Greg Kroah-Hartman
2009-12-11 23:27 ` [PATCH 11/58] tty: istallion: Kill off the BKL ioctl Greg Kroah-Hartman
2009-12-11 23:27 ` [PATCH 12/58] tty: stallion: kill " Greg Kroah-Hartman
2009-12-11 23:27 ` [PATCH 13/58] tty_port: add "tty_port_open" helper Greg Kroah-Hartman
2009-12-11 23:27 ` [PATCH 14/58] tty_port: coding style cleaning pass Greg Kroah-Hartman
2009-12-11 23:27 ` [PATCH 15/58] usb_serial: Use the shutdown() operation Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 16/58] usb_serial: Kill port mutex Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 17/58] opticon: Fix resume logic Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 18/58] serial: fix NULL pointer dereference Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 19/58] serial: cascade needless conditionals Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 20/58] serial, 8250: calculate irqflags bitmask before loop Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 21/58] Serial: pxa: work around Errata #75 Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 22/58] tty: docs: serial/tty, add to ldisc methods Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 23/58] Serial: Do not read IIR in serial8250_start_tx when UART_BUG_TXEN Greg Kroah-Hartman
2009-12-11 23:28 ` Greg Kroah-Hartman [this message]
2009-12-11 23:28 ` [PATCH 25/58] tty_port: Move hupcl handling Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 26/58] sdio_uart: use tty_port Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 27/58] sdio_uart: Fix oops caused by the previous changeset Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 28/58] sdio_uart: refcount the tty objects Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 29/58] sdio_uart: Move the open lock Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 30/58] tty: sdio_uart: Switch to the open/close helpers Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 31/58] tty: sdio_uart: Fix termios handling Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 32/58] tty: sdio_uart: Style fixes Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 33/58] tty: sdio_uart: add modem functionality Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 34/58] tty: sdio_uart: Fix the locking on "func" for new code Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 35/58] tty: tty_port: Change the buffer allocator locking Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 36/58] tty: riscom8: switch to the tty_port_open API Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 37/58] tty: tty_port: Add IO_ERROR bit handling Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 38/58] tty: tty_port: Move the IO_ERROR clear Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 39/58] tty: stallion: Convert to the tty_port_open/close methods Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 40/58] tty: istallion: tty port open/close methods Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 41/58] tty: tty_port: Add a kref object to the tty port Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 42/58] tty: isicom: switch to the new tty_port_open helper Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 43/58] tty: isicom: sort out the board init logic Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 44/58] tty: mxser: use the tty_port_open method Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 45/58] tty: mxser: Use the new locking rules to fix setserial properly Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 46/58] tty: isicom: fix deadlock on shutdown Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 47/58] tty: moxa: Use more tty_port ops Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 48/58] tty: moxa: rework the locking a bit Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 49/58] tty: moxa: Locking clean up Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 50/58] tty: moxa: Kill off the throttle method Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 51/58] tty: moxa: Fix modem op locking Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 52/58] tty: moxa: Kill the use of lock_kernel Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 53/58] tty: moxa: split open lock Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 54/58] tty: push the BKL down into the handlers a bit Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 55/58] tty: Push the lock down further into the ldisc code Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 56/58] tty: Push the bkl down a bit in the hangup code Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 57/58] tty: Move the leader test in disassociate Greg Kroah-Hartman
2009-12-11 23:28 ` [PATCH 58/58] tty: split the lock up a bit further Greg Kroah-Hartman
2009-12-12 8:46 ` [GIT PATCH] TTY patches for 2.6.33-git Ingo Molnar
2009-12-12 9:39 ` Andrew Morton
2009-12-12 10:06 ` Ingo Molnar
2009-12-12 10:15 ` Ingo Molnar
2009-12-12 10:41 ` Andrew Morton
2009-12-12 10:52 ` Ingo Molnar
2009-12-12 10:10 ` Ingo Molnar
2009-12-12 10:36 ` Andrew Morton
2009-12-12 17:16 ` Linus Torvalds
2009-12-12 17:26 ` Linus Torvalds
2009-12-12 21:42 ` Alan Cox
2009-12-12 21:48 ` Thomas Gleixner
2009-12-12 22:25 ` Linus Torvalds
2009-12-12 22:31 ` Thomas Gleixner
2009-12-12 22:21 ` Linus Torvalds
2009-12-12 22:33 ` Thomas Gleixner
2009-12-12 23:17 ` Linus Torvalds
2009-12-13 6:58 ` Ingo Molnar
2009-12-13 11:36 ` Alan Cox
2009-12-13 12:13 ` Ingo Molnar
2009-12-13 17:46 ` Linus Torvalds
2009-12-13 18:17 ` Ingo Molnar
2009-12-13 18:33 ` Trond Myklebust
2009-12-13 19:07 ` Linus Torvalds
2009-12-13 19:17 ` Trond Myklebust
2009-12-13 19:04 ` Frederic Weisbecker
2009-12-13 19:09 ` Trond Myklebust
2009-12-13 19:19 ` Linus Torvalds
2009-12-13 20:04 ` Trond Myklebust
2009-12-13 19:20 ` Frederic Weisbecker
2009-12-13 17:55 ` Arjan van de Ven
2009-12-13 19:16 ` Frederic Weisbecker
2009-12-14 5:30 ` Arjan van de Ven
2009-12-14 10:39 ` Oliver Neukum
2009-12-14 16:02 ` Arjan van de Ven
2009-12-16 9:15 ` Arnd Bergmann
2009-12-12 11:02 ` Alan Cox
2009-12-12 22:34 ` Thomas Gleixner
2009-12-12 10:42 ` Alan Cox
2009-12-12 10:42 ` Ingo Molnar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1260574122-10676-24-git-send-email-gregkh@suse.de \
--to=gregkh@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@kernel.org \
--cc=sukadev@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®