[hardy CVE 1/1] UBUNTU: SAUCE: auerswald: validate the length of USB strings
Andy Whitcroft
apw at canonical.com
Thu Oct 6 17:16:10 UTC 2011
When attempting to name a device we request various strings from the
device. A malicious device could return very long strings triggering a
buffer overflow.
CVE-2009-4067
BugLink: http://bugs.launchpad.net/bugs/869195
Signed-off-by: Andy Whitcroft <apw at canonical.com>
---
drivers/usb/misc/auerswald.c | 14 ++++++++++++--
1 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/misc/auerswald.c b/drivers/usb/misc/auerswald.c
index df7e1ec..5111b80 100644
--- a/drivers/usb/misc/auerswald.c
+++ b/drivers/usb/misc/auerswald.c
@@ -1945,13 +1945,23 @@ static int auerswald_probe (struct usb_interface *intf,
/* Try to get a suitable textual description of the device */
/* Device name:*/
ret = usb_string( cp->usbdev, AUSI_DEVICE, cp->dev_desc, AUSI_DLEN-1);
- if (ret >= 0) {
+ /*
+ * If we were successful, and there is room remaining for a serial
+ * number then look it up and append it. Assume the serial number
+ * is at least 4 digits.
+ */
+ if (ret >= 0 && ret < AUSI_DLEN-1-6-4) {
u += ret;
/* Append Serial Number */
memcpy(&cp->dev_desc[u], ",Ser# ", 6);
u += 6;
ret = usb_string( cp->usbdev, AUSI_SERIALNR, &cp->dev_desc[u], AUSI_DLEN-u-1);
- if (ret >= 0) {
+ /*
+ * If we were successful and there is room remaining for
+ * the subscriber prefix then look it up and append it.
+ * Assume the subscriber number is at least 1 digit.
+ */
+ if (ret >= 0 && ret < AUSI_DLEN-u-1-2-1) {
u += ret;
/* Append subscriber number */
memcpy(&cp->dev_desc[u], ", ", 2);
--
1.7.4.1
More information about the kernel-team
mailing list