diff options
author | Li Zefan <lizefan@huawei.com> | 2013-05-07 09:56:54 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-05-07 10:55:36 -0400 |
commit | 383da76f5261637b8beacb99a83f5834b14fc432 (patch) | |
tree | d22fc5e9d1f8f2ae11b367caf9cbc11fc81cb3bb /scripts | |
parent | 2a437cd36e627752e9cac71bfec6293f1e4e4144 (diff) |
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 bcdedcc1afd6 ("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>
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/kconfig/menu.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/scripts/kconfig/menu.c b/scripts/kconfig/menu.c index 826da662886d..b5c7d90df9df 100644 --- a/scripts/kconfig/menu.c +++ b/scripts/kconfig/menu.c | |||
@@ -600,14 +600,18 @@ void get_symbol_str(struct gstr *r, struct symbol *sym, | |||
600 | } | 600 | } |
601 | for_all_prompts(sym, prop) | 601 | for_all_prompts(sym, prop) |
602 | get_prompt_str(r, prop, head); | 602 | get_prompt_str(r, prop, head); |
603 | |||
603 | prop = get_symbol_prop(sym); | 604 | prop = get_symbol_prop(sym); |
604 | str_printf(r, _(" Defined at %s:%d\n"), prop->menu->file->name, | 605 | if (prop) { |
605 | prop->menu->lineno); | 606 | str_printf(r, _(" Defined at %s:%d\n"), prop->menu->file->name, |
606 | if (!expr_is_yes(prop->visible.expr)) { | 607 | prop->menu->lineno); |
607 | str_append(r, _(" Depends on: ")); | 608 | if (!expr_is_yes(prop->visible.expr)) { |
608 | expr_gstr_print(prop->visible.expr, r); | 609 | str_append(r, _(" Depends on: ")); |
609 | str_append(r, "\n"); | 610 | expr_gstr_print(prop->visible.expr, r); |
611 | str_append(r, "\n"); | ||
612 | } | ||
610 | } | 613 | } |
614 | |||
611 | hit = false; | 615 | hit = false; |
612 | for_all_properties(sym, prop, P_SELECT) { | 616 | for_all_properties(sym, prop, P_SELECT) { |
613 | if (!hit) { | 617 | if (!hit) { |