diff options
| author | HONG Yifan <elsk@google.com> | 2024-07-17 01:50:41 +0000 | 
|---|---|---|
| committer | Masahiro Yamada <masahiroy@kernel.org> | 2024-07-20 16:33:45 +0900 | 
| commit | 9d0d266046571f4b3e733c7eb9cf7c959f37fbdd (patch) | |
| tree | c5c19c9ef8460111f8a8b7b4ce5358e8f0adde6f /scripts/gdb/linux/tasks.py | |
| parent | 301c10908e42657c3e6142055aa772adab6a6ef7 (diff) | |
kconfig: recursive checks drop file/lineno
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>
Diffstat (limited to 'scripts/gdb/linux/tasks.py')
0 files changed, 0 insertions, 0 deletions
