From nobody Fri Sep 5 20:21:06 2025 Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.201]) (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 2C15327C856 for ; Tue, 27 May 2025 18:07:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748369245; cv=none; b=ctl2Yhqc74Q63rvOdgzFnIi18VXEozOv2zPeFcPfsp6yOrnB2vRonqqWOyfqyEfsOo2zGrif2KJ21+ey5TOR/Z6DhF38xywycB+3/NHGHpA++yh87BskvsxB+9WO22431bV3LpcTQ8lrJkJqxvqxkxTlaHGl6OW2BprUO1bOmTw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748369245; c=relaxed/simple; bh=8yisZQ1iREgb7ZhjLzSFHwMf/rxLRWwZWOc+EPaBYno=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=acmuzJvCnDH5Pfwhj2z3zf/YZiyVX4C87j2ZvOCR6tDPV/J5uVqUlR2kcaLaB676GDqJJU0ayIPvF12FxkwlskraaOiVxpjD1wfzGzvg4Qau1PLEZ1vaUYmhfY8Ngaj1nz5DvFfaOe4UifMDbBstdDvZeGEA4bCOp1KaabWeEkQ= 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=vAiPUkg4; arc=none smtp.client-ip=209.85.210.201 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="vAiPUkg4" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-7375e2642b4so2688016b3a.2 for ; Tue, 27 May 2025 11:07:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1748369243; x=1748974043; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=o9hg7lkKYYzWN7zwsaMHuFSQpju7kbQ/1Bsg1JOrQa4=; b=vAiPUkg48SsVccPUoZFFZ/k+VCTFlN0knPgIVTOjP+s0u8MC9vmeY9Akp4xtyaDsnH Eo+hNfXVaK6CSh13HB83hoXTMDvIXnsaaA6OqBs29maueBNhyBIJCLWPr8Fhmf/TwakO yVdlw2TdMx4SaQr5hpxI+nSvhGqRT0jOBRrAaqywQxsl+BrWLUtd7CCA4hLr8hKYHz4u x7WUzaTmxiEczaBTvYhGfiOQ/4rJsyfFczDI4iRy+JwLjE4XufVEMFvk/XbiqMcGYsx7 67S1OyWa36DjD7SIHtbvFYWZnrYtyRRtfSDM0FkA19Ouhwiv85uC2K04Jx1zkI/QJK8c D64g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748369243; x=1748974043; h=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=o9hg7lkKYYzWN7zwsaMHuFSQpju7kbQ/1Bsg1JOrQa4=; b=nPJE3LSIiblUzvAk4uoaDymd27f6hyJccTYtEplc724Ot0Y14rlCMwZA+YwL8BWobv bdoG6b8vOXGxuubOCqx9Gy30SLT4mLfvFljFlqevDzmAqw/i/Tf2/9++qBIWYt1k2Ijb UVgoHSJtCpxzGbs3Hn2aWzg+c/x0rmzJVI0JAvJn5pcsZs08qLKwSzf7ttejpCXEH2TT KOGjkIxNXqZEJs9PJBViQc89GYMF0agE8kH09B9S4CtQDlDUt/M6LpO1MK+XMUtDA8nD HINtXE2qNnRFIv73WJTQV9dA/G+ciQtz2pF7Jvet1yb07dD1Ize4S8vi575wOKNmv1wJ cA3w== X-Forwarded-Encrypted: i=1; AJvYcCX7lLia12xqPfK8QCEnEgXHc6adEbPOIFV5vrRG543zr7T1vGRRGSZDH3ZnY0p3wXj+YNkQTACBfNOje7c=@vger.kernel.org X-Gm-Message-State: AOJu0YzHw7E9RVZIeVTy6h2jq13l3vWj700qwnrrZ7wa22msHPbKqDfu gZNGBCFI1LtVfHCTyBt6fl1sZoDidS55sgeF16dRIwmDnTB1hZJraflNmS4k/dZQ0Vz6qZIhGct 10Q/tajwC9Q== X-Google-Smtp-Source: AGHT+IFeLLiHfRw62kmSxkfeBVK3DqklQoi2IPwTszaZzMyvdchTtM8pUD30Bbi6gdB7MuqMd8wyXjXeTY/9 X-Received: from pga23.prod.google.com ([2002:a05:6a02:4f97:b0:b2c:4a89:4b36]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:8ccb:b0:215:d38f:11d1 with SMTP id adf61e73a8af0-2188c37f541mr23754168637.29.1748369243178; Tue, 27 May 2025 11:07:23 -0700 (PDT) Date: Tue, 27 May 2025 11:06:58 -0700 In-Reply-To: <20250527180703.129336-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: <20250527180703.129336-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1204.g71687c7c1d-goog Message-ID: <20250527180703.129336-2-irogers@google.com> Subject: [PATCH v1 1/6] perf symbol: Fix use-after-free in filename__read_build_id From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , "=?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?=" , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Jiapeng Chong , James Clark , Howard Chu , Weilin Wang , Stephen Brennan , Andi Kleen , Dmitry Vyukov , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The same buf is used for the program headers and reading notes. As the notes memory may be reallocated then this corrupts the memory pointed to by the phdr. Using the same buffer is in any case a logic error. Rather than deal with the duplicated code, introduce an elf32 boolean and a union for either the elf32 or elf64 headers that are in use. Let the program headers have their own memory and grow the buffer for notes as necessary. Before `perf list -j` compiled with asan would crash with: ``` =3D=3D4176189=3D=3DERROR: AddressSanitizer: heap-use-after-free on address = 0x5160000070b8 at pc 0x555d3b15075b bp 0x7ffebb5a8090 sp 0x7ffebb5a8088 READ of size 8 at 0x5160000070b8 thread T0 #0 0x555d3b15075a in filename__read_build_id tools/perf/util/symbol-min= imal.c:212:25 #1 0x555d3ae43aff in filename__sprintf_build_id tools/perf/util/build-i= d.c:110:8 ... 0x5160000070b8 is located 312 bytes inside of 560-byte region [0x516000006f= 80,0x5160000071b0) freed by thread T0 here: #0 0x555d3ab21840 in realloc (perf+0x264840) (BuildId: 12dff2f6629f738e= 5012abdf0e90055518e70b5e) #1 0x555d3b1506e7 in filename__read_build_id tools/perf/util/symbol-min= imal.c:206:11 ... previously allocated by thread T0 here: #0 0x555d3ab21423 in malloc (perf+0x264423) (BuildId: 12dff2f6629f738e5= 012abdf0e90055518e70b5e) #1 0x555d3b1503a2 in filename__read_build_id tools/perf/util/symbol-min= imal.c:182:9 ... ``` Note: this bug is long standing and not introduced by the other asan fix in commit fa9c4977fbfb ("perf symbol-minimal: Fix double free in filename__read_build_id"). Fixes: b691f64360ecec49 ("perf symbols: Implement poor man's ELF parser") Signed-off-by: Ian Rogers --- tools/perf/util/symbol-minimal.c | 168 +++++++++++++------------------ 1 file changed, 70 insertions(+), 98 deletions(-) diff --git a/tools/perf/util/symbol-minimal.c b/tools/perf/util/symbol-mini= mal.c index d8da3da01fe6..c9b7a1ca5e52 100644 --- a/tools/perf/util/symbol-minimal.c +++ b/tools/perf/util/symbol-minimal.c @@ -90,11 +90,23 @@ int filename__read_build_id(const char *filename, struc= t build_id *bid) { FILE *fp; int ret =3D -1; - bool need_swap =3D false; + bool need_swap =3D false, elf32; u8 e_ident[EI_NIDENT]; - size_t buf_size; - void *buf; int i; + union { + struct { + Elf32_Ehdr ehdr32; + Elf32_Phdr *phdr32; + }; + struct { + Elf64_Ehdr ehdr64; + Elf64_Phdr *phdr64; + }; + } hdrs; + void *phdr; + size_t phdr_size; + void *buf =3D NULL; + size_t buf_size =3D 0; =20 fp =3D fopen(filename, "r"); if (fp =3D=3D NULL) @@ -108,119 +120,79 @@ int filename__read_build_id(const char *filename, st= ruct build_id *bid) goto out; =20 need_swap =3D check_need_swap(e_ident[EI_DATA]); + elf32 =3D e_ident[EI_CLASS] =3D=3D ELFCLASS32; =20 - /* for simplicity */ - fseek(fp, 0, SEEK_SET); - - if (e_ident[EI_CLASS] =3D=3D ELFCLASS32) { - Elf32_Ehdr ehdr; - Elf32_Phdr *phdr; - - if (fread(&ehdr, sizeof(ehdr), 1, fp) !=3D 1) - goto out; + if (fread(elf32 ? (void *)&hdrs.ehdr32 : (void *)&hdrs.ehdr64, + elf32 ? sizeof(hdrs.ehdr32) : sizeof(hdrs.ehdr32), + 1, fp) !=3D 1) + goto out; =20 - if (need_swap) { - ehdr.e_phoff =3D bswap_32(ehdr.e_phoff); - ehdr.e_phentsize =3D bswap_16(ehdr.e_phentsize); - ehdr.e_phnum =3D bswap_16(ehdr.e_phnum); + if (need_swap) { + if (elf32) { + hdrs.ehdr32.e_phoff =3D bswap_32(hdrs.ehdr32.e_phoff); + hdrs.ehdr32.e_phentsize =3D bswap_16(hdrs.ehdr32.e_phentsize); + hdrs.ehdr32.e_phnum =3D bswap_16(hdrs.ehdr32.e_phnum); + } else { + hdrs.ehdr64.e_phoff =3D bswap_64(hdrs.ehdr64.e_phoff); + hdrs.ehdr64.e_phentsize =3D bswap_16(hdrs.ehdr64.e_phentsize); + hdrs.ehdr64.e_phnum =3D bswap_16(hdrs.ehdr64.e_phnum); } + } + phdr_size =3D elf32 ? hdrs.ehdr32.e_phentsize * hdrs.ehdr32.e_phnum + : hdrs.ehdr64.e_phentsize * hdrs.ehdr64.e_phnum; + phdr =3D malloc(phdr_size); + if (phdr =3D=3D NULL) + goto out; =20 - buf_size =3D ehdr.e_phentsize * ehdr.e_phnum; - buf =3D malloc(buf_size); - if (buf =3D=3D NULL) - goto out; - - fseek(fp, ehdr.e_phoff, SEEK_SET); - if (fread(buf, buf_size, 1, fp) !=3D 1) - goto out_free; - - for (i =3D 0, phdr =3D buf; i < ehdr.e_phnum; i++, phdr++) { - void *tmp; - long offset; - - if (need_swap) { - phdr->p_type =3D bswap_32(phdr->p_type); - phdr->p_offset =3D bswap_32(phdr->p_offset); - phdr->p_filesz =3D bswap_32(phdr->p_filesz); - } - - if (phdr->p_type !=3D PT_NOTE) - continue; - - offset =3D phdr->p_offset; - if (phdr->p_filesz > buf_size) { - buf_size =3D phdr->p_filesz; - tmp =3D realloc(buf, buf_size); - if (tmp =3D=3D NULL) - goto out_free; - buf =3D tmp; - } - fseek(fp, offset, SEEK_SET); - if (fread(buf, phdr->p_filesz, 1, fp) !=3D 1) - goto out_free; + fseek(fp, elf32 ? hdrs.ehdr32.e_phoff : hdrs.ehdr64.e_phoff, SEEK_SET); + if (fread(phdr, phdr_size, 1, fp) !=3D 1) + goto out_free; =20 - ret =3D read_build_id(buf, phdr->p_filesz, bid, need_swap); - if (ret =3D=3D 0) { - ret =3D bid->size; - break; - } - } - } else { - Elf64_Ehdr ehdr; - Elf64_Phdr *phdr; + if (elf32) + hdrs.phdr32 =3D phdr; + else + hdrs.phdr64 =3D phdr; =20 - if (fread(&ehdr, sizeof(ehdr), 1, fp) !=3D 1) - goto out; + for (i =3D 0; i < elf32 ? hdrs.ehdr32.e_phnum : hdrs.ehdr64.e_phnum; i++)= { + size_t p_filesz; =20 if (need_swap) { - ehdr.e_phoff =3D bswap_64(ehdr.e_phoff); - ehdr.e_phentsize =3D bswap_16(ehdr.e_phentsize); - ehdr.e_phnum =3D bswap_16(ehdr.e_phnum); + if (elf32) { + hdrs.phdr32[i].p_type =3D bswap_32(hdrs.phdr32[i].p_type); + hdrs.phdr32[i].p_offset =3D bswap_32(hdrs.phdr32[i].p_offset); + hdrs.phdr32[i].p_filesz =3D bswap_32(hdrs.phdr32[i].p_offset); + } else { + hdrs.phdr64[i].p_type =3D bswap_32(hdrs.phdr64[i].p_type); + hdrs.phdr64[i].p_offset =3D bswap_64(hdrs.phdr64[i].p_offset); + hdrs.phdr64[i].p_filesz =3D bswap_64(hdrs.phdr64[i].p_filesz); + } } + if ((elf32 ? hdrs.phdr32[i].p_type : hdrs.phdr64[i].p_type) !=3D PT_NOTE) + continue; =20 - buf_size =3D ehdr.e_phentsize * ehdr.e_phnum; - buf =3D malloc(buf_size); - if (buf =3D=3D NULL) - goto out; - - fseek(fp, ehdr.e_phoff, SEEK_SET); - if (fread(buf, buf_size, 1, fp) !=3D 1) - goto out_free; - - for (i =3D 0, phdr =3D buf; i < ehdr.e_phnum; i++, phdr++) { + p_filesz =3D elf32 ? hdrs.phdr32[i].p_filesz : hdrs.phdr64[i].p_filesz; + if (p_filesz > buf_size) { void *tmp; - long offset; - - if (need_swap) { - phdr->p_type =3D bswap_32(phdr->p_type); - phdr->p_offset =3D bswap_64(phdr->p_offset); - phdr->p_filesz =3D bswap_64(phdr->p_filesz); - } - - if (phdr->p_type !=3D PT_NOTE) - continue; =20 - offset =3D phdr->p_offset; - if (phdr->p_filesz > buf_size) { - buf_size =3D phdr->p_filesz; - tmp =3D realloc(buf, buf_size); - if (tmp =3D=3D NULL) - goto out_free; - buf =3D tmp; - } - fseek(fp, offset, SEEK_SET); - if (fread(buf, phdr->p_filesz, 1, fp) !=3D 1) + buf_size =3D p_filesz; + tmp =3D realloc(buf, buf_size); + if (tmp =3D=3D NULL) goto out_free; + buf =3D tmp; + } + fseek(fp, elf32 ? hdrs.phdr32[i].p_offset : hdrs.phdr64[i].p_offset, SEE= K_SET); + if (fread(buf, p_filesz, 1, fp) !=3D 1) + goto out_free; =20 - ret =3D read_build_id(buf, phdr->p_filesz, bid, need_swap); - if (ret =3D=3D 0) { - ret =3D bid->size; - break; - } + ret =3D read_build_id(buf, p_filesz, bid, need_swap); + if (ret =3D=3D 0) { + ret =3D bid->size; + break; } } out_free: free(buf); + free(phdr); out: fclose(fp); return ret; --=20 2.49.0.1204.g71687c7c1d-goog From nobody Fri Sep 5 20:21:06 2025 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (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 F0D06284678 for ; Tue, 27 May 2025 18:07:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748369257; cv=none; b=MNjwqDdVyzAqqvbLr++jjVjcCyqEw7gIJqrVfLvEd5EL2BWxQCV9kC9jVYSpjhUqM3+JvQarLXTsqZ0UIAJIbr9WeOwYFkcv5Dejt7AQAHZ8UFNKrRdhHGVGOBz6rXhDdvUaFcFpOg5eKQLNkQZWthW7P66oGLMEB6wpsV68qW8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748369257; c=relaxed/simple; bh=hYhJhw9lgUIEnIxwZHfufmbd/yzFeT8cZT61HtEgsyg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=iSkbijfEt1vDIoB7vxE7Hz5RgWlynni5aW5PAzec0uXfUCcyTP9Lv3CxTlj9sbLVZtGzGWdGkqyP+Xa5k9aYsHm3xhCnF8JFApb4ohDATw4elSexghyHiESPdgfpimrQhVOOH4ddl/ls1OvGeij8R2r40GYEWTF7qlR3Wv20UgA= 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=mzzdshBP; arc=none smtp.client-ip=209.85.214.201 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="mzzdshBP" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-23443196f00so38252335ad.1 for ; Tue, 27 May 2025 11:07:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1748369255; x=1748974055; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=nD2QkUBNtYWidhmQthg28IqOzebmfKqF2U7ClZ+k9CY=; b=mzzdshBPPjtKDQeFpuisUG5yberem71lqoIou9HDAv5EQumwpO8SaPNu+SKc5/VtIm mqPrrGupKhdhNGsxQ7WaF5PA6FvDDBfhYu+IFFyV9UuWG6ugFBp8Uvv+G++EY1dVU2Dx 7yzWaxpTG0kr2bTnDo/tvDFu/YKAR/mB9AnmbI0TeBpe3kjcTYs/z0avCpowgtSclmsh icL8DUrz00JFd0rE0OZIgUlbbgMdExfug7ZgA9wjEW9yqYpXq9zpa8zAeHXi4sKxcHC8 FGluo8GJWmWLVnHtEsLsPJgAWbx0zcTxC1sd67tIu2TdRpu7y6PC5Iz33b8uqlDHeVyj HXmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748369255; x=1748974055; h=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=nD2QkUBNtYWidhmQthg28IqOzebmfKqF2U7ClZ+k9CY=; b=wJ2phLonPRYTrQlRCriCpm5elDv9qcusWDHlDjQkTzAd/Fw2B8tC53BSIKB2GmO8HG SwGT9u5/vojTCCTGFvpFBa6lCWltpbgdhLfrS7n+9qoSc29GAMyWvCJhDfkfxbZvld0o 7TK8JksZrOW9fW7aR0BuA+FpSxFToAK1uUjKZ21nJZVI1K79d5ZtVkXjD0Taw/eD4SCb mIF5UU5GadIilL3NM8DVZDiWA5LjT8RgcZO8B3NTwS2X6lWz4N1HfYM4uZZg75FDYIDJ c2WkYhjOtVDVl7fgYly7oW/0KBkCPUEhXDPcDy/95wKIpJ9wqkEg6oM6KwsSM+luBZ25 zWRw== X-Forwarded-Encrypted: i=1; AJvYcCVdVJNIZnSIHIvhuv/xCVyM+ufJa6sTeM7ObJwxpaFKsW6lR7JFLxBbHujnwzgnFcobvhLCPWOD0VRnpoc=@vger.kernel.org X-Gm-Message-State: AOJu0Yy56QYRToqjZIHNBxhf4DLK0lE7PoKfCFJUciFLYTt56N502p/t EiARJ3wL1tauCjqKTCmrxYEqro/Q7QP+8jG1JB6Jy0ISZKcQoMhIWOUEBtmpFnvN6r2cfwUafmt 18gjOssf52g== X-Google-Smtp-Source: AGHT+IE4fW6g74Tthm48qNxM7YBO8dkYBPd3gBkxzs41uElkUtHuH5YcJ4K+ZN7/1wnwXfEfwdwixMyWs3MB X-Received: from pllw5.prod.google.com ([2002:a17:902:7b85:b0:234:4c97:1e84]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:db03:b0:224:1001:677c with SMTP id d9443c01a7336-23414f32ca9mr193634635ad.9.1748369245048; Tue, 27 May 2025 11:07:25 -0700 (PDT) Date: Tue, 27 May 2025 11:06:59 -0700 In-Reply-To: <20250527180703.129336-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: <20250527180703.129336-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1204.g71687c7c1d-goog Message-ID: <20250527180703.129336-3-irogers@google.com> Subject: [PATCH v1 2/6] perf test demangle-java: Don't segv if demangling fails From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , "=?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?=" , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Jiapeng Chong , James Clark , Howard Chu , Weilin Wang , Stephen Brennan , Andi Kleen , Dmitry Vyukov , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The buffer returned by dso__demangle_sym may be NULL, don't segv in strcmp if this happens. Currently this happens for NO_LIBELF=3D1 builds. Signed-off-by: Ian Rogers --- tools/perf/tests/demangle-java-test.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/perf/tests/demangle-java-test.c b/tools/perf/tests/deman= gle-java-test.c index ebaf60cdfa99..0fb3e5a4a0ed 100644 --- a/tools/perf/tests/demangle-java-test.c +++ b/tools/perf/tests/demangle-java-test.c @@ -30,6 +30,11 @@ static int test__demangle_java(struct test_suite *test _= _maybe_unused, int subte =20 for (i =3D 0; i < ARRAY_SIZE(test_cases); i++) { buf =3D dso__demangle_sym(/*dso=3D*/NULL, /*kmodule=3D*/0, test_cases[i]= .mangled); + if (!buf) { + pr_debug("FAILED to demangle: \"%s\"\n \"%s\"\n", test_cases[i].mangled, + test_cases[i].demangled); + continue; + } if (strcmp(buf, test_cases[i].demangled)) { pr_debug("FAILED: %s: %s !=3D %s\n", test_cases[i].mangled, buf, test_cases[i].demangled); --=20 2.49.0.1204.g71687c7c1d-goog From nobody Fri Sep 5 20:21:06 2025 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (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 D21CF280A4C for ; Tue, 27 May 2025 18:07:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748369249; cv=none; b=i8yu+8F2uKNB3taEkeyyEPfSdNz4Ai5gaXSagvjZ5L0n2p1leaWVIe4Zzyz/S8ez2TqauFcRYO2cm/uh5U9fTKykwtrXRZoxPr6WtYnjegPrTKyM2LvJ053T84U33d7naGeQYesS24sXbbOh9G1fz3El7pgOAWI6D91HbIX8VZw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748369249; c=relaxed/simple; bh=g/vdxkzY+tsBo4NWsi7xSji+vRiYV990WBFLaomHcxg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=TKUnal5DBnNqMBVsylm9qPVmHk8XfY+MFhchd3xNrX2uUH10uzP9IHpEpvZe9YUgWjsII0Cn2SA1RXqrKS5qJ+1ZOdrLc4jvTlbca2VBl5PpOdp6nOvnwV9hXBE+FJ+uBWaTpP/Q2BE3GIFHl3Dtj8vVSYfwbXTNCsovhiun3uY= 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=UxqRhvd9; arc=none smtp.client-ip=209.85.214.201 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="UxqRhvd9" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2342ce32384so25457415ad.3 for ; Tue, 27 May 2025 11:07:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1748369247; x=1748974047; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=kNY1NW1fqywJAHjwI3r5pwbBBjkQCMsn9vPwq230l9w=; b=UxqRhvd9rLf4lTLVadFOEIlrWoVRhysRZMwE2cfl2/Y/YMrGxIk2/w28y+TtIVq4hE gDpy2aSyUa0CVgVngJ5kMpFqGHdpFbIBNu+xl73t38qO/wMkRlcy7F5v+jGuE/ZVP7ZB BdKq+QIt1yTjXZzGlby9eD8C0wkj5o5WleULFELkV9c6Z1azJ4bpn2f6vYB7AlAk+lGD O/DIpZ4ZJVszgGhPS5bJnS928arLW77trT7Dod6pVktkFO+wfgn4p5cqTvfY/wBv+48t IEXsVXBpn1GZZdkN/uFUN5HreGfyXxr/lqsW2TmDcv9YsV6xD9pdUOcIp/eSAgjFq3F+ EcwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748369247; x=1748974047; h=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=kNY1NW1fqywJAHjwI3r5pwbBBjkQCMsn9vPwq230l9w=; b=Kf+tg527p5Iwj7rezDU862sh6PFRO5Auu2sZiRumhiHfaq1r9MiphWe8H0sBs7r8j/ kIy3K16GssPMQQJJAZJSry0fLKByOoiIS7inPDDjhiKmvsImkINkVH3JQoDv7snLhbcV ZiO6jmnBYnOnWjc3xY10iZXhJKI9a7VDorInvbJFbNMPEkudEhJYgpOGQkeN+0SsK7D/ wgpV6ssf4JS1/Kt84cQIugOE66ZWu2iwJStZdyPkTA71wmZbPvXO72q09d+Q9ZNwirX6 rWT1WKB/Zhjr+5ilLz6CkS7bd4F8tZwaMuT4dxwdDGlb02fIp2LzryVuNeCGvLQ7TJwX yQ9g== X-Forwarded-Encrypted: i=1; AJvYcCXUtEopw94nbIvfaS4iFA7r/0Iump8fEpaLXVIpJStUIrH6KFet3pL9CVD1ZvlQ2ITexHE9BJT9JlHl/Mg=@vger.kernel.org X-Gm-Message-State: AOJu0YznL2hl0GGum74qqgHbbdxDNfBna2cO8wQ5+Qqd8PeKOggm39D/ F4aJIjERbs1GMZ+r7c8QrSJG/2grI5RJ3mCGSXeY0f0DhDnZGlCCUnPAHm1SdETZWNo5XIT8Er1 Qlr9c49P/Zg== X-Google-Smtp-Source: AGHT+IG4PVL4UwUt00Bf/Kg+kdlYkRnnZ/Rky4nPzLLnlfD052G3K+3BpVeGG1JUZp7f5MfEYow8c07XlFz5 X-Received: from plcn4.prod.google.com ([2002:a17:902:d2c4:b0:234:7417:ad84]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:ec8a:b0:22e:4fe6:24f9 with SMTP id d9443c01a7336-23414f49efamr193296455ad.13.1748369247117; Tue, 27 May 2025 11:07:27 -0700 (PDT) Date: Tue, 27 May 2025 11:07:00 -0700 In-Reply-To: <20250527180703.129336-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: <20250527180703.129336-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1204.g71687c7c1d-goog Message-ID: <20250527180703.129336-4-irogers@google.com> Subject: [PATCH v1 3/6] perf symbol: Move demangling code out of symbol-elf.c From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , "=?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?=" , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Jiapeng Chong , James Clark , Howard Chu , Weilin Wang , Stephen Brennan , Andi Kleen , Dmitry Vyukov , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" symbol-elf.c is used when building with libelf, symbol-minimal is used otherwise. There is no reason the demangling code with no dependencies on libelf is part of symbol-elf.c so move to symbol.c. This allows demangling tests to pass with NO_LIBELF=3D1. Signed-off-by: Ian Rogers --- tools/perf/util/demangle-cxx.h | 2 + tools/perf/util/symbol-elf.c | 86 ------------------------------- tools/perf/util/symbol-minimal.c | 7 --- tools/perf/util/symbol.c | 87 ++++++++++++++++++++++++++++++++ 4 files changed, 89 insertions(+), 93 deletions(-) diff --git a/tools/perf/util/demangle-cxx.h b/tools/perf/util/demangle-cxx.h index 26b5b66c0b4e..9359937a881a 100644 --- a/tools/perf/util/demangle-cxx.h +++ b/tools/perf/util/demangle-cxx.h @@ -2,6 +2,8 @@ #ifndef __PERF_DEMANGLE_CXX #define __PERF_DEMANGLE_CXX 1 =20 +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c index 8734e8b6cf84..60f37f149a87 100644 --- a/tools/perf/util/symbol-elf.c +++ b/tools/perf/util/symbol-elf.c @@ -13,17 +13,12 @@ #include "maps.h" #include "symbol.h" #include "symsrc.h" -#include "demangle-cxx.h" -#include "demangle-ocaml.h" -#include "demangle-java.h" -#include "demangle-rust-v0.h" #include "machine.h" #include "vdso.h" #include "debug.h" #include "util/copyfile.h" #include #include -#include #include #include #include @@ -280,82 +275,6 @@ static int elf_read_program_header(Elf *elf, u64 vaddr= , GElf_Phdr *phdr) return -1; } =20 -static bool want_demangle(bool is_kernel_sym) -{ - return is_kernel_sym ? symbol_conf.demangle_kernel : symbol_conf.demangle; -} - -/* - * Demangle C++ function signature, typically replaced by demangle-cxx.cpp - * version. - */ -#ifndef HAVE_CXA_DEMANGLE_SUPPORT -char *cxx_demangle_sym(const char *str __maybe_unused, bool params __maybe= _unused, - bool modifiers __maybe_unused) -{ -#ifdef HAVE_LIBBFD_SUPPORT - int flags =3D (params ? DMGL_PARAMS : 0) | (modifiers ? DMGL_ANSI : 0); - - return bfd_demangle(NULL, str, flags); -#elif defined(HAVE_CPLUS_DEMANGLE_SUPPORT) - int flags =3D (params ? DMGL_PARAMS : 0) | (modifiers ? DMGL_ANSI : 0); - - return cplus_demangle(str, flags); -#else - return NULL; -#endif -} -#endif /* !HAVE_CXA_DEMANGLE_SUPPORT */ - -static char *demangle_sym(struct dso *dso, int kmodule, const char *elf_na= me) -{ - struct demangle rust_demangle =3D { - .style =3D DemangleStyleUnknown, - }; - char *demangled =3D NULL; - - /* - * We need to figure out if the object was created from C++ sources - * DWARF DW_compile_unit has this, but we don't always have access - * to it... - */ - if (!want_demangle((dso && dso__kernel(dso)) || kmodule)) - return demangled; - - rust_demangle_demangle(elf_name, &rust_demangle); - if (rust_demangle_is_known(&rust_demangle)) { - /* A rust mangled name. */ - if (rust_demangle.mangled_len =3D=3D 0) - return demangled; - - for (size_t buf_len =3D roundup_pow_of_two(rust_demangle.mangled_len * 2= ); - buf_len < 1024 * 1024; buf_len +=3D 32) { - char *tmp =3D realloc(demangled, buf_len); - - if (!tmp) { - /* Failure to grow output buffer, return what is there. */ - return demangled; - } - demangled =3D tmp; - if (rust_demangle_display_demangle(&rust_demangle, demangled, buf_len, - /*alternate=3D*/true) =3D=3D OverflowOk) - return demangled; - } - /* Buffer exceeded sensible bounds, return what is there. */ - return demangled; - } - - demangled =3D cxx_demangle_sym(elf_name, verbose > 0, verbose > 0); - if (demangled) - return demangled; - - demangled =3D ocaml_demangle_sym(elf_name); - if (demangled) - return demangled; - - return java_demangle_sym(elf_name, JAVA_DEMANGLE_NORET); -} - struct rel_info { u32 nr_entries; u32 *sorted; @@ -868,11 +787,6 @@ int dso__synthesize_plt_symbols(struct dso *dso, struc= t symsrc *ss) return 0; } =20 -char *dso__demangle_sym(struct dso *dso, int kmodule, const char *elf_name) -{ - return demangle_sym(dso, kmodule, elf_name); -} - /* * Align offset to 4 bytes as needed for note name and descriptor data. */ diff --git a/tools/perf/util/symbol-minimal.c b/tools/perf/util/symbol-mini= mal.c index c9b7a1ca5e52..908f509bbb78 100644 --- a/tools/perf/util/symbol-minimal.c +++ b/tools/perf/util/symbol-minimal.c @@ -355,13 +355,6 @@ void symbol__elf_init(void) { } =20 -char *dso__demangle_sym(struct dso *dso __maybe_unused, - int kmodule __maybe_unused, - const char *elf_name __maybe_unused) -{ - return NULL; -} - bool filename__has_section(const char *filename __maybe_unused, const char= *sec __maybe_unused) { return false; diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c index fe801880afea..9d712416f0b6 100644 --- a/tools/perf/util/symbol.c +++ b/tools/perf/util/symbol.c @@ -19,6 +19,11 @@ #include "build-id.h" #include "cap.h" #include "cpumap.h" +#include "debug.h" +#include "demangle-cxx.h" +#include "demangle-java.h" +#include "demangle-ocaml.h" +#include "demangle-rust-v0.h" #include "dso.h" #include "util.h" // lsdir() #include "debug.h" @@ -36,6 +41,7 @@ #include "header.h" #include "path.h" #include +#include #include =20 #include @@ -2648,3 +2654,84 @@ int symbol__validate_sym_arguments(void) } return 0; } + +static bool want_demangle(bool is_kernel_sym) +{ + return is_kernel_sym ? symbol_conf.demangle_kernel : symbol_conf.demangle; +} + +/* + * Demangle C++ function signature, typically replaced by demangle-cxx.cpp + * version. + */ +#ifndef HAVE_CXA_DEMANGLE_SUPPORT +char *cxx_demangle_sym(const char *str __maybe_unused, bool params __maybe= _unused, + bool modifiers __maybe_unused) +{ +#ifdef HAVE_LIBBFD_SUPPORT + int flags =3D (params ? DMGL_PARAMS : 0) | (modifiers ? DMGL_ANSI : 0); + + return bfd_demangle(NULL, str, flags); +#elif defined(HAVE_CPLUS_DEMANGLE_SUPPORT) + int flags =3D (params ? DMGL_PARAMS : 0) | (modifiers ? DMGL_ANSI : 0); + + return cplus_demangle(str, flags); +#else + return NULL; +#endif +} +#endif /* !HAVE_CXA_DEMANGLE_SUPPORT */ + +static char *demangle_sym(struct dso *dso, int kmodule, const char *elf_na= me) +{ + struct demangle rust_demangle =3D { + .style =3D DemangleStyleUnknown, + }; + char *demangled =3D NULL; + + /* + * We need to figure out if the object was created from C++ sources + * DWARF DW_compile_unit has this, but we don't always have access + * to it... + */ + if (!want_demangle((dso && dso__kernel(dso)) || kmodule)) + return demangled; + + rust_demangle_demangle(elf_name, &rust_demangle); + if (rust_demangle_is_known(&rust_demangle)) { + /* A rust mangled name. */ + if (rust_demangle.mangled_len =3D=3D 0) + return demangled; + + for (size_t buf_len =3D roundup_pow_of_two(rust_demangle.mangled_len * 2= ); + buf_len < 1024 * 1024; buf_len +=3D 32) { + char *tmp =3D realloc(demangled, buf_len); + + if (!tmp) { + /* Failure to grow output buffer, return what is there. */ + return demangled; + } + demangled =3D tmp; + if (rust_demangle_display_demangle(&rust_demangle, demangled, buf_len, + /*alternate=3D*/true) =3D=3D OverflowOk) + return demangled; + } + /* Buffer exceeded sensible bounds, return what is there. */ + return demangled; + } + + demangled =3D cxx_demangle_sym(elf_name, verbose > 0, verbose > 0); + if (demangled) + return demangled; + + demangled =3D ocaml_demangle_sym(elf_name); + if (demangled) + return demangled; + + return java_demangle_sym(elf_name, JAVA_DEMANGLE_NORET); +} + +char *dso__demangle_sym(struct dso *dso, int kmodule, const char *elf_name) +{ + return demangle_sym(dso, kmodule, elf_name); +} --=20 2.49.0.1204.g71687c7c1d-goog From nobody Fri Sep 5 20:21:06 2025 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (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 E38E6280CD6 for ; Tue, 27 May 2025 18:07:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748369251; cv=none; b=mYUw0FNm8eKLTaEConHcGe+5qUzusCHFjccBptKincwtdnLOMnTrua1sANfEB2WEyPVh+SHs+zV5Yz6uN2sl24UdODdZuSorhZ2I+wwoiAYQaVliI/pxOrslUl5v+j9H0yi0TbeL5Xw9/vtNJHSNCmGeYZ53y1NrBDiawVjd9Kc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748369251; c=relaxed/simple; bh=gnsE73TCHXacfNt+jnheidFzg4YPcJ5undugQ3z2NwQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=f1BU1L9+I5DCyDi4+GPQ2O7GweqPL00lQaP2Bx7ZIyvjxfGdllFJpGCAFJASlWU9GK7IVypoyrL69SkB7oiX0PaBnVvWMZO3t+No3HVuoPJBhkQnDnQhQmTYY8vdDdqxhzCryTaXJx8xtzzx2pT/w0XzSS1wTtO/HrQeg8LnipI= 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=IagMytWp; arc=none smtp.client-ip=209.85.214.202 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="IagMytWp" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2340c08b412so40727075ad.2 for ; Tue, 27 May 2025 11:07:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1748369249; x=1748974049; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=5wXMXlAyZvUvXf8QP1+5WxcJsJtq5NumQSWOq2OgGFg=; b=IagMytWpsKN45fhzxWepSUd+CRqhDzs2pxtfp2UUtYhdqBxshxZIUvoqxZbMQTzamS zHi/7jnJ7fOgLAQSXzbgFvbESTMjxpjKVA8c4GsisElAG7Zp3v/GGKoZdBnXfMAPhJxU WXvrD7rCav0+IyGoD26ZiIB8Mptp5szMiLrQMHvi+Afj7U6IV+Yv95kkuXDQAhmW78+8 C9L6olmg59yAA1Qc4suMH49TNz/xTx1501f4Fmt4YwSxFsjFVOR1t884R2rijZAAqWI4 RctNC5r8EsrsgaLNr2+NBIUOYkMWDZkA6eyGgQ7mHrcfKEG/2vZmKuF1nIuGrDJFD0El bLUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748369249; x=1748974049; h=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=5wXMXlAyZvUvXf8QP1+5WxcJsJtq5NumQSWOq2OgGFg=; b=Odbpejnx/ZIfVUHPDmS2xljc1sFrarWV/eGv5Ai0aMCkrMwZgSHtJj9OzBLRWqnSqZ E8TczKumsLPAbhV2pf5vRU5KlA+5o8kSxxL0omIuMC8MsC4CElY+MtUj7NXlkofNXd7u h360mTPGNRDvy0dPyTgJc6sd/xicE27Bz0AQJebLneovFcmc0r8mGjJ6z9Qpo+FTMBE1 tyukjfBVOG7wbx8C5FlVapqGBNNiYggCdDBYSJ4R+9wE2AdM3u932aKghK8//tua1mm/ TIEw+5FPLzEoigwBwUGhqAAeO48rgxCpz7ZbRF1wtBWFZbkVG6VUwXoGOwS8GugaCfuL IJkg== X-Forwarded-Encrypted: i=1; AJvYcCUxKvICgT10mt2jP81ht59iqxZyxI1nmZ8VCKfcbUKYEerFaSAYTqamRj1LSgAKJcIs5E0NBDagyRPu6xc=@vger.kernel.org X-Gm-Message-State: AOJu0YzqJv5OArxh/80VLcWV+ciluqrJunIGJ6T+ND+x12g9oMPE/ViW 5KARbYqGQnrzgxqRBnX0Mdi+CuzyPbXck7cSKUzVEFiQBVpDILQpWRDQy80hO4AfBccKoDEPz5x AqtZTwZ8JUw== X-Google-Smtp-Source: AGHT+IEvPoU4s2ajTl/FjlJUl0arj/O3MM195pyQFg60cA88dWs1gj7e6UdnPf1MO/hOFWdqepM+jxUI6G+V X-Received: from plkb13.prod.google.com ([2002:a17:903:fad:b0:231:6301:a4a3]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:2347:b0:234:a063:e2aa with SMTP id d9443c01a7336-234a063e55bmr40374805ad.52.1748369248985; Tue, 27 May 2025 11:07:28 -0700 (PDT) Date: Tue, 27 May 2025 11:07:01 -0700 In-Reply-To: <20250527180703.129336-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: <20250527180703.129336-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1204.g71687c7c1d-goog Message-ID: <20250527180703.129336-5-irogers@google.com> Subject: [PATCH v1 4/6] perf intel-tpebs: Avoid race when evlist is being deleted From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , "=?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?=" , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Jiapeng Chong , James Clark , Howard Chu , Weilin Wang , Stephen Brennan , Andi Kleen , Dmitry Vyukov , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Reading through the evsel->evlist may seg fault if a sample arrives when the evlist is being deleted. Detect this case and ignore samples arriving when the evlist is being deleted. Fixes: bcfab08db7fb ("perf intel-tpebs: Filter non-workload samples") Signed-off-by: Ian Rogers --- tools/perf/util/intel-tpebs.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/intel-tpebs.c b/tools/perf/util/intel-tpebs.c index 4ad4bc118ea5..3b92ebf5c112 100644 --- a/tools/perf/util/intel-tpebs.c +++ b/tools/perf/util/intel-tpebs.c @@ -162,9 +162,17 @@ static bool is_child_pid(pid_t parent, pid_t child) =20 static bool should_ignore_sample(const struct perf_sample *sample, const s= truct tpebs_retire_lat *t) { - pid_t workload_pid =3D t->evsel->evlist->workload.pid; - pid_t sample_pid =3D sample->pid; + pid_t workload_pid, sample_pid =3D sample->pid; =20 + /* + * During evlist__purge the evlist will be removed prior to the + * evsel__exit calling evsel__tpebs_close and taking the + * tpebs_mtx. Avoid a segfault by ignoring samples in this case. + */ + if (t->evsel->evlist =3D=3D NULL) + return true; + + workload_pid =3D t->evsel->evlist->workload.pid; if (workload_pid < 0 || workload_pid =3D=3D sample_pid) return false; =20 --=20 2.49.0.1204.g71687c7c1d-goog From nobody Fri Sep 5 20:21:06 2025 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (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 A8550281375 for ; Tue, 27 May 2025 18:07:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748369253; cv=none; b=TVz8UCQQxk2YSIdhMOcoPvepZAMt0ky4/tce4/ovleML/+euLUKPNfxNvBTeVBMRFuXgRJArH3sCbLy363BxMBVipFzd7AuRz5HumQgXLNAkNJu5oG18WYWnGMDkaKk10PhXlIe1hLCtyvwspgyGTNGs/3DxQNgXZTav0HmCBD0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748369253; c=relaxed/simple; bh=CBWXDqwmWst2ZqdY/0uSvasMfgfkKz/Uh3ju60ADh2M=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=i98/e/ByrOT7gBwn6P8U9NmrG8xXPEha2GVdzoPpsOaGPoM7SIvjehwOzHiUeC2Scf/Q6b2OsEtG9TrestJneX6KwgjzmbL+SlIdhXeN84WWW+Qxbg9BNb6F10keieEZRgpqyWLCJTWo803E1asopfpB4Cz7Au/XVnKaYUX3WKk= 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=zL0jlFJX; arc=none smtp.client-ip=209.85.214.202 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="zL0jlFJX" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2323bd7f873so36157475ad.1 for ; Tue, 27 May 2025 11:07:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1748369251; x=1748974051; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=MX8V9w5FVeExaYuyetA8waEgh5LNED363u7Lxm8ca88=; b=zL0jlFJXGyxlsUD21aqW0bFet2sLNYLeKMK1o4Ro8srPJOIgc4bW4qZXvdryrk4iKP B6ras8VwRLUKNQM6yBNgHclzhv99bF6PEjiL4ZSNye6yK4g54jjITLEnf9qkfUr68BwE zR1v1zedIpqR4OlQ3hzlWF91OCLFwf1cevvV+TEgTynRrIM/M4nFirUR9lW0tSueze4s 1UjKRrhM5JvQ8LMM+jOAv2U1+Jo/ctj1BoZJauFehmBtyiImppp/PYB/oZfin6ZDTFeS v29YPd0glAJM4xMWMT7EJTYcAIR0mkuI+Ax6+xyOHmvXTF09cxss1D2zoVKUGyl86j9q aOaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748369251; x=1748974051; h=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=MX8V9w5FVeExaYuyetA8waEgh5LNED363u7Lxm8ca88=; b=mdwK6I66HnaNZs0hwFEBV7htSsjqMzGo/AV10Sfh68qRCIBfWh6PB9kNaXhCtAxm+7 Yu2Z8u0dQz5sTkBSKRnlPp5cz7sVsVE3dflr7DV2okTzBW/y5127UKIDRyKyvnkKVLDj YqThlq+b4WQfUXfr6LRDecoKm1bOvI8bRceu+3s8ZXu5vPmWuXgi8y3XEVmb1Bu/cSWk mvq0kydREMJ59foOYHJOHDCGN9Ex69iutnX3b+7ysGrzm9JaoYchEHtmfXpsNwlX/rRt YqIlDT49MfmTl7Gs5VPGof9u2b+ozuSgEjC0MDprYCo72rV+OJorkNwNNQ91dqnhMSYF wWVg== X-Forwarded-Encrypted: i=1; AJvYcCV429k75d5N9djzqNMBnROY60WbhC09UTjWGYILcbW1hNIHBVJhuTFg9hx6+9t4zrn1pdDTHjjcUHIQNY4=@vger.kernel.org X-Gm-Message-State: AOJu0Yyo5386p3B2Oqq3tD9X6Fmh25E1ML8gSBWsjW2HWO6kw9PRWRVr VuQduo59BV7TPkZ51SpjS6tBQX66ab2csQPNHXZ1MaJurr66Lb1GcAER7znNYjYZGd3f1duRHrH nQHlRHvwRRA== X-Google-Smtp-Source: AGHT+IGNqZt8gE2AinHrs5u59vtVCFuseQxQglwLlKwXoQLPdUfefW6JEtTDFuscAHg/KyKTb9DfJ3w8oY6h X-Received: from plll21.prod.google.com ([2002:a17:902:d055:b0:234:949d:4a5c]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:41c8:b0:234:a063:e2ac with SMTP id d9443c01a7336-234a063e540mr48300615ad.2.1748369250955; Tue, 27 May 2025 11:07:30 -0700 (PDT) Date: Tue, 27 May 2025 11:07:02 -0700 In-Reply-To: <20250527180703.129336-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: <20250527180703.129336-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1204.g71687c7c1d-goog Message-ID: <20250527180703.129336-6-irogers@google.com> Subject: [PATCH v1 5/6] perf test intel-pt: Skip jitdump test if no libelf From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , "=?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?=" , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Jiapeng Chong , James Clark , Howard Chu , Weilin Wang , Stephen Brennan , Andi Kleen , Dmitry Vyukov , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" jitdump support is only present if building with libelf. Skip the intel-pt jitdump test if perf isn't compiled with libelf support. Signed-off-by: Ian Rogers --- tools/perf/tests/shell/test_intel_pt.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/perf/tests/shell/test_intel_pt.sh b/tools/perf/tests/she= ll/test_intel_pt.sh index f3a9a040bacc..32a9b8dcb200 100755 --- a/tools/perf/tests/shell/test_intel_pt.sh +++ b/tools/perf/tests/shell/test_intel_pt.sh @@ -288,6 +288,11 @@ test_jitdump() jitdump_incl_dir=3D"${script_dir}/../../util" jitdump_h=3D"${jitdump_incl_dir}/jitdump.h" =20 + if ! perf check feature -q libelf ; then + echo "SKIP: libelf is needed for jitdump" + return 2 + fi + if [ ! -e "${jitdump_h}" ] ; then echo "SKIP: Include file jitdump.h not found" return 2 --=20 2.49.0.1204.g71687c7c1d-goog From nobody Fri Sep 5 20:21:06 2025 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (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 21E28283FE6 for ; Tue, 27 May 2025 18:07:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748369256; cv=none; b=qlENHLBCp16LeoVt82c6a2AU7KzbQ0ttB2pzgZFgggXB/g+bVGpkG2XakMNAC1imEaJsmPpLRvgivZkwiGnTVuTdq8aAJ2ElyoVgbgBOwBaGZLVJtLXeU6zurYQLa6IgdjDk8k8gRtO8IrQP7ZaxdULgsdTX83W1GEPxvCAQF+E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748369256; c=relaxed/simple; bh=tXkzECMzlUGyQjl7egm1CU1/fCbel46uwneu6zgwPzk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=tKU6gx2yLnMc8LtOD+QXgTgIGXVdFeQL13s8LjqEF2SQiO6ZRC+RAw2iaxSEvBy/4XPhSkYGJ+i7qUKxeD5W78dk2uH3bs0PN8AkgLKxve4aLQfcYQvCUTUwfSNPnxHxzvz6XWYQsIbwOXhzc3tg8HsvnU7qKy8wMKm3seiN78o= 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=FQSOM2mI; arc=none smtp.client-ip=209.85.216.73 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="FQSOM2mI" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-3111a07f102so119031a91.0 for ; Tue, 27 May 2025 11:07:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1748369253; x=1748974053; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=53MnQ+9b/xbDmubcmvXnyoPwpOHXHqAfzLcTz6K+YKE=; b=FQSOM2mIqH6aJIdKU6K/0MBXrnKW5Tzv8Epei/2gt3GbwJa+n5WlnFDDixuEbkPQi/ SE1I4hEypayHvBagYE4C0h4Vd1yrk1davR02Ro9DmUknExouna7zxXgON99Lxn4fnker cTB2kRutpv1DSYiKMipUgUC2NrRbW2Z6lh7l2q3ptHzWCJAXL+7/2j50S+7FI0SW83jc pI7/6ZxdNv59mdsGhxhTQemN5zaTkH4njTDAYXeaX0Z3lzELXxRhnXSJbI6GRwl5/0sn rj7m4Y3Vj006ideM55vA/3eFyLMnVkJ7snJ/q7tCXUGH5NpjgV9OpVJPAWSQhcla3iyy waLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748369253; x=1748974053; h=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=53MnQ+9b/xbDmubcmvXnyoPwpOHXHqAfzLcTz6K+YKE=; b=UWn0SsJgn6wIcvVs4hHZc8frQV5srZJ6msIma1qDSIXpdlPwrZ7VsY2dqX9X4uCKZT hZ0zLXFDm3LgJFWp2ydYeo2XSF5RvVAF5sVOFxEqPYTopHfpwq0dmYYpadTA06GgmqKm WAQVnF8PB78ondZfLy2gK4S+qm5UwLFfKdfW0CP8xLl/10pPyXuuWqBcsLifnlh+7xVz 0Fj76my23rCQR8fWAf8uxDMo8isYBwPUXy1GOoXvW8dz2MbG8aYDUaRk5v1r8HsApKbh jQbbQ97X6NZSv3AAZmb1BmBwmAFzyi7dee9Xl0bvh8WQb3D/XnzOcnO0fl+5vilZgb9v EZlQ== X-Forwarded-Encrypted: i=1; AJvYcCUoSWDe9az2KUF3Xqxlu37LqNdYy6gPkAALoLdCAAbzDveage/cq7Il6hMxz3zwdl2OUoauWa/QZW5uNcw=@vger.kernel.org X-Gm-Message-State: AOJu0YwaHZF+6PVEzEWaE8aJxJKpa+EmRV3VpACV6/+sW9uD+opPaX8B bp5FLpWTzuyYQ1smu1mr0QTL/7ZVXbduLSav/5b4S3AOiizPIv9US6oL6naEebBjH4SUKYzKCF4 W+FI8bAH+Bg== X-Google-Smtp-Source: AGHT+IEs/i83HeK/kXHhOK5DIrg4XPtLsBjqCQAU/a/iwZQOPo/OM37vvPcR33Fa5ijRrs50zf6/XS1uTSXu X-Received: from pjbsy7.prod.google.com ([2002:a17:90b:2d07:b0:311:466c:6062]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3cc3:b0:311:abba:53b6 with SMTP id 98e67ed59e1d1-311cce9432bmr2456854a91.14.1748369253276; Tue, 27 May 2025 11:07:33 -0700 (PDT) Date: Tue, 27 May 2025 11:07:03 -0700 In-Reply-To: <20250527180703.129336-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: <20250527180703.129336-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1204.g71687c7c1d-goog Message-ID: <20250527180703.129336-7-irogers@google.com> Subject: [PATCH v1 6/6] perf test trace_summary: Skip --bpf-summary tests if no libbpf From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , "=?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?=" , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Jiapeng Chong , James Clark , Howard Chu , Weilin Wang , Stephen Brennan , Andi Kleen , Dmitry Vyukov , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" If perf is built without libbpf (e.g. NO_LIBBPF=3D1) then the --bpf-summary perf trace tests will fail. Skip the tests as this is expected behavior. Signed-off-by: Ian Rogers --- tools/perf/tests/shell/trace_summary.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tools/perf/tests/shell/trace_summary.sh b/tools/perf/tests/she= ll/trace_summary.sh index 49766524dc21..f9bb7f9388be 100755 --- a/tools/perf/tests/shell/trace_summary.sh +++ b/tools/perf/tests/shell/trace_summary.sh @@ -53,6 +53,12 @@ test_perf_trace "-as --summary-mode=3Dthread --no-bpf-su= mmary" # summary only for system wide - total summary mode test_perf_trace "-as --summary-mode=3Dtotal --no-bpf-summary" =20 +if ! perf check feature -q bpf; then + echo "Skip --bpf-summary tests as perf built without libbpf" + rm -f ${OUTPUT} + exit 2 +fi + # summary only for system wide - per-thread summary with BPF test_perf_trace "-as --summary-mode=3Dthread --bpf-summary" =20 --=20 2.49.0.1204.g71687c7c1d-goog