From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-dl1-f74.google.com (mail-dl1-f74.google.com [74.125.82.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A49633859D3 for ; Sat, 2 May 2026 15:57:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.74 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777737449; cv=none; b=CrwAy/O2VamaWqkWDr0pNDcT/AfcBsAviX7rU2ltU/YOxWRHRZ69JqRDgmtZxxx9rpNyQ6EA3qHMpAFwgSSpYGhUOBTCUXRWVvPvYQKiDx1Gy2lIBxs/2ZbDUDOUUGcnkkGca+7M0/VttL2d5h+2BRldAQocmCGvHlH+pNwFUKs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777737449; c=relaxed/simple; bh=bcwWM4oAyHctxhNnyNPL9T001VW9Tcv3kAMmr4OqRsE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=GvVwqhO6iwYWH+/t8cH2i1pJ3xRLGdFbCnqbLdrRtN+9WKWEiFgRAMFylyNv57nBMNAatRnsFvmkXHyAfvlGZCYyLcgvWBfmYnwH4cLfPSBQddq5okqQzGnug98R/vgIYeubKJroM0YEeSq+L/UUpwArWuWxm024DN25/+ruQJU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=N1u52Mnd; arc=none smtp.client-ip=74.125.82.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="N1u52Mnd" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-12dba1e866dso2828367c88.1 for ; Sat, 02 May 2026 08:57:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777737446; x=1778342246; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=YPd2uZcGUUWJNN1IIJhqH/dm1zq9pHxS4EWiNfzZKto=; b=N1u52MndtIU2kLhUjOXtgizbKxMkAnk6jtDAw2iu40qsQ5ayof9Xk+Ux/fGiFMqD5r 2/zShUZwbhI7GDaie8XlesgNaqlZCYzLZQ3XzZk8A4v//l7iz2ypv5oAr7/EdfY+7X5K 2MIwWFJrJiBVv5ybPtdDpMoNIuxaGAmZPrEewh9QLqKFsTmaRLLuT2QvCp6RCbzZJdRw vlRtRMG18xqqGkYz32U3lhXehiQOiO7lhND+dIkA7JnnoSu2Z1jqHPdhpeeum0F6OUNI CVoKzb59V/cUfeY/rLe3axHGbXqibxdu/dA4Ry3rvZslsTL7Ep8T14u06k89icHDxvcf gkXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777737446; x=1778342246; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=YPd2uZcGUUWJNN1IIJhqH/dm1zq9pHxS4EWiNfzZKto=; b=peYXLpF+LQJZhrZ6mr7izlU28OPblLrh9J7jrsDHARgvmhu5xXaNzmOWTORTHQQjMg RZ6CWjaVvB/w+0S1VHBZdRim6T7LXWvGkJBKphjs6c8ypUxegcAKEDIDLjBdkdHyFnxo xaksaXXeNUYwu9R1yWbVRl2Z8vUqSmakGD88KbjzU3xOP1hSCEIOhognmz/09KeoKtju FYFnrJD9E7JNBlNas8xmAJ9MRKyJtV6708i+BrdMbVUa0+27gTQRdqzderIEBR/KDqe9 3aNuFKUfA5MkgKJBhQADyuFUrFzu6FNi+okt3a1HF/rlkV/fUVGCy6h0hSGVqFWQ/lXg 7M1g== X-Forwarded-Encrypted: i=1; AFNElJ/hFfYPfBsmtMKNxUdfDqmsw6WEgK0T49uGs9i5EyoArWWiHo6vE8V7PVRVylpYtwUwiHgH5SXJlX+iwOo=@vger.kernel.org X-Gm-Message-State: AOJu0Yzj1Ponj2bwtGLQY9xxxtbYC2kLBYVeQRx2UWJBujB4iP+s50OZ IiIpkURriZEcSEybgHTEMDvoOMJ70HndEhfxYz1+9ZlYlRTDa3bo/78NgRzYMPOCqBcPIkZiILy ZNWv0A+TJCA== X-Received: from dleb6-n1.prod.google.com ([2002:a05:701b:4246:10b0:12a:9ef0:93ed]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:693:b0:12a:8122:24a9 with SMTP id a92af1059eb24-12dece338bcmr4012923c88.22.1777737445602; Sat, 02 May 2026 08:57:25 -0700 (PDT) Date: Sat, 2 May 2026 08:56:53 -0700 In-Reply-To: <20260502155656.478642-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260502064839.282422-1-irogers@google.com> <20260502155656.478642-1-irogers@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: <20260502155656.478642-4-irogers@google.com> Subject: [PATCH v2 3/6] perf libdw: Fix libdw API contract violations From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Jiri Olsa , Adrian Hunter , James Clark , Zecheng Li , Masami Hiramatsu , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Ian Rogers Content-Type: text/plain; charset="UTF-8" Check return values of `dwfl_report_end` and `dwfl_module_addrdie`. Validate `dwarf_diename` result before passing to `new_inline_sym` (avoid potential `strdup(NULL)` crash) and check `die_get_call_lineno` for errors. Fixes: b7a2b011e962 ("perf powerpc: Unify the skip-callchain-idx libdw with that for addr2line") Fixes: 88c51002d06f ("perf addr2line: Add a libdw implementation") Assisted-by: Gemini-CLI:Google Gemini 3 Signed-off-by: Ian Rogers --- tools/perf/util/libdw.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/tools/perf/util/libdw.c b/tools/perf/util/libdw.c index 216977884103..e37f3b22699d 100644 --- a/tools/perf/util/libdw.c +++ b/tools/perf/util/libdw.c @@ -60,7 +60,11 @@ struct Dwfl *dso__libdw_dwfl(struct dso *dso) return NULL; } - dwfl_report_end(dwfl, /*removed=*/NULL, /*arg=*/NULL); + if (dwfl_report_end(dwfl, NULL, NULL) != 0) { + dwfl_end(dwfl); + return NULL; + } + dso__set_libdw(dso, dwfl); return dwfl; @@ -72,22 +76,27 @@ struct libdw_a2l_cb_args { struct inline_node *node; char *leaf_srcline; bool leaf_srcline_used; + int err; }; static int libdw_a2l_cb(Dwarf_Die *die, void *_args) { struct libdw_a2l_cb_args *args = _args; - struct symbol *inline_sym = new_inline_sym(args->dso, args->sym, dwarf_diename(die)); + const char *name = dwarf_diename(die); + struct symbol *inline_sym = new_inline_sym(args->dso, args->sym, name ?: "unknown"); const char *call_fname = die_get_call_file(die); + int call_lineno = die_get_call_lineno(die); char *call_srcline = srcline__unknown; struct inline_list *ilist; - if (!inline_sym) - return -ENOMEM; + if (!inline_sym) { + args->err = -ENOMEM; + return DWARF_CB_ABORT; + } /* Assign caller information to the parent. */ - if (call_fname) - call_srcline = srcline_from_fileline(call_fname, die_get_call_lineno(die)); + if (call_fname && call_lineno > 0) + call_srcline = srcline_from_fileline(call_fname, call_lineno); list_for_each_entry(ilist, &args->node->val, list) { if (args->leaf_srcline == ilist->srcline) @@ -163,7 +172,8 @@ int libdw__addr2line(u64 addr, char **file, unsigned int *line_nr, }; /* Walk from the parent down to the leaf. */ - cu_walk_functions_at(cudie, addr, libdw_a2l_cb, &args); + if (cudie) + cu_walk_functions_at(cudie, addr, libdw_a2l_cb, &args); if (!args.leaf_srcline_used) free(args.leaf_srcline); -- 2.54.0.545.g6539524ca2-goog