diff options
Diffstat (limited to 'drivers/usb/misc/yurex.c')
-rw-r--r-- | drivers/usb/misc/yurex.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/usb/misc/yurex.c b/drivers/usb/misc/yurex.c index 3be40eaa1ac9..6d9fd5f64903 100644 --- a/drivers/usb/misc/yurex.c +++ b/drivers/usb/misc/yurex.c | |||
@@ -413,6 +413,9 @@ static ssize_t yurex_read(struct file *file, char __user *buffer, size_t count, | |||
413 | spin_unlock_irqrestore(&dev->lock, flags); | 413 | spin_unlock_irqrestore(&dev->lock, flags); |
414 | mutex_unlock(&dev->io_mutex); | 414 | mutex_unlock(&dev->io_mutex); |
415 | 415 | ||
416 | if (WARN_ON_ONCE(len >= sizeof(in_buffer))) | ||
417 | return -EIO; | ||
418 | |||
416 | return simple_read_from_buffer(buffer, count, ppos, in_buffer, len); | 419 | return simple_read_from_buffer(buffer, count, ppos, in_buffer, len); |
417 | } | 420 | } |
418 | 421 | ||
@@ -421,13 +424,13 @@ static ssize_t yurex_write(struct file *file, const char __user *user_buffer, | |||
421 | { | 424 | { |
422 | struct usb_yurex *dev; | 425 | struct usb_yurex *dev; |
423 | int i, set = 0, retval = 0; | 426 | int i, set = 0, retval = 0; |
424 | char buffer[16]; | 427 | char buffer[16 + 1]; |
425 | char *data = buffer; | 428 | char *data = buffer; |
426 | unsigned long long c, c2 = 0; | 429 | unsigned long long c, c2 = 0; |
427 | signed long timeout = 0; | 430 | signed long timeout = 0; |
428 | DEFINE_WAIT(wait); | 431 | DEFINE_WAIT(wait); |
429 | 432 | ||
430 | count = min(sizeof(buffer), count); | 433 | count = min(sizeof(buffer) - 1, count); |
431 | dev = file->private_data; | 434 | dev = file->private_data; |
432 | 435 | ||
433 | /* verify that we actually have some data to write */ | 436 | /* verify that we actually have some data to write */ |
@@ -446,6 +449,7 @@ static ssize_t yurex_write(struct file *file, const char __user *user_buffer, | |||
446 | retval = -EFAULT; | 449 | retval = -EFAULT; |
447 | goto error; | 450 | goto error; |
448 | } | 451 | } |
452 | buffer[count] = 0; | ||
449 | memset(dev->cntl_buffer, CMD_PADDING, YUREX_BUF_SIZE); | 453 | memset(dev->cntl_buffer, CMD_PADDING, YUREX_BUF_SIZE); |
450 | 454 | ||
451 | switch (buffer[0]) { | 455 | switch (buffer[0]) { |