summaryrefslogtreecommitdiff
path: root/src/coredump
diff options
context:
space:
mode:
authorLuca Boccassi <luca.boccassi@microsoft.com>2021-11-30 02:01:53 +0000
committerLuca Boccassi <luca.boccassi@microsoft.com>2021-11-30 16:49:58 +0000
commit0e62d0340c8c583ea61a5019a6589d38bf023e41 (patch)
tree57a14239172f7828336c71f3603d07e32a7e38e9 /src/coredump
parentdc063e0978ed5deb534554a7aeb113295586059a (diff)
downloadsystemd-0e62d0340c8c583ea61a5019a6589d38bf023e41.tar.gz
coredump: check return of dwarf_getscopes
Diffstat (limited to 'src/coredump')
-rw-r--r--src/coredump/stacktrace.c31
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)