mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2024-12-29 17:23:36 +00:00
9d0d266046
This prevents segfault when getting filename and lineno in recursive checks. If the following snippet is found in Kconfig: [Test code 1] config FOO bool depends on BAR select BAR ... without BAR defined; then there is a segfault. Kconfig:34:error: recursive dependency detected! Kconfig:34: symbol FOO depends on BAR make[4]: *** [scripts/kconfig/Makefile:85: allnoconfig] Segmentation fault This is because of the following. BAR is a fake entry created by sym_lookup() with prop being NULL. In the recursive check, there is a NULL check for prop to fall back to stack->sym->prop if stack->prop is NULL. However, in this case, stack->sym points to the fake BAR entry created by sym_lookup(), so prop is still NULL. prop was then referenced without additional NULL checks, causing segfault. As the previous email thread suggests, the file and lineno for select is also wrong: [Test code 2] config FOO bool config BAR bool config FOO bool "FOO" depends on BAR select BAR $ make defconfig *** Default configuration is based on 'x86_64_defconfig' Kconfig:1:error: recursive dependency detected! Kconfig:1: symbol FOO depends on BAR Kconfig:4: symbol BAR is selected by FOO [...] Kconfig:4 should be Kconfig:10. This patch deletes the wrong and segfault-prone filename/lineno inference completely. With this patch, Test code 1 yields: error: recursive dependency detected! symbol FOO depends on BAR symbol BAR is selected by FOO Signed-off-by: HONG Yifan <elsk@google.com> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> |
||
---|---|---|
.. | ||
lxdialog | ||
tests | ||
.gitignore | ||
array_size.h | ||
conf.c | ||
confdata.c | ||
expr.c | ||
expr.h | ||
gconf-cfg.sh | ||
gconf.c | ||
gconf.glade | ||
hashtable.h | ||
images.c | ||
images.h | ||
internal.h | ||
lexer.l | ||
list_types.h | ||
list.h | ||
lkc_proto.h | ||
lkc.h | ||
Makefile | ||
mconf-cfg.sh | ||
mconf.c | ||
menu.c | ||
merge_config.sh | ||
mnconf-common.c | ||
mnconf-common.h | ||
nconf-cfg.sh | ||
nconf.c | ||
nconf.gui.c | ||
nconf.h | ||
parser.y | ||
preprocess.c | ||
preprocess.h | ||
qconf-cfg.sh | ||
qconf.cc | ||
qconf.h | ||
streamline_config.pl | ||
symbol.c | ||
util.c |