tty: serial: men_z135_uart.c: Fix race between IRQ and set_termios()
authorJohannes Thumshirn <jthumshirn@suse.de>
Thu, 6 Aug 2015 07:16:37 +0000 (09:16 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 15 Aug 2015 00:14:13 +0000 (17:14 -0700)
commit8117e347406278fd399b077add4e638cd017ae2d
treec525404c5329e6d12f82dd5233687708b0a9cde2
parent1d7002777a8fe8188caaa98d4a8eb4ed298fcdae
tty: serial: men_z135_uart.c: Fix race between IRQ and set_termios()

Fix panic caused by a race between men_z135_intr() and men_z135_set_termios().

men_z135_intr() and men_z135_set_termios() both hold the struct uart_port::lock
spinlock, but men_z135_intr() does a spin_lock_irqsave() and
men_z135_set_termios() does a normal spin_lock(), which can lead to a deadlock
when an interrupt is called while the lock is being helt by
men_z135_set_termios().

This was discovered using a insmod, hardware looppback send/receive, rmmod
stress test.

Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de>
Reviewed-by: Peter Hurley <peter@hurleysoftware.com>
Cc: Andreas Werner <andreas.werner@men.de>
Cc: stable@vger.kernel.org # v4.0+
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/men_z135_uart.c