summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Hutchings <ben.hutchings@codethink.co.uk>2018-08-15 21:45:37 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2018-10-10 08:54:24 +0200
commita90a52c51ad46b8c1407b1113aabd8cf6e7c197d (patch)
tree016225163f02492131368538b28ad172e24b918d
parent2c423318f07ccde11162e40f2bd4c47bbe9a00cf (diff)
downloadlinux-a90a52c51ad46b8c1407b1113aabd8cf6e7c197d.tar.gz
linux-a90a52c51ad46b8c1407b1113aabd8cf6e7c197d.tar.bz2
linux-a90a52c51ad46b8c1407b1113aabd8cf6e7c197d.zip
USB: yurex: Check for truncation in yurex_read()
[ Upstream commit 14427b86837a4baf1c121934c6599bdb67dfa9fc ] snprintf() always returns the full length of the string it could have printed, even if it was truncated because the buffer was too small. So in case the counter value is truncated, we will over-read from in_buffer and over-write to the caller's buffer. I don't think it's actually possible for this to happen, but in case truncation occurs, WARN and return -EIO. Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/usb/misc/yurex.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/usb/misc/yurex.c b/drivers/usb/misc/yurex.c
index 0673f286afbd..4f48f5730e12 100644
--- a/drivers/usb/misc/yurex.c
+++ b/drivers/usb/misc/yurex.c
@@ -417,6 +417,9 @@ static ssize_t yurex_read(struct file *file, char __user *buffer, size_t count,
spin_unlock_irqrestore(&dev->lock, flags);
mutex_unlock(&dev->io_mutex);
+ if (WARN_ON_ONCE(len >= sizeof(in_buffer)))
+ return -EIO;
+
return simple_read_from_buffer(buffer, count, ppos, in_buffer, len);
}