Skip to content

Commit

Permalink
kconfig: Don't leak 'source' filenames during parsing
Browse files Browse the repository at this point in the history
The 'source_stmt' nonterminal takes a 'prompt', which consists of either
a T_WORD or a T_WORD_QUOTE, both of which are always allocated on the
heap in zconf.l and need to have their associated strings freed. Free
them.

The existing code already makes sure to always copy the string, but add
a warning to sym_expand_string_value() to make it clear that the string
must be copied, just in case.

Summary from Valgrind on 'menuconfig' (ARCH=x86) before the fix:

	LEAK SUMMARY:
	   definitely lost: 387,504 bytes in 15,545 blocks
	   ...

Summary after the fix:

	LEAK SUMMARY:
	   definitely lost: 344,616 bytes in 14,355 blocks
	   ...

Signed-off-by: Ulf Magnusson <ulfalizer@gmail.com>
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
  • Loading branch information
Ulf Magnusson authored and Masahiro Yamada committed Jan 10, 2018
1 parent 26e47a3 commit 24161a6
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 0 deletions.
4 changes: 4 additions & 0 deletions scripts/kconfig/symbol.c
Original file line number Diff line number Diff line change
Expand Up @@ -907,6 +907,10 @@ const char *sym_expand_string_value(const char *in)
char *res;
size_t reslen;

/*
* Note: 'in' might come from a token that's about to be
* freed, so make sure to always allocate a new string
*/
reslen = strlen(in) + 1;
res = xmalloc(reslen);
res[0] = '\0';
Expand Down
1 change: 1 addition & 0 deletions scripts/kconfig/zconf.y
Original file line number Diff line number Diff line change
Expand Up @@ -393,6 +393,7 @@ source_stmt: T_SOURCE prompt T_EOL
{
printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), $2);
zconf_nextfile($2);
free($2);
};

/* comment entry */
Expand Down

0 comments on commit 24161a6

Please sign in to comment.