From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: stable-review@kernel.org, torvalds@linux-foundation.org,
akpm@linux-foundation.org, alan@lxorguk.ukuu.org.uk,
Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Subject: [10/90] devpts_get_tty() should validate inode
Date: Wed, 16 Dec 2009 17:14:21 -0800 [thread overview]
Message-ID: <20091217011559.147532119@mini.kroah.org> (raw)
In-Reply-To: <20091217011835.GA20434@kroah.com>
2.6.31-stable review patch. If anyone has any objections, please let us know.
------------------
From: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
commit edfacdd6f81119b9005615593f2cbd94b8c7e2d8 upstream.
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>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
fs/devpts/inode.c | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
--- a/fs/devpts/inode.c
+++ b/fs/devpts/inode.c
@@ -518,11 +518,23 @@ int devpts_pty_new(struct inode *ptmx_in
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)
next prev parent reply other threads:[~2009-12-17 1:20 UTC|newest]
Thread overview: 94+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-17 1:18 [00/90] 2.6.31.9-stable review Greg KH
2009-12-17 1:14 ` [01/90] USB: option: add pid for ZTE Greg KH
2009-12-17 1:14 ` [02/90] USB: usb-storage: fix bug in fill_inquiry Greg KH
2009-12-17 1:14 ` [03/90] firewire: ohci: handle receive packets with a data length of zero Greg KH
2009-12-17 1:14 ` [04/90] ALSA: hda - Terradici HDA controllers does not support 64-bit mode Greg KH
2009-12-17 1:14 ` [05/90] ALSA: hrtimer - Fix lock-up Greg KH
2009-12-17 1:14 ` [06/90] ath5k: allow setting txpower to 0 Greg KH
2009-12-17 1:14 ` [07/90] ath5k: enable EEPROM checksum check Greg KH
2009-12-17 1:14 ` [08/90] bsdacct: fix uid/gid misreporting Greg KH
2009-12-17 1:14 ` [09/90] debugfs: fix create mutex racy fops and private data Greg KH
2009-12-17 1:14 ` Greg KH [this message]
2009-12-17 1:14 ` [11/90] futex: Take mmap_sem for get_user_pages in fault_in_user_writeable Greg KH
2009-12-17 1:14 ` [12/90] hfs: fix a potential buffer overflow Greg KH
2009-12-17 1:14 ` [13/90] hrtimer: Fix /proc/timer_list regression Greg KH
2009-12-17 1:14 ` [14/90] jbd2: dont wipe the journal on a failed journal checksum Greg KH
2009-12-17 1:14 ` [15/90] KVM: s390: Make psw available on all exits, not just a subset Greg KH
2009-12-17 1:14 ` [16/90] md/bitmap: protect against bitmap removal while being updated Greg KH
2009-12-17 1:14 ` [17/90] pata_hpt{37x|3x2n}: fix timing register masks (take 2) Greg KH
2009-12-17 1:14 ` [18/90] [ARM] pxa/em-x270: fix usb hub power up/reset sequence Greg KH
2009-12-17 1:14 ` [19/90] ssb: Fix range check in sprom write Greg KH
2009-12-17 1:14 ` [20/90] SUNRPC: IS_ERR/PTR_ERR confusion Greg KH
2009-12-17 1:14 ` [21/90] USB: Close usb_find_interface race v3 Greg KH
2009-12-17 1:14 ` [22/90] USB: musb_gadget_ep0: fix unhandled endpoint 0 IRQs, again Greg KH
2009-12-17 1:14 ` [23/90] USB: option.c: add support for D-Link DWM-162-U5 Greg KH
2009-12-17 1:14 ` [24/90] USB: usb-storage: add BAD_SENSE flag Greg KH
2009-12-17 1:14 ` [25/90] USB: usbtmc: repeat usb_bulk_msg until whole message is transfered Greg KH
2009-12-17 1:14 ` [26/90] V4L/DVB: Fix test in copy_reg_bits() Greg KH
2009-12-17 1:14 ` [27/90] x86: Add new Intel CPU cache size descriptors Greg KH
2009-12-17 1:14 ` [28/90] x86/amd-iommu: attach devices to pre-allocated domains early Greg KH
2009-12-17 1:14 ` [29/90] x86/amd-iommu: un__init iommu_setup_msi Greg KH
2009-12-17 1:14 ` [30/90] x86, apic: Enable lapic nmi watchdog on AMD Family 11h Greg KH
2009-12-17 1:14 ` [31/90] x86: ASUS P4S800 reboot=bios quirk Greg KH
2009-12-17 1:14 ` [32/90] x86, Calgary IOMMU quirk: Find nearest matching Calgary while walking up the PCI tree Greg KH
2009-12-17 1:14 ` [33/90] x86: Fix iommu=nodac parameter handling Greg KH
2009-12-17 1:14 ` [34/90] x86: Fix typo in Intel CPU cache size descriptor Greg KH
2009-12-17 1:14 ` [35/90] x86: GART: pci-gart_64.c: Use correct length in strncmp Greg KH
2009-12-17 1:14 ` [36/90] drm/radeon/kms: Add quirk for HIS X1300 board Greg KH
2009-12-17 1:14 ` [37/90] drm/radeon/kms: fix legacy crtc2 dpms Greg KH
2009-12-17 1:14 ` [38/90] mac80211: Fix bug in computing crc over dynamic IEs in beacon Greg KH
2009-12-17 1:14 ` [39/90] mm: hugetlb: fix hugepage memory leak in mincore() Greg KH
2009-12-17 1:14 ` [40/90] mm: hugetlb: fix hugepage memory leak in walk_page_range() Greg KH
2009-12-17 1:14 ` [41/90] powerpc: Fix usage of 64-bit instruction in 32-bit altivec code Greg KH
2009-12-17 1:14 ` [42/90] Serial: Do not read IIR in serial8250_start_tx when UART_BUG_TXEN Greg KH
2009-12-17 1:14 ` [43/90] ide: Serialize CMD643 and CMD646 to fix a hardware bug with SSD Greg KH
2009-12-17 1:14 ` [44/90] ide: fix ioctl to pass requested transfer mode to ide_find_dma_mode instead of UDMA6 Greg KH
2009-12-17 1:14 ` [45/90] Revert "ide: try to use PIO Mode 0 during probe if possible" Greg KH
2009-12-17 1:14 ` [46/90] slc90e66: fix UDMA handling Greg KH
2009-12-17 1:14 ` [47/90] Au1x00: fix crash when trying register_netdev() Greg KH
2009-12-17 1:14 ` [48/90] b44 WOL setup: one-bit-off stack corruption kernel panic fix Greg KH
2009-12-17 1:15 ` [49/90] b44: Fix wedge when using netconsole Greg KH
2009-12-17 1:15 ` [50/90] e100: Use pci pool to work around GFP_ATOMIC order 5 memory allocation failure Greg KH
2009-12-17 15:03 ` Roger Oksanen
2009-12-17 15:09 ` Greg KH
2009-12-17 15:16 ` Roger Oksanen
2009-12-17 1:15 ` [51/90] gro: Fix illegal merging of trailer trash Greg KH
2009-12-17 1:15 ` [52/90] ip_fragment: also adjust skb->truesize for packets not owned by a socket Greg KH
2009-12-17 1:15 ` [53/90] Revert "isdn: isdn_ppp: Use SKB list facilities instead of home-grown implementation." Greg KH
2009-12-17 1:15 ` [54/90] net: Fix the rollback test in dev_change_name() Greg KH
2009-12-17 1:15 ` [55/90] NET: smc91x: Fix irq flags Greg KH
2009-12-17 1:15 ` [56/90] smsc9420: prevent BUG() if ethtool is called with interface down Greg KH
2009-12-17 1:15 ` [57/90] vlan: Fix register_vlan_dev() error path Greg KH
2009-12-17 1:15 ` [58/90] sparc64: Fix definition of VMEMMAP_SIZE Greg KH
2009-12-17 1:15 ` [59/90] sunsab: Do not set sunsab_reg.cons right before registering minors Greg KH
2009-12-17 1:15 ` [60/90] sunsu: Fix detection of SU ports which are RSC console or control Greg KH
2009-12-17 1:15 ` [61/90] serial: suncore: Add ignore_line argument to sunserial_console_match() Greg KH
2009-12-17 1:15 ` [62/90] serial: suncore: Fix RSC/LOM handling in sunserial_console_termios() Greg KH
2009-12-17 1:15 ` [63/90] sunsu: Pass true ignore_line to console match when RSC or LOM console Greg KH
2009-12-17 1:15 ` [64/90] sunsu: Use sunserial_console_termios() in sunsu_console_setup() Greg KH
2009-12-17 1:15 ` [65/90] sparc64: Dont specify IRQF_SHARED for LDC interrupts Greg KH
2009-12-17 1:15 ` [66/90] sparc64: Fix overly strict range type matching for PCI devices Greg KH
2009-12-17 1:15 ` [67/90] sparc64: Fix stack debugging IRQ stack regression Greg KH
2009-12-17 1:15 ` [68/90] sparc: Set UTS_MACHINE correctly Greg KH
2009-12-17 1:15 ` [69/90] x86/mce: Set up timer unconditionally Greg KH
2009-12-17 1:15 ` [70/90] b43legacy: avoid PPC fault during resume Greg KH
2009-12-17 1:15 ` [71/90] p54usb: Remove DMA buffer from stack Greg KH
2009-12-17 1:15 ` [72/90] [PATCH .31-stable] x86: Under BIOS control, restore APs APIC_LVTTHMR to the BSP value Greg KH
2009-12-17 1:15 ` [73/90] ACPI: Use the ARB_DISABLE for the CPU which model id is less than 0x0f Greg KH
2009-12-17 1:15 ` [74/90] asus-laptop: change light sens default values Greg KH
2009-12-17 1:15 ` [75/90] backlight: lcd - Fix wrong sizeof Greg KH
2009-12-17 1:15 ` [76/90] drm/i915: Avoid NULL dereference with component_only tv_modes Greg KH
2009-12-17 1:15 ` [77/90] drm/i915: Fix CRT hotplug detect by checking really no channels attached Greg KH
2009-12-17 1:15 ` [78/90] drm/i915: Fix LVDS stability issue on Ironlake Greg KH
2009-12-17 1:15 ` [79/90] drm/i915: save/restore BLC histogram control reg across suspend/resume Greg KH
2009-12-17 1:15 ` [80/90] drm/i915: PineView only has LVDS and CRT ports Greg KH
2009-12-17 1:15 ` [81/90] ext3: Fix data / filesystem corruption when write fails to copy data Greg KH
2009-12-17 1:15 ` [82/90] ipvs: zero usvc and udest Greg KH
2009-12-17 1:15 ` [83/90] ipw2100: fix rebooting hang with driver loaded Greg KH
2009-12-17 1:15 ` [84/90] jffs2: Fix long-standing bug with symlink garbage collection Greg KH
2009-12-17 1:15 ` [85/90] matroxfb: fix problems with display stability Greg KH
2009-12-17 1:15 ` [86/90] net: Fix userspace RTM_NEWLINK notifications Greg KH
2009-12-17 1:15 ` [87/90] sysctl_max_map_count should be non-negative Greg KH
2009-12-17 1:15 ` [88/90] thinkpad-acpi: fix default brightness_mode for R50e/R51 Greg KH
2009-12-17 1:15 ` [89/90] thinkpad-acpi: preserve rfkill state across suspend/resume Greg KH
2009-12-17 1:15 ` [90/90] V4L/DVB (13116): gspca - ov519: Webcam 041e:4067 added Greg KH
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=20091217011559.147532119@mini.kroah.org \
--to=gregkh@suse.de \
--cc=akpm@linux-foundation.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=linux-kernel@vger.kernel.org \
--cc=stable-review@kernel.org \
--cc=stable@kernel.org \
--cc=sukadev@linux.vnet.ibm.com \
--cc=torvalds@linux-foundation.org \
/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®