Details

[Home]

Issue of the Implementation # L0192

Brief

sound/oss: deadlock in sequencer_ioctl(SNDCTL_SEQ_OUTOFBAND)

Detailed Description

A deadlock can be initiated by userspace via ioctl(SNDCTL_SEQ_OUTOFBAND) on /dev/sequencer with TMR_ECHO midi event. In this case the control flow is:

sound_ioctl()
-> case SND_DEV_SEQ:
   case SND_DEV_SEQ2:
     sequencer_ioctl()
     -> case SNDCTL_SEQ_OUTOFBAND:
          spin_lock_irqsave(&lock,flags);
          play_event();
          -> case EV_TIMING:
               seq_timing_event()
               -> case TMR_ECHO:
                    seq_copy_to_input()
                    -> spin_lock_irqsave(&lock,flags);
It seems that spin_lock_irqsave() around play_event() is not necessary, because the only other call location in seq_startplay() makes the call without acquiring spinlock.

Component

linux-kernel 4.0

Accepted

https://marc.info/?l=linux-kernel&m=142931483001579&w=2
commit

Status

Fixed in kernel 4.1-rc1

[Home]