]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
usb: chaoskey: fix locking for O_NONBLOCK
authorOliver Neukum <oneukum@suse.com>
Thu, 30 Oct 2025 09:39:06 +0000 (10:39 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 21 Nov 2025 14:10:29 +0000 (15:10 +0100)
A failure to take a lock with O_NONBLOCK needs to result
in -EAGAIN. Change it.

Fixes: 66e3e591891da ("usb: Add driver for Altus Metrum ChaosKey device (v2)")
Signed-off-by: Oliver Neukum <oneukum@suse.com>
Link: https://patch.msgid.link/20251030093918.2248104-1-oneukum@suse.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/misc/chaoskey.c

index 225863321dc4795edaaeb60d76a44fc76633b3bb..45cff32656c6e3e6b0f682a762d3451bf10192d1 100644 (file)
@@ -444,9 +444,19 @@ static ssize_t chaoskey_read(struct file *file,
                        goto bail;
                mutex_unlock(&dev->rng_lock);
 
-               result = mutex_lock_interruptible(&dev->lock);
-               if (result)
-                       goto bail;
+               if (file->f_flags & O_NONBLOCK) {
+                       result = mutex_trylock(&dev->lock);
+                       if (result == 0) {
+                               result = -EAGAIN;
+                               goto bail;
+                       } else {
+                               result = 0;
+                       }
+               } else {
+                       result = mutex_lock_interruptible(&dev->lock);
+                       if (result)
+                               goto bail;
+               }
                if (dev->valid == dev->used) {
                        result = _chaoskey_fill(dev);
                        if (result < 0) {