On Fri, 30 Aug 2013, Philippe De Swert wrote:

> When an error occurs adding a udc platform device there is a risk of an 
> infinite loop.
> If more than one platform device was added i will remain >= than 0. The 
> intention seems
> to clean up all the different already added platform devices before the 
> failure occurs,
> so fixed the code to actually do so. We need to decrement first because the 
> adding at the current
> index of i is the one that failed.
> 
> At the same time the code is harmonized for hcd platform adding.
> 
> Found with coverity : CID 751073
> 
> Signed-off-by: Philippe De Swert <philippe.desw...@jollamobile.com>
> ---
>  drivers/usb/gadget/dummy_hcd.c | 8 +++-----
>  1 file changed, 3 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/usb/gadget/dummy_hcd.c b/drivers/usb/gadget/dummy_hcd.c
> index c588e8e..2e16c9a 100644
> --- a/drivers/usb/gadget/dummy_hcd.c
> +++ b/drivers/usb/gadget/dummy_hcd.c
> @@ -2684,9 +2684,8 @@ static int __init init(void)
>       for (i = 0; i < mod_data.num; i++) {
>               retval = platform_device_add(the_hcd_pdev[i]);
>               if (retval < 0) {
> -                     i--;
> -                     while (i >= 0)
> -                             platform_device_del(the_hcd_pdev[i--]);
> +                     while (i-- >= 0)
> +                             platform_device_del(the_hcd_pdev[i]);
>                       goto err_add_hcd;
>               }
>       }
> @@ -2705,8 +2704,7 @@ static int __init init(void)
>       for (i = 0; i < mod_data.num; i++) {
>               retval = platform_device_add(the_udc_pdev[i]);
>               if (retval < 0) {
> -                     i--;
> -                     while (i >= 0)
> +                     while (i-- >= 0)
>                               platform_device_del(the_udc_pdev[i]);
>                       goto err_add_udc;
>               }

You used a post-decrement operator instead of pre-decrement.  This 
means the final iteration of the "while" loops will have i == -1 and 
will crash.

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to