This is a note to let you know that I've just added the patch titled ALSA: firewire: Clean up a locking issue in copy_resp_to_buf() to the 5.9-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: alsa-firewire-clean-up-a-locking-issue-in-copy_resp_to_buf.patch and it can be found in the queue-5.9 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From 02a9c6ee4183af2e438454c55098b828a96085fb Mon Sep 17 00:00:00 2001 From: Dan Carpenter <dan.carpenter@xxxxxxxxxx> Date: Fri, 13 Nov 2020 13:12:41 +0300 Subject: ALSA: firewire: Clean up a locking issue in copy_resp_to_buf() From: Dan Carpenter <dan.carpenter@xxxxxxxxxx> commit 02a9c6ee4183af2e438454c55098b828a96085fb upstream. The spin_lock/unlock_irq() functions cannot be nested. The problem is that presumably we would want the IRQs to be re-enabled on the second call the spin_unlock_irq() but instead it will be enabled at the first call so IRQs will be enabled earlier than expected. In this situation the copy_resp_to_buf() function is only called from one function and it is called with IRQs disabled. We can just use the regular spin_lock/unlock() functions. Fixes: 555e8a8f7f14 ("ALSA: fireworks: Add command/response functionality into hwdep interface") Signed-off-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx> Acked-by: Takashi Sakamoto <o-takashi@xxxxxxxxxxxxx> Cc: <stable@xxxxxxxxxxxxxxx> Link: https://lore.kernel.org/r/20201113101241.GB168908@mwanda Signed-off-by: Takashi Iwai <tiwai@xxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- sound/firewire/fireworks/fireworks_transaction.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --- a/sound/firewire/fireworks/fireworks_transaction.c +++ b/sound/firewire/fireworks/fireworks_transaction.c @@ -123,7 +123,7 @@ copy_resp_to_buf(struct snd_efw *efw, vo t = (struct snd_efw_transaction *)data; length = min_t(size_t, be32_to_cpu(t->length) * sizeof(u32), length); - spin_lock_irq(&efw->lock); + spin_lock(&efw->lock); if (efw->push_ptr < efw->pull_ptr) capacity = (unsigned int)(efw->pull_ptr - efw->push_ptr); @@ -190,7 +190,7 @@ handle_resp_for_user(struct fw_card *car copy_resp_to_buf(efw, data, length, rcode); end: - spin_unlock_irq(&instances_lock); + spin_unlock(&instances_lock); } static void Patches currently in stable-queue which might be from dan.carpenter@xxxxxxxxxx are queue-5.9/dmaengine-fix-error-codes-in-channel_register.patch queue-5.9/netlabel-fix-an-uninitialized-warning-in-netlbl_unlabel_staticlist.patch queue-5.9/alsa-mixart-fix-mutex-deadlock.patch queue-5.9/alsa-firewire-clean-up-a-locking-issue-in-copy_resp_to_buf.patch queue-5.9/input-adxl34x-clean-up-a-data-type-in-adxl34x_probe.patch