[PATCH] USB: negative index in drivers/usb/host/isp116x-hcd.c
authorEric Sesterhenn <snakebyte@gmx.de>
Fri, 2 Jun 2006 03:48:45 +0000 (20:48 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 21 Jun 2006 22:04:15 +0000 (15:04 -0700)
From: Eric Sesterhenn <snakebyte@gmx.de>

This fixes coverity Bug #390.

With the following code

ret = ep->branch = balance(isp116x, ep->period, ep->load);
if (ret < 0)
goto fail;

the problem is that ret and balance are of the type int, and ep->branch is u16.
so the int balance() returns gets reduced to u16 and then converted to an int again,
which removes the sign. Maybe the following little c program can explain it better:

drivers/usb/host/isp116x-hcd.c

index e99210b7909b3f6507c4ba7e6172cf8a91f34f4f..c5e224048efa8919cfe3985613c09bf712c6451e 100644 (file)
@@ -781,7 +781,7 @@ static int isp116x_urb_enqueue(struct usb_hcd *hcd,
                if (ep->branch < PERIODIC_SIZE)
                        break;
 
-               ret = ep->branch = balance(isp116x, ep->period, ep->load);
+               ep->branch = ret = balance(isp116x, ep->period, ep->load);
                if (ret < 0)
                        goto fail;
                ret = 0;