linux/drivers/net/irda
Alexey Khoroshilov e8684c8877 irda: ali-ircc: Fix deadlock in ali_ircc_sir_change_speed()
ali_ircc_sir_change_speed() is always called with self->lock held,
so acquiring the lock inside it leads to unavoidable deadlock.

Call graph:
ali_ircc_sir_change_speed() is called from ali_ircc_change_speed()
  ali_ircc_fir_hard_xmit() under spin_lock_irqsave(&self->lock, flags);
  ali_ircc_sir_hard_xmit() under spin_lock_irqsave(&self->lock, flags);
  ali_ircc_net_ioctl() under spin_lock_irqsave(&self->lock, flags);
  ali_ircc_dma_xmit_complete()
    ali_ircc_fir_interrupt()
      ali_ircc_interrupt() under spin_lock(&self->lock);
  ali_ircc_sir_write_wakeup()
    ali_ircc_sir_interrupt()
      ali_ircc_interrupt() under spin_lock(&self->lock);

The patch removes spin_lock/unlock from ali_ircc_sir_change_speed().

Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Signed-off-by: David S. Miller <davem@davemloft.net>
2015-09-11 16:18:33 -07:00
..
act200l-sir.c
actisys-sir.c
ali-ircc.c irda: ali-ircc: Fix deadlock in ali_ircc_sir_change_speed() 2015-09-11 16:18:33 -07:00
ali-ircc.h irda: ali-ircc: Replace timeval with ktime_t 2015-01-11 21:39:40 -05:00
au1k_ir.c irda: Removed all unused timeval variables 2015-01-11 21:39:40 -05:00
bfin_sir.c
bfin_sir.h
donauboe.c
donauboe.h
esi-sir.c
girbil-sir.c
irda-usb.c irda: irda-usb: use msecs_to_jiffies for conversions 2015-05-25 17:39:21 -04:00
irda-usb.h irda: irda-usb: Replace timeval with ktime_t 2015-01-11 21:39:40 -05:00
irtty-sir.c
irtty-sir.h
Kconfig
kingsun-sir.c irda: Removed all unused timeval variables 2015-01-11 21:39:40 -05:00
ks959-sir.c irda: Removed all unused timeval variables 2015-01-11 21:39:40 -05:00
ksdazzle-sir.c
litelink-sir.c
ma600-sir.c
Makefile
mcp2120-sir.c
mcs7780.c irda: Removed all unused timeval variables 2015-01-11 21:39:40 -05:00
mcs7780.h irda: Removed all unused timeval variables 2015-01-11 21:39:40 -05:00
nsc-ircc.c irda: nsc-ircc: Replace timeval with ktime_t 2015-01-11 21:39:40 -05:00
nsc-ircc.h irda: nsc-ircc: Replace timeval with ktime_t 2015-01-11 21:39:40 -05:00
old_belkin-sir.c
pxaficp_ir.c
sa1100_ir.c
sh_irda.c
sh_sir.c
sir_dev.c
sir_dongle.c
sir-dev.h
smsc-ircc2.c
smsc-ircc2.h
smsc-sio.h
stir4200.c irda: stir4200: Replace timeval with ktime_t 2015-01-11 21:39:40 -05:00
tekram-sir.c
toim3232-sir.c
via-ircc.c
via-ircc.h irda: Removed all unused timeval variables 2015-01-11 21:39:40 -05:00
vlsi_ir.c irda: vlsi_ir: Replace timeval with ktime_t 2015-01-11 21:39:40 -05:00
vlsi_ir.h irda: vlsi_ir: Replace timeval with ktime_t 2015-01-11 21:39:40 -05:00
w83977af_ir.c
w83977af_ir.h
w83977af.h