menuconfig: fix NULL pointer dereference when searching a symbol

Searching for PPC_EFIKA results in a segmentation fault, and it's
because get_symbol_prop() returns NULL.

In this case CONFIG_PPC_EFIKA is defined in arch/powerpc/platforms/
52xx/Kconfig, so it won't be parsed if ARCH!=PPC, but menuconfig knows
this symbol when it parses sound/soc/fsl/Kconfig:

    config SND_MPC52xx_SOC_EFIKA
        tristate "SoC AC97 Audio support for bbplan Efika and STAC9766"
        depends on PPC_EFIKA

This bug was introduced by commit bcdedcc1af ("menuconfig: print more
info for symbol without prompts").

Reported-and-tested-by: Borislav Petkov <bp@alien8.de>
Signed-off-by: Li Zefan <lizefan@huawei.com>
Tested-by: Libo Chen <libo.chen@huawei.com>
Reviewed-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Signed-off-by: Michal Marek <mmarek@suse.cz>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Li Zefan 2013-05-07 15:56:54 +02:00 committed by Linus Torvalds
parent 2a437cd36e
commit 383da76f52
1 changed files with 10 additions and 6 deletions

View File

@ -600,7 +600,9 @@ void get_symbol_str(struct gstr *r, struct symbol *sym,
} }
for_all_prompts(sym, prop) for_all_prompts(sym, prop)
get_prompt_str(r, prop, head); get_prompt_str(r, prop, head);
prop = get_symbol_prop(sym); prop = get_symbol_prop(sym);
if (prop) {
str_printf(r, _(" Defined at %s:%d\n"), prop->menu->file->name, str_printf(r, _(" Defined at %s:%d\n"), prop->menu->file->name,
prop->menu->lineno); prop->menu->lineno);
if (!expr_is_yes(prop->visible.expr)) { if (!expr_is_yes(prop->visible.expr)) {
@ -608,6 +610,8 @@ void get_symbol_str(struct gstr *r, struct symbol *sym,
expr_gstr_print(prop->visible.expr, r); expr_gstr_print(prop->visible.expr, r);
str_append(r, "\n"); str_append(r, "\n");
} }
}
hit = false; hit = false;
for_all_properties(sym, prop, P_SELECT) { for_all_properties(sym, prop, P_SELECT) {
if (!hit) { if (!hit) {