diff options
| author | Oliver Neukum <oneukum@suse.com> | 2025-04-30 15:48:10 +0200 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2025-05-18 08:21:24 +0200 |
| commit | 1956c3d8783a1a3c102127a0b1a22e4ef7615b59 (patch) | |
| tree | ecb671277ac19c33abdecef163838bc82010c3b8 | |
| parent | 076ab0631ed4928905736f1701e25f1e722bc086 (diff) | |
| download | linux-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.c | 6 |
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; } |
