lkml.org 
[lkml]   [2020]   [Oct]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 104/264] ALSA: seq: oss: Avoid mutex lock for a long-time ioctl
    Date
    From: Takashi Iwai <tiwai@suse.de>

    [ Upstream commit 2759caad2600d503c3b0ed800e7e03d2cd7a4c05 ]

    Recently we applied a fix to cover the whole OSS sequencer ioctls with
    the mutex for dealing with the possible races. This works fine in
    general, but in theory, this may lead to unexpectedly long stall if an
    ioctl like SNDCTL_SEQ_SYNC is issued and an event with the far future
    timestamp was queued.

    For fixing such a potential stall, this patch changes the mutex lock
    applied conditionally excluding such an ioctl command. Also, change
    the mutex_lock() with the interruptible version for user to allow
    escaping from the big-hammer mutex.

    Fixes: 80982c7e834e ("ALSA: seq: oss: Serialize ioctls")
    Suggested-by: Pavel Machek <pavel@ucw.cz>
    Link: https://lore.kernel.org/r/20200922083856.28572-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    sound/core/seq/oss/seq_oss.c | 7 +++++--
    1 file changed, 5 insertions(+), 2 deletions(-)

    diff --git a/sound/core/seq/oss/seq_oss.c b/sound/core/seq/oss/seq_oss.c
    index ed5bca0db3e73..f4a9d9972330b 100644
    --- a/sound/core/seq/oss/seq_oss.c
    +++ b/sound/core/seq/oss/seq_oss.c
    @@ -187,9 +187,12 @@ odev_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
    if (snd_BUG_ON(!dp))
    return -ENXIO;

    - mutex_lock(&register_mutex);
    + if (cmd != SNDCTL_SEQ_SYNC &&
    + mutex_lock_interruptible(&register_mutex))
    + return -ERESTARTSYS;
    rc = snd_seq_oss_ioctl(dp, cmd, arg);
    - mutex_unlock(&register_mutex);
    + if (cmd != SNDCTL_SEQ_SYNC)
    + mutex_unlock(&register_mutex);
    return rc;
    }

    --
    2.25.1


    \
     
     \ /
      Last update: 2020-10-27 18:57    [W:4.074 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site