]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob
b7ceb46d46f4a974bcf2a4c16eff8762eeea7b8d
[thirdparty/kernel/stable-queue.git] /
1 From 747d1f076de5a60770011f6e512de43298ec64cb Mon Sep 17 00:00:00 2001
2 From: Takashi Sakamoto <o-takashi@sakamocchi.jp>
3 Date: Mon, 13 Jan 2020 17:57:19 +0900
4 Subject: ALSA: firewire-tascam: fix corruption due to spin lock without restoration in SoftIRQ context
5
6 From: Takashi Sakamoto <o-takashi@sakamocchi.jp>
7
8 commit 747d1f076de5a60770011f6e512de43298ec64cb upstream.
9
10 ALSA firewire-tascam driver can bring corruption due to spin lock without
11 restoration of IRQ flag in SoftIRQ context. This commit fixes the bug.
12
13 Cc: Scott Bahling <sbahling@suse.com>
14 Cc: <stable@vger.kernel.org> # v4.21
15 Fixes: d7167422433c ("ALSA: firewire-tascam: queue events for change of control surface")
16 Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
17 Link: https://lore.kernel.org/r/20200113085719.26788-1-o-takashi@sakamocchi.jp
18 Signed-off-by: Takashi Iwai <tiwai@suse.de>
19 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
20
21 ---
22 sound/firewire/tascam/amdtp-tascam.c | 5 +++--
23 1 file changed, 3 insertions(+), 2 deletions(-)
24
25 --- a/sound/firewire/tascam/amdtp-tascam.c
26 +++ b/sound/firewire/tascam/amdtp-tascam.c
27 @@ -157,14 +157,15 @@ static void read_status_messages(struct
28 if ((before ^ after) & mask) {
29 struct snd_firewire_tascam_change *entry =
30 &tscm->queue[tscm->push_pos];
31 + unsigned long flag;
32
33 - spin_lock_irq(&tscm->lock);
34 + spin_lock_irqsave(&tscm->lock, flag);
35 entry->index = index;
36 entry->before = before;
37 entry->after = after;
38 if (++tscm->push_pos >= SND_TSCM_QUEUE_COUNT)
39 tscm->push_pos = 0;
40 - spin_unlock_irq(&tscm->lock);
41 + spin_unlock_irqrestore(&tscm->lock, flag);
42
43 wake_up(&tscm->hwdep_wait);
44 }