diff options
author | Luca Boccassi <luca.boccassi@microsoft.com> | 2021-11-30 02:01:53 +0000 |
---|---|---|
committer | Luca Boccassi <luca.boccassi@microsoft.com> | 2021-11-30 16:49:58 +0000 |
commit | 0e62d0340c8c583ea61a5019a6589d38bf023e41 (patch) | |
tree | 57a14239172f7828336c71f3603d07e32a7e38e9 /src/coredump | |
parent | dc063e0978ed5deb534554a7aeb113295586059a (diff) | |
download | systemd-0e62d0340c8c583ea61a5019a6589d38bf023e41.tar.gz |
coredump: check return of dwarf_getscopes
Diffstat (limited to 'src/coredump')
-rw-r--r-- | src/coredump/stacktrace.c | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/src/coredump/stacktrace.c b/src/coredump/stacktrace.c index a028166f85..24ea087d38 100644 --- a/src/coredump/stacktrace.c +++ b/src/coredump/stacktrace.c @@ -60,22 +60,23 @@ static int frame_callback(Dwfl_Frame *frame, void *userdata) { cudie = dwfl_module_addrdie(module, pc_adjusted, &bias); if (cudie) { n = dwarf_getscopes(cudie, pc_adjusted - bias, &scopes); - for (s = scopes; s < scopes + n; s++) { - if (IN_SET(dwarf_tag(s), DW_TAG_subprogram, DW_TAG_inlined_subroutine, DW_TAG_entry_point)) { - Dwarf_Attribute *a, space; - - a = dwarf_attr_integrate(s, DW_AT_MIPS_linkage_name, &space); - if (!a) - a = dwarf_attr_integrate(s, DW_AT_linkage_name, &space); - if (a) - symbol = dwarf_formstring(a); - if (!symbol) - symbol = dwarf_diename(s); - - if (symbol) - break; + if (n > 0) + for (s = scopes; s && s < scopes + n; s++) { + if (IN_SET(dwarf_tag(s), DW_TAG_subprogram, DW_TAG_inlined_subroutine, DW_TAG_entry_point)) { + Dwarf_Attribute *a, space; + + a = dwarf_attr_integrate(s, DW_AT_MIPS_linkage_name, &space); + if (!a) + a = dwarf_attr_integrate(s, DW_AT_linkage_name, &space); + if (a) + symbol = dwarf_formstring(a); + if (!symbol) + symbol = dwarf_diename(s); + + if (symbol) + break; + } } - } } if (!symbol) |