2015-08-10 17:44:40

by Tim Bird

[permalink] [raw]
Subject: [PATCH] extcon: add index increment in find_cable_index_by_name

This fixes a bug introduced by commit 73b6ecdb93e8 ("extcon: Redefine the
unique id of supported external connectors without 'enum extcon' type")
which introduced an infinite loop in find_cable_index_by_name. That commit
converted the scan from a for loop to a while, but did not increment
'i' anywhere in the loop. If the loop index is not incremented, the
function never exits.

This function can never work correctly without this fix.

Signed-off-by: Tim Bird <[email protected]>
---
drivers/extcon/extcon.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/extcon/extcon.c b/drivers/extcon/extcon.c
index dda1e62..734a9b1 100644
--- a/drivers/extcon/extcon.c
+++ b/drivers/extcon/extcon.c
@@ -138,6 +138,7 @@ static int find_cable_index_by_name(struct extcon_dev *edev, const char *name)
id = i;
break;
}
+ i++;
}

if (id == EXTCON_NONE)
--
1.8.2.2


2015-08-10 19:18:34

by Tim Bird

[permalink] [raw]
Subject: Re: [PATCH] extcon: add index increment in find_cable_index_by_name


Never mind...

This is already fixed by commit be052cc8 in mainline.

Sorry for the noise.
-- Tim

On 08/10/2015 10:44 AM, Tim Bird wrote:
> This fixes a bug introduced by commit 73b6ecdb93e8 ("extcon: Redefine the
> unique id of supported external connectors without 'enum extcon' type")
> which introduced an infinite loop in find_cable_index_by_name. That commit
> converted the scan from a for loop to a while, but did not increment
> 'i' anywhere in the loop. If the loop index is not incremented, the
> function never exits.
>
> This function can never work correctly without this fix.
>
> Signed-off-by: Tim Bird <[email protected]>
> ---
> drivers/extcon/extcon.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/extcon/extcon.c b/drivers/extcon/extcon.c
> index dda1e62..734a9b1 100644
> --- a/drivers/extcon/extcon.c
> +++ b/drivers/extcon/extcon.c
> @@ -138,6 +138,7 @@ static int find_cable_index_by_name(struct extcon_dev *edev, const char *name)
> id = i;
> break;
> }
> + i++;
> }
>
> if (id == EXTCON_NONE)
>