linux/drivers/char
Alan Cox aef29bc260 tty: Fix the leak in tty_ldisc_release
Currently we reinit the ldisc on final tty close which is what the old code
did to ensure that if the device retained its termios settings then it had the
right ldisc. tty_ldisc_reinit does that but also leaves us with the reset
ldisc reference which is then leaked.

At this point we know the port will be recycled so we can kill the ldisc
off completely rather than try and add another ldisc free up when the kref
count hits zero.

At this point it is safe to keep the ldisc closed as tty_ldisc waiting
methods are only used from the user side, and as the final close we are
the last such reference. Interrupt/driver side methods will always use the
non wait version and get back a NULL.

Found with kmemleak and investigated/identified by Catalin Marinas.

Signed-off-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2009-06-29 09:33:26 -07:00
..
agp Merge branch 'drm-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6 2009-06-20 10:15:30 -07:00
hw_random MIPS: hwrng: Add TX4939 RNG driver 2009-06-17 11:06:27 +01:00
ip2 tty: rewrite the ldisc locking 2009-06-11 08:51:01 -07:00
ipmi ipmi: remove driver_data direct access of struct device 2009-06-15 21:30:27 -07:00
mwave mwave: struct device - replace bus_id with dev_name(), dev_set_name() 2009-01-06 10:44:38 -08:00
pcmcia pcmcia/cm4000: fix lock imbalance 2009-06-22 11:32:24 -07:00
rio rio: addition has higher precedence than ?: 2009-04-06 14:36:43 -07:00
tpm TPM: get_event_name stack corruption 2009-05-20 08:30:05 +10:00
xilinx_hwicap
.gitignore
amiserial.c trivial: typo (en|dis|avail|remove)bale -> (en|dis|avail|remove)able 2009-06-12 18:01:45 +02:00
apm-emulation.c
applicom.c applicom: Auto-load applicom module when device opened. 2009-04-06 14:36:30 -07:00
applicom.h
bfin-otp.c
bfin_jtag_comm.c bfin_jtag_comm: clean up printk usage 2009-06-22 11:32:23 -07:00
briq_panel.c
bsr.c powerpc/BSR: Fix BSR to allow mmap of small BSR on 64k kernel 2009-06-26 14:37:26 +10:00
cd1865.h
ChangeLog
consolemap.c consolemap: indentation & braces disagree - reindent 2009-01-06 15:59:30 -08:00
cp437.uni
cs5535_gpio.c
cyclades.c tty: rewrite the ldisc locking 2009-06-11 08:51:01 -07:00
defkeymap.c_shipped
defkeymap.map
digi1.h
digiFep1.h
digiPCI.h
ds1302.c
ds1620.c
dsp56k.c
dtlk.c dtlk: off by one in {read,write}_tts() 2009-06-19 16:46:06 -07:00
efirtc.c
epca.c tty: rewrite the ldisc locking 2009-06-11 08:51:01 -07:00
epca.h
epcaconfig.h
esp.c esp: fix section mismatch warning 2009-04-07 08:31:03 -07:00
generic_nvram.c
generic_serial.c
genrtc.c
hangcheck-timer.c
hpet.c irq: change ACPI GSI APIs to also take a device argument 2009-04-28 12:21:17 +02:00
hvc_beat.c powerpc/cell: Use correct types in beat files 2009-01-08 16:25:16 +11:00
hvc_console.c hvc_console: Remove tty->low_latency 2009-01-16 16:15:16 +11:00
hvc_console.h
hvc_irq.c hvc_console: Call free_irq() only if request_irq() was successful 2009-01-13 14:48:01 +11:00
hvc_iseries.c drivers/hvc: Add missing __devexit_p() 2009-06-16 14:15:44 +10:00
hvc_iucv.c [S390] pm: hvc_iucv power management callbacks 2009-06-16 10:31:19 +02:00
hvc_rtas.c
hvc_udbg.c
hvc_vio.c drivers/hvc: Add missing __devexit_p() 2009-06-16 14:15:44 +10:00
hvc_xen.c
hvcs.c Merge commit 'origin/master' into next 2009-06-18 11:16:55 +10:00
hvsi.c hvc_console: Remove tty->low_latency on pseries backends 2009-03-11 10:44:26 +11:00
i8k.c i8k: Add Dell Vostro systems 2009-01-02 10:28:32 -08:00
isicom.c Char: isicom: fix build warning 2009-06-18 13:03:54 -07:00
istallion.c istallion: add missing __devexit marking 2009-06-19 16:46:06 -07:00
Kconfig drivers/char/rtc: disable legacy RTC driver on Blackfin systems 2009-06-18 13:03:43 -07:00
keyboard.c Input: keyboard - remove warning about raw mode not supported 2009-04-20 21:21:24 -07:00
lp.c
Makefile tty: bfin_jtag_comm: emulate a TTY over the Blackfin EMUDAT/JTAG interface 2009-06-11 08:51:06 -07:00
mbcs.c
mbcs.h
mem.c drivers/char/mem.c: memory_open() cleanup: lookup minor device number from devlist 2009-06-18 13:03:54 -07:00
misc.c Driver Core: misc: add nodename support for misc devices. 2009-06-15 21:30:25 -07:00
mmtimer.c
moxa.c Revert "char: moxa, prevent opening unavailable ports" 2009-06-22 11:24:43 -07:00
moxa.h
mspec.c
mxser.c Remove low_latency flag setting from nozomi and mxser drivers 2009-06-24 09:55:50 -07:00
mxser.h
n_hdlc.c tty: n_hdlc add buffer flushing 2009-06-22 11:32:24 -07:00
n_r3964.c n_r3964: fix lock imbalance 2009-06-22 11:32:23 -07:00
n_tty.c tty: simplify buffer allocator cleanups 2009-06-11 08:51:02 -07:00
nozomi.c Remove low_latency flag setting from nozomi and mxser drivers 2009-06-24 09:55:50 -07:00
nsc_gpio.c
nvram.c
nwbutton.c
nwbutton.h
nwflash.c
pc8736x_gpio.c
ppdev.c ppdev: reduce kernel log spam 2009-06-18 13:03:54 -07:00
ps3flash.c ps3flash: Always read chunks of 256 KiB, and cache them 2009-06-15 16:47:27 +10:00
pty.c pty: Narrow the race on ldisc locking 2009-06-16 12:01:16 -07:00
random.c Avoid ICE in get_random_int() with gcc-3.4.5 2009-05-19 11:25:35 -07:00
raw.c Driver Core: raw: add nodename for raw devices 2009-06-15 21:30:26 -07:00
riscom8.c riscom8: Auto-load riscom8 module when device opened. 2009-04-06 14:36:31 -07:00
riscom8.h
riscom8_reg.h
rocket.c rocket: fix test_bit parameters 2009-06-11 08:50:58 -07:00
rocket.h
rocket_int.h
rtc.c RTC: Remove the BKL. 2009-01-08 16:44:03 -07:00
scc.h m68k: atari - Rename "mfp" to "st_mfp" 2009-02-22 09:23:02 -08:00
scx200_gpio.c
selection.c tty: rewrite the ldisc locking 2009-06-11 08:51:01 -07:00
ser_a2232.c m68k: ser_a2232 - Kill warn_unused_result warnings 2009-01-12 20:56:39 +01:00
ser_a2232.h
ser_a2232fw.ax
ser_a2232fw.h
serial167.c
snsc.c
snsc.h
snsc_event.c
sonypi.c Rationalize fasync return values 2009-03-16 08:34:35 -06:00
specialix.c specialix: Auto-load specialix module when device opened. 2009-04-06 14:36:31 -07:00
specialix_io8.h
stallion.c tty: Add carrier processing on close to the tty_port core 2009-06-11 08:50:56 -07:00
sx.c sx.c: avoid referencing freed memory if copy_from_user() fails 2009-02-20 17:57:49 -08:00
sx.h
sxboards.h
sxwindow.h
synclink.c tty: Add carrier processing on close to the tty_port core 2009-06-11 08:50:56 -07:00
synclink_gt.c synclink_gt: fix transmit race and timeout 2009-06-24 09:55:50 -07:00
synclinkmp.c tty: Add carrier processing on close to the tty_port core 2009-06-11 08:50:56 -07:00
sysrq.c kexec: sysrq: simplify sysrq-c handler 2009-06-18 13:03:59 -07:00
tb0219.c
tlclk.c
toshiba.c
tty_audit.c tty: remove buffer special casing 2009-06-11 08:51:02 -07:00
tty_buffer.c
tty_io.c tty: fix sanity check 2009-06-16 12:01:16 -07:00
tty_ioctl.c tty: fix unused warning when TCGETX is not defined 2009-06-16 12:01:16 -07:00
tty_ldisc.c tty: Fix the leak in tty_ldisc_release 2009-06-29 09:33:26 -07:00
tty_port.c tty: fix tty_port_block_til_ready waiting 2009-06-24 09:55:50 -07:00
vc_screen.c vcs: hook sysfs devices into object lifetime instead of "binding" 2009-03-24 16:38:26 -07:00
viotape.c tape: beyond ARRAY_SIZE of viocd_diskinfo 2009-06-02 10:32:34 +10:00
virtio_console.c virtio: find_vqs/del_vqs virtio operations 2009-06-12 22:16:36 +09:30
vme_scc.c m68k: vme_scc - Kill warn_unused_result warnings 2009-01-12 20:56:38 +01:00
vr41xx_giu.c
vt.c console: make blank timeout value a boot option 2009-06-16 19:47:52 -07:00
vt_ioctl.c vt_ioctl: fix lock imbalance 2009-06-22 11:32:24 -07:00