Re: [PATCH 1/2 v2] usb:gadget:dummy_hcd : Avoid infinite loop

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.deswert@xxxxxxxxxxxxxxx>
> ---
>  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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux