Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753736AbbGAJHU (ORCPT ); Wed, 1 Jul 2015 05:07:20 -0400 Received: from szxga01-in.huawei.com ([58.251.152.64]:27674 "EHLO szxga01-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753387AbbGAJGb (ORCPT ); Wed, 1 Jul 2015 05:06:31 -0400 From: He Kuang To: , , , , , CC: , Subject: [PATCH 4/4] perf probe: Add failure check when show variable range Date: Wed, 1 Jul 2015 09:05:39 +0000 Message-ID: <1435741539-44100-4-git-send-email-hekuang@huawei.com> X-Mailer: git-send-email 1.8.3.4 In-Reply-To: <1435741539-44100-1-git-send-email-hekuang@huawei.com> References: <1435741539-44100-1-git-send-email-hekuang@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.107.197.210] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1797 Lines: 58 Change improper type size_t to diffptr_t to make consistent with libdw and handle error code. Signed-off-by: He Kuang --- tools/perf/util/dwarf-aux.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/dwarf-aux.c b/tools/perf/util/dwarf-aux.c index 2cb4c82..da96eb1 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,9 @@ 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) { + if (offset < 0) + goto out; + start -= entry; end -= entry; @@ -1029,7 +1032,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; @@ -1048,6 +1051,9 @@ int die_get_var_range(Dwarf_Die *sp_die, Dwarf_Die *vr_die, struct strbuf *buf) while ((offset = dwarf_getlocations( &attr, offset, &base, &start, &end, &op, &nops)) > 0) { + if (offset < 0) + return offset; + if (start == 0) { /* Single Location Descriptions */ ret = die_get_var_innermost_scope(sp_die, vr_die, buf); -- 1.8.5.2 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/