From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org,
syzbot+619d9f40141d826b097e@syzkaller.appspotmail.com,
Takashi Iwai <tiwai@suse.de>
Subject: [PATCH 4.4 10/22] ALSA: virmidi: Fix too long output trigger loop
Date: Tue, 21 Aug 2018 08:21:36 +0200 [thread overview]
Message-ID: <20180821055139.976740962@linuxfoundation.org> (raw)
In-Reply-To: <20180821055139.462620042@linuxfoundation.org>
4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Iwai <tiwai@suse.de>
commit 50e9ffb1996a5d11ff5040a266585bad4ceeca0a upstream.
The virmidi output trigger tries to parse the all available bytes and
process sequencer events as much as possible. In a normal situation,
this is supposed to be relatively short, but a program may give a huge
buffer and it'll take a long time in a single spin lock, which may
eventually lead to a soft lockup.
This patch simply adds a workaround, a cond_resched() call in the loop
if applicable. A better solution would be to move the event processor
into a work, but let's put a duct-tape quickly at first.
Reported-and-tested-by: Dae R. Jeong <threeearcat@gmail.com>
Reported-by: syzbot+619d9f40141d826b097e@syzkaller.appspotmail.com
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
sound/core/seq/seq_virmidi.c | 10 ++++++++++
1 file changed, 10 insertions(+)
--- a/sound/core/seq/seq_virmidi.c
+++ b/sound/core/seq/seq_virmidi.c
@@ -163,6 +163,7 @@ static void snd_virmidi_output_trigger(s
int count, res;
unsigned char buf[32], *pbuf;
unsigned long flags;
+ bool check_resched = !in_atomic();
if (up) {
vmidi->trigger = 1;
@@ -200,6 +201,15 @@ static void snd_virmidi_output_trigger(s
vmidi->event.type = SNDRV_SEQ_EVENT_NONE;
}
}
+ if (!check_resched)
+ continue;
+ /* do temporary unlock & cond_resched() for avoiding
+ * CPU soft lockup, which may happen via a write from
+ * a huge rawmidi buffer
+ */
+ spin_unlock_irqrestore(&substream->runtime->lock, flags);
+ cond_resched();
+ spin_lock_irqsave(&substream->runtime->lock, flags);
}
out:
spin_unlock_irqrestore(&substream->runtime->lock, flags);
next prev parent reply other threads:[~2018-08-21 6:34 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-21 6:21 [PATCH 4.4 00/22] 4.4.151-stable review Greg Kroah-Hartman
2018-08-21 6:21 ` [PATCH 4.4 01/22] dccp: fix undefined behavior with cwnd shift in ccid2_cwnd_restart() Greg Kroah-Hartman
2018-08-21 6:21 ` [PATCH 4.4 02/22] l2tp: use sk_dst_check() to avoid race on sk->sk_dst_cache Greg Kroah-Hartman
2018-08-21 6:21 ` [PATCH 4.4 03/22] llc: use refcount_inc_not_zero() for llc_sap_find() Greg Kroah-Hartman
2018-08-21 6:21 ` [PATCH 4.4 04/22] net_sched: Fix missing res info when create new tc_index filter Greg Kroah-Hartman
2018-08-21 6:21 ` [PATCH 4.4 05/22] vsock: split dwork to avoid reinitializations Greg Kroah-Hartman
2018-08-21 6:21 ` [PATCH 4.4 06/22] net_sched: fix NULL pointer dereference when delete tcindex filter Greg Kroah-Hartman
2018-08-21 6:21 ` [PATCH 4.4 07/22] ALSA: hda - Sleep for 10ms after entering D3 on Conexant codecs Greg Kroah-Hartman
2018-08-21 6:21 ` [PATCH 4.4 08/22] ALSA: hda - Turn CX8200 into D3 as well upon reboot Greg Kroah-Hartman
2018-08-21 6:21 ` [PATCH 4.4 09/22] ALSA: vx222: Fix invalid endian conversions Greg Kroah-Hartman
2018-08-21 6:21 ` Greg Kroah-Hartman [this message]
2018-08-21 6:21 ` [PATCH 4.4 11/22] ALSA: cs5535audio: Fix invalid endian conversion Greg Kroah-Hartman
2018-08-21 6:21 ` [PATCH 4.4 12/22] ALSA: hda: Correct Asrock B85M-ITX power_save blacklist entry Greg Kroah-Hartman
2018-08-21 6:21 ` [PATCH 4.4 13/22] ALSA: memalloc: Dont exceed over the requested size Greg Kroah-Hartman
2018-08-21 6:21 ` [PATCH 4.4 14/22] ALSA: vxpocket: Fix invalid endian conversions Greg Kroah-Hartman
2018-08-21 6:21 ` [PATCH 4.4 15/22] USB: serial: sierra: fix potential deadlock at close Greg Kroah-Hartman
2018-08-21 6:21 ` [PATCH 4.4 16/22] USB: option: add support for DW5821e Greg Kroah-Hartman
2018-08-21 6:21 ` [PATCH 4.4 17/22] ACPI: save NVS memory for Lenovo G50-45 Greg Kroah-Hartman
2018-08-21 6:21 ` [PATCH 4.4 18/22] ACPI / PM: save NVS memory for ASUS 1025C laptop Greg Kroah-Hartman
2018-08-21 6:21 ` [PATCH 4.4 19/22] serial: 8250_dw: always set baud rate in dw8250_set_termios Greg Kroah-Hartman
2018-08-21 6:21 ` [PATCH 4.4 20/22] x86/mm: Simplify p[g4um]d_page() macros Greg Kroah-Hartman
2018-08-21 6:21 ` Greg Kroah-Hartman
2018-08-21 6:21 ` [PATCH 4.4 21/22] Bluetooth: avoid killing an already killed socket Greg Kroah-Hartman
2018-08-21 6:21 ` [PATCH 4.4 22/22] isdn: Disable IIOCDBGVAR Greg Kroah-Hartman
2018-08-21 14:55 ` [PATCH 4.4 00/22] 4.4.151-stable review Guenter Roeck
2018-08-21 16:58 ` Naresh Kamboju
2018-08-21 22:01 ` Shuah Khan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180821055139.976740962@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=syzbot+619d9f40141d826b097e@syzkaller.appspotmail.com \
--cc=tiwai@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.