34
34
#define YUREX_BUF_SIZE 8
35
35
#define YUREX_WRITE_TIMEOUT (HZ*2)
36
36
37
- #define MAX_S64_STRLEN 20 /* {-}922337203685477580{7,8} */
38
-
39
37
/* table of devices that work with this driver */
40
38
static struct usb_device_id yurex_table [] = {
41
39
{ USB_DEVICE (YUREX_VENDOR_ID , YUREX_PRODUCT_ID ) },
@@ -403,7 +401,8 @@ static ssize_t yurex_read(struct file *file, char __user *buffer, size_t count,
403
401
{
404
402
struct usb_yurex * dev ;
405
403
int len = 0 ;
406
- char in_buffer [MAX_S64_STRLEN ];
404
+ char in_buffer [20 ];
405
+ unsigned long flags ;
407
406
408
407
dev = file -> private_data ;
409
408
@@ -413,16 +412,14 @@ static ssize_t yurex_read(struct file *file, char __user *buffer, size_t count,
413
412
return - ENODEV ;
414
413
}
415
414
416
- if (WARN_ON_ONCE (dev -> bbu > S64_MAX || dev -> bbu < S64_MIN )) {
417
- mutex_unlock (& dev -> io_mutex );
418
- return - EIO ;
419
- }
420
-
421
- spin_lock_irq (& dev -> lock );
422
- scnprintf (in_buffer , MAX_S64_STRLEN , "%lld\n" , dev -> bbu );
423
- spin_unlock_irq (& dev -> lock );
415
+ spin_lock_irqsave (& dev -> lock , flags );
416
+ len = snprintf (in_buffer , 20 , "%lld\n" , dev -> bbu );
417
+ spin_unlock_irqrestore (& dev -> lock , flags );
424
418
mutex_unlock (& dev -> io_mutex );
425
419
420
+ if (WARN_ON_ONCE (len >= sizeof (in_buffer )))
421
+ return - EIO ;
422
+
426
423
return simple_read_from_buffer (buffer , count , ppos , in_buffer , len );
427
424
}
428
425
0 commit comments