diff options
| author | Oliver Neukum <oneukum@suse.com> | 2025-10-30 12:39:06 +0300 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2025-11-21 17:10:29 +0300 |
| commit | a2fa8a12e6bc9d89c0505b8dd7ae38ec173d25de (patch) | |
| tree | dcfc9426ed9d545e3dc1757f694cdd0641204cac | |
| parent | 7ebbd0a5a9e2e94e77fed3f324978e8bc4721f45 (diff) | |
| download | linux-a2fa8a12e6bc9d89c0505b8dd7ae38ec173d25de.tar.xz | |
usb: chaoskey: fix locking for O_NONBLOCK
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>
| -rw-r--r-- | drivers/usb/misc/chaoskey.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/usb/misc/chaoskey.c b/drivers/usb/misc/chaoskey.c index 225863321dc4..45cff32656c6 100644 --- a/drivers/usb/misc/chaoskey.c +++ b/drivers/usb/misc/chaoskey.c @@ -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) { |
