提交 24161a67 编写于 作者: U Ulf Magnusson 提交者: Masahiro Yamada

kconfig: Don't leak 'source' filenames during parsing

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: NUlf Magnusson <ulfalizer@gmail.com>
Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com>
上级 26e47a3c
...@@ -907,6 +907,10 @@ const char *sym_expand_string_value(const char *in) ...@@ -907,6 +907,10 @@ const char *sym_expand_string_value(const char *in)
char *res; char *res;
size_t reslen; 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; reslen = strlen(in) + 1;
res = xmalloc(reslen); res = xmalloc(reslen);
res[0] = '\0'; res[0] = '\0';
......
...@@ -393,6 +393,7 @@ source_stmt: T_SOURCE prompt T_EOL ...@@ -393,6 +393,7 @@ source_stmt: T_SOURCE prompt T_EOL
{ {
printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), $2); printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), $2);
zconf_nextfile($2); zconf_nextfile($2);
free($2);
}; };
/* comment entry */ /* comment entry */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册