summaryrefslogtreecommitdiffstats
path: root/drivers/usb/atm
diff options
context:
space:
mode:
authorSimon Arlott <simon@fire.lp0.eu>2009-11-21 16:07:14 +0100
committerGreg Kroah-Hartman <gregkh@suse.de>2010-03-02 23:52:58 +0100
commit5d0a9c7932c45435de72b5a5b2825c7eb34186a4 (patch)
treebc35d2d276ffd5b00b1d73b3946155ad5c1a9e23 /drivers/usb/atm
parentUSB: cxacru: return an empty value for modulation if there is no connection (diff)
downloadlinux-5d0a9c7932c45435de72b5a5b2825c7eb34186a4.tar.xz
linux-5d0a9c7932c45435de72b5a5b2825c7eb34186a4.zip
USB: cxacru: check data length is not negative
When attempting to read data that is not actually an array of values, the length may be negative which causes an Oops due to a likely access off the end of the data array. This bug should not occur under normal use unless the device returns an invalid response. Signed-off-by: Simon Arlott <simon@fire.lp0.eu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/atm')
-rw-r--r--drivers/usb/atm/cxacru.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/usb/atm/cxacru.c b/drivers/usb/atm/cxacru.c
index 4a26a6c93bec..8da4a06bf140 100644
--- a/drivers/usb/atm/cxacru.c
+++ b/drivers/usb/atm/cxacru.c
@@ -596,7 +596,7 @@ static int cxacru_cm_get_array(struct cxacru_data *instance, enum cxacru_cm_requ
len = ret / 4;
for (offb = 0; offb < len; ) {
int l = le32_to_cpu(buf[offb++]);
- if (l > stride || l > (len - offb) / 2) {
+ if (l < 0 || l > stride || l > (len - offb) / 2) {
if (printk_ratelimit())
usb_err(instance->usbatm, "invalid data length from cm %#x: %d\n",
cm, l);