linux/include
Herton R. Krzesinski 38bdf7e3fb pty: make sure super_block is still valid in final /dev/tty close
[ Upstream commit 1f55c718c2 ]

Considering current pty code and multiple devpts instances, it's possible
to umount a devpts file system while a program still has /dev/tty opened
pointing to a previosuly closed pty pair in that instance. In the case all
ptmx and pts/N files are closed, umount can be done. If the program closes
/dev/tty after umount is done, devpts_kill_index will use now an invalid
super_block, which was already destroyed in the umount operation after
running ->kill_sb. This is another "use after free" type of issue, but now
related to the allocated super_block instance.

To avoid the problem (warning at ida_remove and potential crashes) for
this specific case, I added two functions in devpts which grabs additional
references to the super_block, which pty code now uses so it makes sure
the super block structure is still valid until pty shutdown is done.
I also moved the additional inode references to the same functions, which
also covered similar case with inode being freed before /dev/tty final
close/shutdown.

Signed-off-by: Herton R. Krzesinski <herton@redhat.com>
Cc: stable@vger.kernel.org # 2.6.29+
Reviewed-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
History 2016-02-28 00:09:50 -05:00
..
acpi ACPICA: Tables: Enable default 64-bit FADT addresses favor 2015-08-03 09:29:14 -07:00
asm-generic cputime: Prevent 32bit overflow in time[val|spec]_to_cputime() 2016-02-28 00:04:24 -05:00
clocksource time: move the timecounter/cyclecounter code into its own file. 2014-12-30 18:29:25 -05:00
crypto crypto: af_alg - Allow af_af_alg_release_parent to be called on nokey path 2016-02-03 16:23:19 -05:00
drm drm/dp/mst: Remove port after removing connector. 2016-02-15 15:45:35 -05:00
dt-bindings Merge branch 'for-linus' of git://git.infradead.org/users/vkoul/slave-dma 2015-04-24 09:49:37 -07:00
keys KEYS: Restore partial ID matching functionality for asymmetric keys 2014-10-06 15:21:05 +01:00
kvm KVM/ARM changes for v4.1: 2015-04-07 18:09:20 +02:00
linux pty: make sure super_block is still valid in final /dev/tty close 2016-02-28 00:09:50 -05:00
math-emu math-emu: fix floating-point to integer overflow detection 2014-01-07 18:36:24 -06:00
media Merge branch 'patchwork' into v4l_for_linus 2015-04-21 06:12:35 -03:00
memory ddr: add LPDDR2 data from JESD209-2 2012-05-02 00:04:06 -07:00
misc cxl: Add new header for call backs and structs 2014-10-08 20:15:43 +11:00
net tcp/dccp: fix old style declarations 2016-01-31 11:23:37 -08:00
pcmcia pcmcia/ds.h: introduce helper for pcmcia_driver module boilerplate 2013-03-15 12:26:03 -07:00
ras PCI/AER: Rename PCI_ERR_UNC_TRAIN to PCI_ERR_UNC_UND 2014-09-25 09:42:40 -06:00
rdma IB/core: Fix unaligned accesses 2015-05-05 13:21:27 -04:00
rxrpc RxRPC: Handle VERSION Rx protocol packets 2015-04-01 16:31:26 +01:00
scsi Revert "libata-eh: Set 'information' field for autosense" 2015-09-13 09:07:46 -07:00
soc iommu/tegra-smmu: Parameterize number of TLB lines 2015-09-29 19:26:14 +02:00
sound ALSA: rawmidi: Make snd_rawmidi_transmit() race-free 2016-02-15 15:45:31 -05:00
target target: Remove first argument of target_{get,put}_sess_cmd() 2016-02-28 00:09:36 -05:00
trace net: sunrpc: fix tracepoint Warning: unknown op '->' 2015-09-29 19:26:10 +02:00
uapi PCI: Restore PCI_MSIX_FLAGS_BIRMASK definition 2015-08-16 20:52:22 -07:00
video fbdev changes for v4.1 2015-04-20 15:16:25 -07:00
xen x86/xen: Support kexec/kdump in HVM guests by doing a soft reset 2015-10-22 14:43:14 -07:00
Kbuild UAPI: remove empty Kbuild files 2013-04-30 17:04:09 -07:00