diff mbox series

[U-Boot,1/1] kconfig/symbol.c: use correct pointer type argument for sizeof

Message ID 20171108211354.16683-1-xypron.glpk@gmx.de
State Accepted
Commit 0931ed3c0d0fdea924b7b7196ad92c467b50debf
Delegated to: Tom Rini
Headers show
Series [U-Boot,1/1] kconfig/symbol.c: use correct pointer type argument for sizeof | expand

Commit Message

Heinrich Schuchardt Nov. 8, 2017, 9:13 p.m. UTC
sym_arr is of type struct symbol **.
So in malloc we need sizeof(struct symbol *).

The problem was indicated by coccinelle.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
---
 scripts/kconfig/symbol.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Tom Rini Nov. 9, 2017, 2:01 a.m. UTC | #1
On Wed, Nov 08, 2017 at 10:13:54PM +0100, Heinrich Schuchardt wrote:
> sym_arr is of type struct symbol **.
> So in malloc we need sizeof(struct symbol *).
> 
> The problem was indicated by coccinelle.
> 
> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> ---
>  scripts/kconfig/symbol.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c
> index 20136ffefb..3c8bd9bb42 100644
> --- a/scripts/kconfig/symbol.c
> +++ b/scripts/kconfig/symbol.c
> @@ -1061,7 +1061,7 @@ struct symbol **sym_re_search(const char *pattern)
>  	}
>  	if (sym_match_arr) {
>  		qsort(sym_match_arr, cnt, sizeof(struct sym_match), sym_rel_comp);
> -		sym_arr = malloc((cnt+1) * sizeof(struct symbol));
> +		sym_arr = malloc((cnt+1) * sizeof(struct symbol *));
>  		if (!sym_arr)
>  			goto sym_re_search_free;
>  		for (i = 0; i < cnt; i++)

Since this comes right from the kernel, shouldn't it be fixed there too?
Or is it already?  Thanks!
Heinrich Schuchardt Nov. 9, 2017, 7:12 a.m. UTC | #2
On 11/09/2017 03:01 AM, Tom Rini wrote:
> On Wed, Nov 08, 2017 at 10:13:54PM +0100, Heinrich Schuchardt wrote:
>> sym_arr is of type struct symbol **.
>> So in malloc we need sizeof(struct symbol *).
>>
>> The problem was indicated by coccinelle.
>>
>> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
>> ---
>>   scripts/kconfig/symbol.c | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c
>> index 20136ffefb..3c8bd9bb42 100644
>> --- a/scripts/kconfig/symbol.c
>> +++ b/scripts/kconfig/symbol.c
>> @@ -1061,7 +1061,7 @@ struct symbol **sym_re_search(const char *pattern)
>>   	}
>>   	if (sym_match_arr) {
>>   		qsort(sym_match_arr, cnt, sizeof(struct sym_match), sym_rel_comp);
>> -		sym_arr = malloc((cnt+1) * sizeof(struct symbol));
>> +		sym_arr = malloc((cnt+1) * sizeof(struct symbol *));
>>   		if (!sym_arr)
>>   			goto sym_re_search_free;
>>   		for (i = 0; i < cnt; i++)
> 
> Since this comes right from the kernel, shouldn't it be fixed there too?
> Or is it already?  Thanks!
> 
I already sent a mail upstream:
https://lkml.org/lkml/2017/11/8/898

Coccinelle indicated a few other problems (using the Linux coccicheck 
script):
https://patchwork.ozlabs.org/patch/836007/
https://patchwork.ozlabs.org/patch/836008/
https://patchwork.ozlabs.org/patch/836028/
https://patchwork.ozlabs.org/patch/836091/

Scripts like
scripts/coccinelle/iterators/itnull.cocci
are useful to search for API specific issues which generalized static 
analyzers like cppcheck miss.

To apply coccinelle I just copied scripts/coccicheck and 
scripts/coccinelle/* from Linux to U-Boot and ran

sudo apt-get install coccinelle
srctree=. scripts/coccicheck

Regards

Heinrich
Tom Rini Nov. 21, 2017, 1:05 p.m. UTC | #3
On Wed, Nov 08, 2017 at 10:13:54PM +0100, Heinrich Schuchardt wrote:

> sym_arr is of type struct symbol **.
> So in malloc we need sizeof(struct symbol *).
> 
> The problem was indicated by coccinelle.
> 
> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>

Applied to u-boot/master, thanks!
diff mbox series

Patch

diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c
index 20136ffefb..3c8bd9bb42 100644
--- a/scripts/kconfig/symbol.c
+++ b/scripts/kconfig/symbol.c
@@ -1061,7 +1061,7 @@  struct symbol **sym_re_search(const char *pattern)
 	}
 	if (sym_match_arr) {
 		qsort(sym_match_arr, cnt, sizeof(struct sym_match), sym_rel_comp);
-		sym_arr = malloc((cnt+1) * sizeof(struct symbol));
+		sym_arr = malloc((cnt+1) * sizeof(struct symbol *));
 		if (!sym_arr)
 			goto sym_re_search_free;
 		for (i = 0; i < cnt; i++)