Messages in this thread Patch in this message | | | From | He Kuang <> | Subject | [PATCH v2 2/2] perf probe: Add failure check when show variable range | Date | Wed, 1 Jul 2015 11:53:24 +0000 |
| |
Change improper type size_t to diffptr_t to make consistent with libdw and handle error code.
Signed-off-by: He Kuang <hekuang@huawei.com> --- tools/perf/util/dwarf-aux.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/tools/perf/util/dwarf-aux.c b/tools/perf/util/dwarf-aux.c index 2cb4c82..7658fb4 100644 --- a/tools/perf/util/dwarf-aux.c +++ b/tools/perf/util/dwarf-aux.c @@ -965,7 +965,7 @@ static int die_get_var_innermost_scope(Dwarf_Die *sp_die, Dwarf_Die *vr_die, { Dwarf_Die *scopes; int count; - size_t offset = 0; + ptrdiff_t offset = 0; Dwarf_Addr base; Dwarf_Addr start, end; Dwarf_Addr entry; @@ -991,6 +991,7 @@ static int die_get_var_innermost_scope(Dwarf_Die *sp_die, Dwarf_Die *vr_die, while ((offset = dwarf_ranges(&scopes[1], offset, &base, &start, &end)) > 0) { + start -= entry; end -= entry; @@ -1004,6 +1005,11 @@ static int die_get_var_innermost_scope(Dwarf_Die *sp_die, Dwarf_Die *vr_die, } } + if (offset < 0) { + ret = -EINVAL; + goto out; + } + if (!first) strbuf_addf(buf, "]>"); @@ -1029,7 +1035,7 @@ int die_get_var_range(Dwarf_Die *sp_die, Dwarf_Die *vr_die, struct strbuf *buf) Dwarf_Addr entry; Dwarf_Op *op; size_t nops; - size_t offset = 0; + ptrdiff_t offset = 0; Dwarf_Attribute attr; bool first = true; const char *name; @@ -1067,6 +1073,9 @@ int die_get_var_range(Dwarf_Die *sp_die, Dwarf_Die *vr_die, struct strbuf *buf) } } + if (offset < 0) + return -EINVAL; + if (!first) strbuf_addf(buf, "]>"); -- 1.8.5.2
| |