summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOliver Neukum <oneukum@suse.com>2025-04-30 15:48:10 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2025-05-18 08:21:24 +0200
commit1956c3d8783a1a3c102127a0b1a22e4ef7615b59 (patch)
treeecb671277ac19c33abdecef163838bc82010c3b8
parent076ab0631ed4928905736f1701e25f1e722bc086 (diff)
downloadlinux-1956c3d8783a1a3c102127a0b1a22e4ef7615b59.tar.gz
linux-1956c3d8783a1a3c102127a0b1a22e4ef7615b59.tar.bz2
linux-1956c3d8783a1a3c102127a0b1a22e4ef7615b59.zip
USB: usbtmc: use interruptible sleep in usbtmc_read
commit 054c5145540e5ad5b80adf23a5e3e2fc281fb8aa upstream. usbtmc_read() calls usbtmc_generic_read() which uses interruptible sleep, but usbtmc_read() itself uses uninterruptble sleep for mutual exclusion between threads. That makes no sense. Both should use interruptible sleep. Fixes: 5b775f672cc99 ("USB: add USB test and measurement class driver") Cc: stable <stable@kernel.org> Signed-off-by: Oliver Neukum <oneukum@suse.com> Link: https://lore.kernel.org/r/20250430134810.226015-1-oneukum@suse.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/usb/class/usbtmc.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/usb/class/usbtmc.c b/drivers/usb/class/usbtmc.c
index c2e666e82857..e483832b8d3a 100644
--- a/drivers/usb/class/usbtmc.c
+++ b/drivers/usb/class/usbtmc.c
@@ -1380,7 +1380,10 @@ static ssize_t usbtmc_read(struct file *filp, char __user *buf,
if (!buffer)
return -ENOMEM;
- mutex_lock(&data->io_mutex);
+ retval = mutex_lock_interruptible(&data->io_mutex);
+ if (retval < 0)
+ goto exit_nolock;
+
if (data->zombie) {
retval = -ENODEV;
goto exit;
@@ -1503,6 +1506,7 @@ static ssize_t usbtmc_read(struct file *filp, char __user *buf,
exit:
mutex_unlock(&data->io_mutex);
+exit_nolock:
kfree(buffer);
return retval;
}