From nobody Fri Sep 5 20:17:17 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 253571DF273 for ; Wed, 28 May 2025 03:26:42 +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=1748402804; cv=none; b=Lh1sYY4tm/f2FqoFuqZq0dftPtnvyv0bHE0BwieDWk3DLsIe9IufC9wF2QDyFjfVMuOvExGrcaIujO8Sy5bG3vud572xxDbeRedcrqO7PVGOZbI+L7Ei6yOq8Y+jbGqcaO2ItBWQGuHv/QiRkuotv0MKUBG2Goja3+aK2wirmPw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748402804; c=relaxed/simple; bh=IyXwtJLrxdIfaysBoqxVyV1K9s0htpjRBN+L5FIf8Jw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=mv28EKlAGjL48oSAdJrNx2wzZLWpS2Q7nrbp4zdk8QWGpKh/R9QhuiMJ6jKaz1YA3dXN5tr0XHs2UnT79NE81PA5KmyZI0w6Q0e/e+lBZDqclqytMcNEns+NnLFi5VWKGZPTwTxh1vtFrumUZSTRo/2gerGWXArvW5aHhN2W430= 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=a7vjQryp; 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="a7vjQryp" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-30ea0e890ccso3579003a91.2 for ; Tue, 27 May 2025 20:26:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1748402802; x=1749007602; 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=ZeVLDEhUDJmAFqCidyDGWPVhZk//2eKpKN6FRpBx+XE=; b=a7vjQrypnhNOoYwsIYH5V1uRBV6lOYP+xnrNSfmUwThfqeTS6RpA2TAVMixMchccR8 Z0pBkPFFTizvLqKkjqHH4xKXMQ+xYenMu467zp1r5zS2es3Zdvk3OL/ALoHU3aKrL25Y 2CKBfARzha3UXRBkKC2Mw5PU/KD++m9jth2jUj9YZZYvF/KiL2wqdpgJ0FmpcIwxiWRK ecHSBd6ngRHRXKkqR9lWtp8BNQSCoqZfCfr6A01FJ9r3u//P0OhRSewYYUKuAjMtppC0 mDaTkjMAHGlHamHPl48fzPBH5JM1X2npLtRjpiP8ysjYpSXxEqd9Snr0NhF37jkkAShj GT9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748402802; x=1749007602; 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=ZeVLDEhUDJmAFqCidyDGWPVhZk//2eKpKN6FRpBx+XE=; b=UPILnb7aciqdkwXegnvPm6+YefmQxl0KUFdt0GnEQtVO/80Zv6Bh7olraFU57uZBNm rs5ddPLHsWPzQUYiJ9wa+fhYcNBCmNu7k+5u9TukqK3YQfbPNgrP095R58+vQx/YXx4c xUX1XyDR/zqVhVr92Gm3687bE3YmuQ7umbt9f9hVrkI8TsC839kPoACS8loWd5q2RHW/ VsQgB6mi+RDlzdofkz7fjemCVYvpBFK1l4xeHTEiTGClRmM4a4aNlG9Zjuv76v8AkPDA 2gSd0mSzrNafmFaU1R+l5QJqNks1dmLrIOIcsMNxurHRsYlqFj0Q50KD1xhZ5Qshzlst NdKg== X-Forwarded-Encrypted: i=1; AJvYcCWVOvqa+xlpPqdBzUIjX8Ps2nL76ovt2Mmwp2HhPp11zxWJGC7otsk8r8KtZukdMBr+bB5pX/QcSsu/uOo=@vger.kernel.org X-Gm-Message-State: AOJu0YxS10zIvI5J1kvXi2NNhdfcpW5vFJcN+gPtn809tg8R2kLuALTa EaXKTuag73N/jy5YONgMBg4Zcpq++q08mlOkCid7hlO+HZvqab70lSCliCMBjtjDIp7gts5KIMF cClPLgYgG9Q== X-Google-Smtp-Source: AGHT+IF5/Db+YfQ6kRPHM9BBYAqg6LR/2oPo56seGYQ+IX3tevLyBAA7kqQ1Bn+Mj1RSMDeJA4slnRMqCIdt X-Received: from pjbsn15.prod.google.com ([2002:a17:90b:2e8f:b0:30c:4b1f:78ca]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:19cd:b0:311:e637:2880 with SMTP id 98e67ed59e1d1-311e637296emr1035928a91.26.1748402802410; Tue, 27 May 2025 20:26:42 -0700 (PDT) Date: Tue, 27 May 2025 20:26:31 -0700 In-Reply-To: <20250528032637.198960-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: <20250528032637.198960-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1238.gf8c92423fb-goog Message-ID: <20250528032637.198960-2-irogers@google.com> Subject: [PATCH v2 1/7] 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 Acked-by: Namhyung Kim --- 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..36c1d3090689 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.ehdr64), + 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.1238.gf8c92423fb-goog From nobody Fri Sep 5 20:17:17 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 EF8631E98E3 for ; Wed, 28 May 2025 03:26:44 +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=1748402806; cv=none; b=U68aiGSnLODOKtqX5J+By/VXc9bvaMK2fZKtZ5l6urGI1XNIv4yi5oIXDx+OBOmlI2ju4xd4iDa6O0jTh/JdMoXN6/QZiHf3T4LBnIVR1LaAL+Fq0DO+7eDouB0TVtEEsl4CXcH0NZeTZTCNiG6BZJIa6BKosX+RRcGENOaaDbk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748402806; c=relaxed/simple; bh=jUc1IY6H9eX9DWwv3dKNMS3/gSoGAX++OjVGeG8jIn4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=iWWdX05yNW8r9bIfF5Jko+J4zuO7q7Np5AwPvafT9lgcp9+sOcGy+DVoEl/ygdIIceLmUtZ6ztChTamV39NCufx8qTl0FQKFu5UUVEMA8VAwVMENxAmu6d+mJkJK2ZSHYNKj6s3nzdR8rT5wjRvHH/3dZ4YgFtTGh6/vz0WxfXc= 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=lD5O86WR; 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="lD5O86WR" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-310efe825ccso4036740a91.3 for ; Tue, 27 May 2025 20:26:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1748402804; x=1749007604; 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=nyC4vVVpudJGC7Yei8x1Vk6ZbLyamLbVvLo7R069uYY=; b=lD5O86WRpHqfcZyaVVgiXskQv8T8ZiGRk5sS9mrG4eObcMRx/CTF3psZbEikBT9DEz MPRtBc32stDM0qkZmmPNVnuuZCQKDVALrHnHpyRyyGnS/Cg9xlyI7SiFHX8mBeN7P+4s Srufg0VwJkpzlPnKjvtmTJqBeT5/BohRjPKZeIZy8gj55wnxs/DcQtd5hLDylQelAGEe jxYKuC8Llw0Opy2qwBHEyU6b5WHMHrQ15szXJmHcVT1oeQAe7xFo2ba7FLMTB5V48MOj 5O+3Xgb43kRhcaVqo8yBpW9lRFMDHXh6H2JNQU4QnPFRbPJ752C8eeGat/vC/awp/+Sz mj2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748402804; x=1749007604; 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=nyC4vVVpudJGC7Yei8x1Vk6ZbLyamLbVvLo7R069uYY=; b=kLDXo6zVJu36tzyJ4eC2c5p/343qVG/No0WoB7XS2baYjDnu8c+xkd6fzZwEb2R/1l D5mawQNhktlkHpa/3sBdlUPGBco7qoOu+MyHvmjTA257wELC3Wz9sta0P+dj7iSQwh8H jSsf6fLkXiWGrVreBQNbz7RbwR7YfFh1C0BA1r6oFSELge4N8jYfJ0xIhXJ5r++YNgLS /sKHaD/aV9h3nwH37vsnXUepDd/wGsqsQ3FyxEByeWn8q0SLHuF1URQ7NzCBRDMqiKYv tIBblrQF71x014WO8f78MxeL4GMjfzAf0tYlBDnwt7bCBi5rzLPMoAPBLOBbx5aPSv0r ryMw== X-Forwarded-Encrypted: i=1; AJvYcCUhqNKGdcs6lUdcLTemZhGYveE9GzawUmOST9G2UtSkdb+pBNb+jWZKJYPnvMUq8lhmJZvgMsRfuAgUgMg=@vger.kernel.org X-Gm-Message-State: AOJu0YzKjT0NjtUIyV9fOxmVQo+wi/v3drmvHMp+qUyWS/r+wjAsYENk r+HM5IvSxpXSR3cnTmJJDEbRNh+DVR26jeP1GSP24HXvSUe/+olu3GBItejF3fERfBmj6/Wg8i5 7X/ZkI2RKXw== X-Google-Smtp-Source: AGHT+IHsmZ9V8XQOmtKGv1In/BlcAjGYP1GDQLFYIWoxLijfD7JzDEKYuwg9FA+tOrPj5A3tH4xiTqileuFx X-Received: from pjbns20.prod.google.com ([2002:a17:90b:2514:b0:311:be10:7246]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:39cc:b0:311:d05c:936 with SMTP id 98e67ed59e1d1-311d05c0abbmr4775310a91.17.1748402804546; Tue, 27 May 2025 20:26:44 -0700 (PDT) Date: Tue, 27 May 2025 20:26:32 -0700 In-Reply-To: <20250528032637.198960-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: <20250528032637.198960-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1238.gf8c92423fb-goog Message-ID: <20250528032637.198960-3-irogers@google.com> Subject: [PATCH v2 2/7] 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 Acked-by: Namhyung Kim --- 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.1238.gf8c92423fb-goog From nobody Fri Sep 5 20:17:17 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 222DC1E9B21 for ; Wed, 28 May 2025 03:26:46 +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=1748402808; cv=none; b=VuEfaEykXhR8qu1j7bXZOIllHDOl7I+qRVPT2JVaNIyoV0odt7AJiPHgYQEYZtDolXq5m4P0bNT7SeRsffJvJs7qewqwP9/tAeCBaPFqd/VIKDF4sUc/LGNDHA0eJsGq+FFWCefGqMUFbPOxBnbDrvJYmcLWIPqL2pGLlhGtk2w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748402808; c=relaxed/simple; bh=xNIDxlQfIiKJ4wxyNS7RP5jDUpWuVCs2klHoieSL9Fw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=BrlvEtIr97hzPexay9AxO44KEKIRsEVABlTHP9a3bnuqoJui4Y7iQ3aJrg434Wy8qUDmI+xpzi0yae/14UUpbuvVtoD3eOlCXIpk7BcdbHvGJ0vMPuUWNA84tXARkZT+7upNxUxvGjnjVK0kBaAexOfRi6sYebS3FdJ1cqybp9M= 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=pM+A21js; 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="pM+A21js" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-311a6b43ed7so1287231a91.1 for ; Tue, 27 May 2025 20:26:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1748402806; x=1749007606; 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=XnnRVcWeffCiJ7bmNiIQw2qfvOmrVgzWpxYRzccEoxU=; b=pM+A21jsoWUY4kkAdcNy5L0NmlKE1T7K/Hl0Sm0Er3Qqa8Mq5ZOZd6iYfBtNF9Bust typtB1EPaXLEjiDf91fpESkytPOrYqjd1tBAGL2wCtPidCBahKlcoBBkZKnrq6U8OoV6 sqgxl8t6xjCiCPdAFeUdLAPOZ4p18LJul0aBm86DnDwXIJcPhEaMUVPX36tpLlnl37nn ijpQcBKilml76qs4Pmcd0E2tjJKow6e5xXGH6MxLqLfz3kNpcep4oXcTHnqoG4ytLrrn O6B+3TPz/O+HD4h2Cyfac3JUZJTfJn7mOpyISRJDOpjmb0e1fIIY3gqqggZCyPVTdwH5 6BOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748402806; x=1749007606; 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=XnnRVcWeffCiJ7bmNiIQw2qfvOmrVgzWpxYRzccEoxU=; b=TZLj1b90KRf1qVfUG7I+ZC3eqk8Fu596/OOtJvKNp2QYI2WTR8LhkRFIRDh04TNg7u sxDPwYAr6oQJ0Pqj2s3FEE/9A7Q5GqnuNkfRcNOtG5KxmJ9ttv1yrKD04+rocIfJ9/8u iPx6i4LWN3bPLWv1y3bSgbT7qMZiLhLuMCIMEu676gEFQ2xn6OJsDAiRZPBZWvpiCUc4 LpjB73R23DFjGVSu5yERgdgqM9sAOfSv0ewkjwjXwvsfhfQ40hFLynQLaV/O10xq5a/M uSM9Ll2EyNh6FS88FTbDjWoOpz/1h04kGEQoUsAgzMzvz13tU+s2/eH1CLhPLdHektSd 7SFw== X-Forwarded-Encrypted: i=1; AJvYcCX8sxyCVR3Vo0MAhqdKNPKHTXdrEhHVUIecoAGEKYteajoor8yynfhSiOVWXIz9WPkiAVlusnf+uPJMYQE=@vger.kernel.org X-Gm-Message-State: AOJu0YzDV7fgkoqrDeoyjrxPAkLQrUSqH/K7f/qOA+c8I6Cqis73DDCN i51RVi/ik9wp21M5mWWLMV+kbD0YU6bjptDzdKZCXY6NvYHDjYg1IkGUMJuceTpGHSLNQc/p2nE DkvOzACJuvA== X-Google-Smtp-Source: AGHT+IFJMChLC+TkmSh5O0FPRu7yheRmG1QS+8bZbiYRRriC4rfm6fuVpZgsk57MC2MAKAXqJsr4uY68qQkL X-Received: from pjbpx18.prod.google.com ([2002:a17:90b:2712:b0:311:8076:14f1]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:55c3:b0:2ee:94d1:7a89 with SMTP id 98e67ed59e1d1-3110f0ee05cmr23131668a91.1.1748402806373; Tue, 27 May 2025 20:26:46 -0700 (PDT) Date: Tue, 27 May 2025 20:26:33 -0700 In-Reply-To: <20250528032637.198960-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: <20250528032637.198960-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1238.gf8c92423fb-goog Message-ID: <20250528032637.198960-4-irogers@google.com> Subject: [PATCH v2 3/7] 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 Acked-by: Namhyung Kim --- 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 36c1d3090689..c73fe2e09fe9 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.1238.gf8c92423fb-goog From nobody Fri Sep 5 20:17:17 2025 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.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 40A081F1537 for ; Wed, 28 May 2025 03:26:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748402810; cv=none; b=KMeMrPNjfwqRGfUeUKGy2B4AOPLpQ0vS7uTUSAumlrp2crJ5Y2sVzKyH59qHN2ovnjCzxHgjigsmlq8JmjvEQfDeADL+5d8k5M4pAzqek8n3yKtqsSAq/YA0p9I1v8ZkkTUxWn+vWR6v3bRc/vZZy7NhY3gkh9pV8cFmbaMNMLw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748402810; c=relaxed/simple; bh=vodGThRXgNPhLOZhGOF+xKFixgiQjVsXK1iLntjGX+8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=Uj58lH38u1HDd6y2ftA0lX2J03wQ9hZ3rHPTN6hXX5fTnTKg8HO+LzyFbwdiAFNgvmnSlbgbmG24QkgCcIkZJwxE80BXgSGcVLQWbIRjKEUL7hMW0ooZ/vJxLYTNsqbFyMMJ98MqePsgFmcqqPfDz6DjDkxqokJ+8WtgbKXR12g= 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=p9vpnSQl; arc=none smtp.client-ip=209.85.216.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="p9vpnSQl" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-311e7d05931so232812a91.1 for ; Tue, 27 May 2025 20:26:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1748402808; x=1749007608; 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=kpuphHNFZYk51oscAtbjRW9L8GOQohc1UsTHbxwK6q0=; b=p9vpnSQlxH3k5pkSbvoN8l+1sTUuYCZO4qYklJh9SaQldD1ci6vKtvjpWlMdmXI94a zdnATKL+kUjp+pMwOXZjMIG/qDrRlb9Zpc/j50yTXdg+OT8mE5XqkfOsDmlKir4G2WSc ehRWnxzHuOvQeIVShhxqMdL1eqKj+CdKAeMpAyUU1KguWxo6JBbIZQZwEleFouCuUThf MzPPvQJKHS8tbM1TLThtRWoamxgcoHdX7e5aWR5ajRVPReX7rZRNH58XIWYASqtFcXPr MvAm/kI8p6/7GI4sJOIBUr8kn2NEoNWePUR7mNKI2E/zXn/6tGTzXmcjcPyjfxIIR7mh eazg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748402808; x=1749007608; 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=kpuphHNFZYk51oscAtbjRW9L8GOQohc1UsTHbxwK6q0=; b=GE4HRFytplgWQ5GoyQDqjLBLNONScxW15X6qGTnPXyFSc49qYzIFvLiQp12a/vBYec /RnMqx/T6KPhdbIcQ3fP14LDM1b/S0nNOo4EAu9ESf7FQhKerwkJK0g+FMcYgbu2o6dL XhcabnASc3MEZ8+vGHJL08BTybuASK3lUZOX4E5kqGvgTQdVx+ortjUoHU6to9Wioxmt lz59zcmM9wdvtfXFKn6KLKyyBDvNpoizVOjg0UHPcWdiCJsN+QMZyDxgQsCQcfeqkXJs LErBCAJSEO/VzX60w/Pa8PIklRAbaMmQAdoaj84rB76DOF+qUtvxoFlqTqq/tBR0/CQ9 dQcA== X-Forwarded-Encrypted: i=1; AJvYcCXhR7ajSEKza4Ej5k7nMIxU0U73rFR9LL0VxO8l1vNJiHA/DHyU/2DzgMDTrlV0KBxkPULCKkXmYKmy6o8=@vger.kernel.org X-Gm-Message-State: AOJu0Yx1BP+co5zOTL2+kPvNVo/lqG56ifM4vCJvcv08pk6hqddqAppX 1RF5FSFxMonBOug5NCMNMmMApG9nMBhqxAJu5Sl2ijTlZuOPJPeMLZW8MC5TZptQnqzPA6YD8Jm ElRKjwOzblw== X-Google-Smtp-Source: AGHT+IE2ixd/IZtDfy0s9qwtIYYwndIgI/TKU5XqnZAyvxDPYGq4ceG0lTr5ap0cGswGY9kMhS/jNXjv+XTN X-Received: from pjbsw8.prod.google.com ([2002:a17:90b:2c88:b0:311:b186:430c]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90a:fc4e:b0:2ff:5357:1c7e with SMTP id 98e67ed59e1d1-311100da2c8mr20426074a91.20.1748402808499; Tue, 27 May 2025 20:26:48 -0700 (PDT) Date: Tue, 27 May 2025 20:26:34 -0700 In-Reply-To: <20250528032637.198960-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: <20250528032637.198960-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1238.gf8c92423fb-goog Message-ID: <20250528032637.198960-5-irogers@google.com> Subject: [PATCH v2 4/7] 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 Acked-by: Namhyung Kim --- 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.1238.gf8c92423fb-goog From nobody Fri Sep 5 20:17:17 2025 Received: from mail-pg1-f201.google.com (mail-pg1-f201.google.com [209.85.215.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 513971F461A for ; Wed, 28 May 2025 03:26:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748402812; cv=none; b=FH4AyJ0fc170WHl0s4cVhqKB4IjekWGFXI/F4nCqXPLCFu+PlZwiyR/rEBQik7+PGSwhjoXNhPRTuj8FlflorSOg3AQ1KpQ0Z20vUrROQ2V7idtgLbW8oTLQDnGM4LNOT/TNfskj2Bxx63RteICjxdX7aweAv/p2qx/UxE0+WSM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748402812; c=relaxed/simple; bh=i8h7n5g7Yx2jMb7iS2ljtS04TytCEx4tl3E+OmLZXeY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=r9MJXHkQ+BvN0/TOpi0sOfv2xjDYuLZr4Hb6ympjVsxcm6w6VF+jO19r15cbdyrm41mWOczP1hgaGeVmVLu2bKaaO1ip7Gg60krK2NFZixINBKp4CLX/K8UOriHy5KWgzSJjIv5gOdHQSpVowLh/JHy8GWtIh9PP8L96Bn6np3I= 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=MnQMpx0W; arc=none smtp.client-ip=209.85.215.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="MnQMpx0W" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-b1442e039eeso2450888a12.0 for ; Tue, 27 May 2025 20:26:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1748402810; x=1749007610; 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=Zff0XHnUhlPO/m8VZhhkpC6s4Vm+rG87FvJ9ag7e9mc=; b=MnQMpx0Wkc1eM2dvpJug20o/44HENBxI6eOIyVk5NDURbIDlfJEXlF62dyTOfrWx7B /3aPvIPhSlBrjT3GJDAyRewq0Od14bnhm633WHwstKhml5+pdsGo1+S2jUcp9JBSpSHl GK87A7e6Ccd962xsGVcazyxnI/hhmswDPo7sL7EXNGr3GFIV/rlFYkSBZTzVnS62/TGd L6Fa1ZTv5EvhSEKMSqBZrieMPU7RToMuL1YBNuXmi3y/3MJHEaFhwZn6oEup5cwgKE9L 1QGv/BJfXm4go54zMMA+AhP8urwFO2PLD45qu/ZDBJlxlTKB+zn7cYS5xGGP+dhWVI9k bxlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748402810; x=1749007610; 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=Zff0XHnUhlPO/m8VZhhkpC6s4Vm+rG87FvJ9ag7e9mc=; b=VbB2kuLCejVP8S5QnU3ZlhWuRlh0gjfGmPVEnR6tBwZ8ZNXoAXS57NZEN4kTVK4k7B Zn2LOx9XqWfpCfkw+TDkEqkineM7uu6I+o/4VF32YGoucOp+sjkdjppCmyds38lHPJLB +yIGfOcPKGUFxCgoeY03zuYUO/CpS0Ja7Kda08qGAnJkE4UsfbhhHwEmaoYt5UAE05NM dCvTg28/djngm5yienYbUFv0n4KYd0/bxOI0ZOPp4+mwo6f9LM4DcEfYZA/R8fXRSbf7 9jCyfNB7FVVHM7cwBDEhV1hD+VV9FxuJ/IexenzBd+IHqkMV89Xw27zUue1svJWBw5vP /+uA== X-Forwarded-Encrypted: i=1; AJvYcCWlZB5kc00TVQzPjhOrXuriR7Q7bCheXCkiUG/3EfW7FpvQY2Pcy253jIHMLWyHeyiaU/lVXuu7GIl9/a4=@vger.kernel.org X-Gm-Message-State: AOJu0Yw4LVKJT3KifkOu3kpR3GWzI9kUZ2fosYkN02njnuA59eN2Tawg EAXlZoKOOgvAK5RxraPV8Rkag+3cx9xUQogDg5PAXq0WAxsPKJWzik76wCVyg6qYVU8DMGASOL7 HILxv/IZFkw== X-Google-Smtp-Source: AGHT+IHKJ/0qDXr34QCYKZBYCJAvA33TCQrzWCgJUlHJZjfno5vd2Mk/7+DxoSgW8MSUvTLSWTwhIR8Qf/no X-Received: from pjbse6.prod.google.com ([2002:a17:90b:5186:b0:311:676a:af17]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:1c0a:b0:2f8:b2c:5ef3 with SMTP id 98e67ed59e1d1-3110f20cc93mr27240188a91.14.1748402810537; Tue, 27 May 2025 20:26:50 -0700 (PDT) Date: Tue, 27 May 2025 20:26:35 -0700 In-Reply-To: <20250528032637.198960-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: <20250528032637.198960-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1238.gf8c92423fb-goog Message-ID: <20250528032637.198960-6-irogers@google.com> Subject: [PATCH v2 5/7] 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 Acked-by: Namhyung Kim --- 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.1238.gf8c92423fb-goog From nobody Fri Sep 5 20:17:17 2025 Received: from mail-pf1-f202.google.com (mail-pf1-f202.google.com [209.85.210.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 897AB1E9906 for ; Wed, 28 May 2025 03:26:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748402814; cv=none; b=XwGGqdAM8SPxNF6zOCF73fTX812ES2HH524RvxUVqTCH14htzgvEsy4BIIWm/1zr+UqM8aHMXOrXdPpkq912iC0tXfu8gsqFgkODRq6vS1z1uVdRcCWTlri5uJb4F6o0lSxoMYQVyuSn9Y8rvXeeY3GSjPCA7xuAPG84588ViOQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748402814; c=relaxed/simple; bh=yjTPsKSxmbyVi0xYc8waeGT8wUg8QG5YQf9FdsD3qXs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=EUXhMKJnEBhj6s7ygi8YXS7UJJhizHRNZDxveXy5dzTcVF6CobDlr+if1vECA/GKffl0hbnOPbJgngU/mnVsOjhIYqbwXGYkGRhwqv1X+ZXptnJ/6bgGWVzI3gjdUSDUAQjYDGliDYqtEXNzKDrc1BlvGdBUfyPzFpPmNAWtJKA= 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=Z3920srW; arc=none smtp.client-ip=209.85.210.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="Z3920srW" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-742a969a4d0so3268434b3a.2 for ; Tue, 27 May 2025 20:26:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1748402813; x=1749007613; 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=RZAHNOEi1GDiBdM9uSQlMPb9/h/uXsjvJd4PLbv+ikw=; b=Z3920srWuZ4exNdOXKZ/EZs6esEzLbSJUHEBiF0EMTgCcRr0Dh2lb4gKRNcyuGwRsJ koZS/eEdXUACZ9M9CniwbQhQuVK181iaNHg/ZFfQOiulq4dXRKSlKnmjx2t2J1CYyCFq s/MoxBy7XPxpXzxdlrEWD1gGheOMVm8L5DiiiyD8LgOfbbQCANRilMI1pK2KKJPHWZ5P t3Co+KIuL3JlettMPyRXXmXd76bEaY8BqPM1/IQFr83UnGEykcKJRPbwSNliPEygECvR frefzHPL8u/80u/gFA5Rb9+EWchmQQJXfUbLtQynnfXEoZ94uh6yGIolG1HGMF8PeMqm rBPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748402813; x=1749007613; 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=RZAHNOEi1GDiBdM9uSQlMPb9/h/uXsjvJd4PLbv+ikw=; b=cjn516DQBTt+tV+WhsQDMbY9nXRo8UTBkIkQDqEnNBtH0ojB32rCRINttRla5d8DrU hVbQyqg0AZj6yOJAM6knbufxNGXwF+SFeS6BwKSMgWFgcn1iOo6XJxHazmWnNqtt1hty tEpBv5CZvXkr1I+wBqmZfc52Ca56ouJaE03MKRcX/zqdBROnRFQxwFtzxeIOL94I2LX3 t7fK9a4GnvypUBtVUQ2xD6j9kZbVGY7DeXhMIqTc9C9UUHsuhQWCVZhEmLkQqGH/7ALB AvCcy5uSwUnFA5Q4zSJ3KGTZgMLEPLOfR5rh7/f4bpN6RD1yZf5qAWxBZnbL9qKfjFGE M1Ag== X-Forwarded-Encrypted: i=1; AJvYcCX5JCkR/MzVB8xClCP8hVsbZK2kY+EQcukDMczWuQn4TYcbmaSDY9BI3uHKB4tHRjwYo8NIpPakZA0bFcM=@vger.kernel.org X-Gm-Message-State: AOJu0YyFra3Rry+ZuRXQpBJK+FuY9oWlV6i8vmqRfg+6nraAVsR7UoRK 9aXPBy0TSKXwWCfy+rmvr/+/5SrPSSoeeyIw5CVMePEDM/ReK1PCEXKwepSrePcWEhsl1hwZRYI c17nRZ0ClyQ== X-Google-Smtp-Source: AGHT+IFHNdbunybiDC1c15s08f0AHDldblug++nnZKfibi8krDlpSwQGpmfT98+ER5+JgXKf2Eu1056F7el4 X-Received: from pfbcr6.prod.google.com ([2002:a05:6a00:f06:b0:740:b40b:d298]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:22c2:b0:736:450c:fa54 with SMTP id d2e1a72fcca58-745fde9e1c5mr21632802b3a.6.1748402812580; Tue, 27 May 2025 20:26:52 -0700 (PDT) Date: Tue, 27 May 2025 20:26:36 -0700 In-Reply-To: <20250528032637.198960-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: <20250528032637.198960-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1238.gf8c92423fb-goog Message-ID: <20250528032637.198960-7-irogers@google.com> Subject: [PATCH v2 6/7] 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 Acked-by: Howard Chu Acked-by: Namhyung Kim --- 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.1238.gf8c92423fb-goog From nobody Fri Sep 5 20:17:17 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 826D01E9B1A for ; Wed, 28 May 2025 03:26:55 +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=1748402816; cv=none; b=fGF4eDlfcJHveAZ4INhTqOn37gnvTPosl0ySiqa7iAVsM6NY8zWMsO4J7c2QDJ2yuTVWKzf9bNBxu/65j4G+6uIUQNUc2pwwY7A5rloQ1EQnNkeCACIKQyDffbk32xyh6GgOsTc5a7QiXCaUiA29x1Kp2AsgcUpM+DBkJaub6h0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748402816; c=relaxed/simple; bh=yDdkDVXJa4LAtUyk9Bgo06vGKbsrt3gQVFGfh0+Q7BY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=UvTc/Kl95zNf45/IA4YCKlOjvX5/gUD3Ln2Yo0p6a1tNXbKZsoF8h/TptMM8MNt5jFlmQoJy5vZGmCtkL992KKppQaFvQsxOy8t21sUx1VxIiR+OMmKuRDM2gb0jaKR24rqBB5aJwwu47bYI7VzRSU1If/9hj3Y21QZucid52ck= 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=srvkSJ2P; 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="srvkSJ2P" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-23446aa30d1so34716885ad.3 for ; Tue, 27 May 2025 20:26:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1748402815; x=1749007615; 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=OP73Bs+bCS0Lnt9HD+IXUqkNBcchfjlRThGQUgNgoPE=; b=srvkSJ2PnJ/TLx6Elmz8H8ATu/ClUVmrJkHZY1FndEu+KjbaNgVAsBGHvE17+TT3ka dfEhosodrtj4e//1PQSOgj4Emx4Dr7yP4JO6IxPU1TwCRogH8Rbkw85wC20uq13+MnNP aiDJvTGZYk8Ovb/+moRbL/Fqxc5tvN/9qQbBBkV2/kpVg8HtoVHZe0D8jhgVTAT0EUfz XA75bxm7OakOZgeG+YIRFSYIhRQ/mbTh0WywEKhfLuLMP/IJK5L09qHmMAnMoZNzTJEd 3yUvZF18VLfsY2tRQTcSzTCOmzNKRXibStzOyg7kj3qfU+GwmslgxOI1tZojvsm6GA/I idlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748402815; x=1749007615; 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=OP73Bs+bCS0Lnt9HD+IXUqkNBcchfjlRThGQUgNgoPE=; b=HFarD6UFZ4lKRRwMsDdDgh1UgBxH9faI1cphC4evLze/qfXRdMztmYpiJCcNlJuDTw nNhVv+uhOlmgh/JwXLC2qeFQVoUfJzL7zAum83OCNNFhM02OQ8O4vgKqdJlvo2ND0rAb 3LbR2AyLwIEKzJnkbR0f8sEy2Me4R+wJuCXeZKU7N2M4d99e+kSPEdQvQdo1DKKX2LRY QMb31ChyGcj/zYufyNv9mUxDpOxhwKskQG2tK4L7/x43WeVaUcqwD3ca2Hq6/pBLTIya XS/eHZZwBddqBQ5ILEn90gYBUuSz/XYwSRPRSoeQTy+QAtDcxXUM/dw/unFBxxe+y0pr MQTA== X-Forwarded-Encrypted: i=1; AJvYcCXon/d5BR6uzrrOB+u8bXYEQMciuIyErtVgtFKHEODDXrOWfKobi+7KavAH07Z1CtjM2o2GhTk25/D9QTQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yxe6YcxuQ39EpouP+Utp94qXguyGmG85mcHcsF0cK+6be0c+Zu5 IGX3knhw7JC2hP7t3TcE/xx2ZT/EP52miIA8BeFHJREmeGgWOi3heXrIJvugPXVHeYPijRxAwQx +LmjOxCFjPA== X-Google-Smtp-Source: AGHT+IHPzrydUxK+ONtesAiJ6lgu3uQKUAWeAXS6Dib84yogrTnHecMR8fxJOe+5D6+8+kKKgJB7wuHFxOj2 X-Received: from plbkm14.prod.google.com ([2002:a17:903:27ce:b0:234:bcd2:f39b]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:cf42:b0:224:c76:5e57 with SMTP id d9443c01a7336-23414feaadcmr247729375ad.39.1748402814817; Tue, 27 May 2025 20:26:54 -0700 (PDT) Date: Tue, 27 May 2025 20:26:37 -0700 In-Reply-To: <20250528032637.198960-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: <20250528032637.198960-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1238.gf8c92423fb-goog Message-ID: <20250528032637.198960-8-irogers@google.com> Subject: [PATCH v2 7/7] perf thread: Avoid recursively taking thread__comm_lock 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" Fix cases where functions that take thread_comm_lcok were called holding thread__comm_lock. This created some buggy behavior in perf top when built with sanitizers. Ensure -Wthread-safety warnings for clang work. Fixes: 8f454c95817d ("perf thread: Ensure comm_lock held for comm_list") Signed-off-by: Ian Rogers Acked-by: Namhyung Kim --- tools/perf/util/thread.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/tools/perf/util/thread.c b/tools/perf/util/thread.c index c202b98b36c2..f4ad15e1e314 100644 --- a/tools/perf/util/thread.c +++ b/tools/perf/util/thread.c @@ -201,13 +201,21 @@ int thread__set_namespaces(struct thread *thread, u64= timestamp, return ret; } =20 +static struct comm *__thread__comm(struct thread *thread) + SHARED_LOCKS_REQUIRED(thread__comm_lock(thread)) +{ + if (list_empty(thread__comm_list(thread))) + return NULL; + + return list_first_entry(thread__comm_list(thread), struct comm, list); +} + struct comm *thread__comm(struct thread *thread) { struct comm *res =3D NULL; =20 down_read(thread__comm_lock(thread)); - if (!list_empty(thread__comm_list(thread))) - res =3D list_first_entry(thread__comm_list(thread), struct comm, list); + res =3D __thread__comm(thread); up_read(thread__comm_lock(thread)); return res; } @@ -243,7 +251,7 @@ static int ____thread__set_comm(struct thread *thread, = const char *str, u64 timestamp, bool exec) EXCLUSIVE_LOCKS_REQUIRED(thread__comm_lock(thread)) { - struct comm *new, *curr =3D thread__comm(thread); + struct comm *new, *curr =3D __thread__comm(thread); =20 /* Override the default :tid entry */ if (!thread__comm_set(thread)) { @@ -294,8 +302,9 @@ int thread__set_comm_from_proc(struct thread *thread) } =20 static const char *__thread__comm_str(struct thread *thread) + SHARED_LOCKS_REQUIRED(thread__comm_lock(thread)) { - const struct comm *comm =3D thread__comm(thread); + const struct comm *comm =3D __thread__comm(thread); =20 if (!comm) return NULL; --=20 2.49.0.1238.gf8c92423fb-goog