From nobody Sat Jul 25 01:52:31 2026 Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) (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 D38FE437878 for ; Mon, 20 Jul 2026 22:52:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.71 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784587940; cv=none; b=YIdSyE2jmzOag5uJocpe9l0U3oWceG5nVSa0rwl8oaElhDgg+fGZJ4o5OSkqBCIh89wxdyTNd0ZisHdpScVZo4j6Ot8eGg50uI320BU0Izm7lPw3Df9IbZVvkHVV7Iivz3O6KbgVUO7Q1MenmZWPmRvuMg03acHXPRXFw0D5uVg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784587940; c=relaxed/simple; bh=pj0KjjICAGQcYFvJa34O/R6iaQNWxgcdqHf3gBWUcgM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=s/NZ/uM83wUP+z1h3blRDC2d+XY0fcy8SWe9K5lBWFPyRU6nqGOahQTpCoyZaaMtRt7QXtb9zWD9PgBgUxagCIycQ9pURLFjB4l7pUifOQTP6l8VwOHrmVyGILXCvhU9UkdmRhpR2d9hkTBL0+5ud7dV7++Bwy8hlDHfUBop8Q8= 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=wW+HIkn3; arc=none smtp.client-ip=209.85.216.71 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="wW+HIkn3" Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-38dc085b0a7so16197632a91.2 for ; Mon, 20 Jul 2026 15:52:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1784587937; x=1785192737; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=d5jG9NVpjcGT0OyijdNnlD4kEtCaHdlCbuAaGu1kfKk=; b=wW+HIkn32DjVUwEmvV1hVvTjyEQvNTzL2SYbK26opS99JabGE4UiIQcrp2/nkbsXNI DIbcPSVBl2CFj6/Mbi08uKw/w1DRz2SUPud4+VXt2C41V2AYrSwqXz55K4AAH3KPWKKA IjqUTeuIF4UUDCxweT0miYvXThBfPiMiyHWRQhTbRXLkJNaOc3/54wrViWxhCR2lnpRd Tl4pnMtX9s+cxWGOYpQk6aZQkpaw+Pz8nmx2U+GWwk4b2qmXrBYN9IHCGVzD6DXaJIok zMYTnEevCCN+c7z71xG8hh2TBh+U0doHwcrYShp1EC57w0rJcqgPRYlcLau7ZD75Tim4 Gr6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784587937; x=1785192737; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=d5jG9NVpjcGT0OyijdNnlD4kEtCaHdlCbuAaGu1kfKk=; b=dTZ+PfHv5iEfuUyxzkZPiHBNmh2c1scXlt6jlz3oEUdnjLAL/hejyzBG6Z76zDsRB6 9z9hj4eGHvGuV+4nm/3fFMfT8G72w/VgPYEk/YTV5LXS90go+dOthuG67vW9FME3bORl G+7mvEXKrmDry/rBR5fJPzIrUIXWkgqdCi3RWtLCoa9C+6ZLquF3/f5tfGhhmVFlr+c3 69wWqYw4ZT3cSigrEGzLMhpcvMrJC8j2CwxoN2HCc1lQ8cInlsbhmsD4Z4S4da4pWkdt zWKvsMzX49lRtd6Io/X+p6+Tq+zi8/do5bBDVjbQKYgxH1DSjRW5+6dcnX3EeQ/XPNcG DuRw== X-Forwarded-Encrypted: i=1; AHgh+Rr+KfHD/4OzMKNFDBL+T+TvGAg762q4oOsa2idtgWPsLu67LvsSMCLgni0/m/JDhVnz6adHSrH2+pP8m9w=@vger.kernel.org X-Gm-Message-State: AOJu0Yx8JFaFTwvasdDu6iTBPNXhGbIo9MyB1Zqa1YaVhGYDUyp4kAf4 pRQep5tBfQN5XUoyWSf3qAWlvut72wPaAa4mjxH9K2Kw4EsQOtRKjg6fUZ/MgZheLiMlZ7MXUdh aVgXQwKtVjg== X-Received: from dlbbs9.prod.google.com ([2002:a05:7022:909:b0:13b:2b79:dd1d]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:558d:b0:38d:dc13:6f94 with SMTP id 98e67ed59e1d1-38e4b586170mr17190141a91.37.1784587936937; Mon, 20 Jul 2026 15:52:16 -0700 (PDT) Date: Mon, 20 Jul 2026 15:51:57 -0700 In-Reply-To: <20260720225200.3810501-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: <20260720175455.3645946-1-irogers@google.com> <20260720225200.3810501-1-irogers@google.com> X-Mailer: git-send-email 2.55.0.229.g6434b31f56-goog Message-ID: <20260720225200.3810501-2-irogers@google.com> Subject: [PATCH v2 1/4] perf find-map: Remove PATH_MAX 128-byte stack array restriction From: Ian Rogers To: acme@kernel.org, namhyung@kernel.org Cc: adrian.hunter@intel.com, james.clark@linaro.org, jolsa@kernel.org, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, mingo@redhat.com, peterz@infradead.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, Ian Rogers Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use getline() to dynamically allocate the required line buffer for maps parsing, guaranteeing bounds safety and avoiding compiler warnings by evaluating the return value in the loop condition directly. Assisted-by: Antigravity:gemini-3.5-flash Signed-off-by: Ian Rogers --- tools/perf/util/find-map.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/find-map.c b/tools/perf/util/find-map.c index 7b2300588ece..bba511795a69 100644 --- a/tools/perf/util/find-map.c +++ b/tools/perf/util/find-map.c @@ -1,8 +1,13 @@ // SPDX-License-Identifier: GPL-2.0 +#include +#include +#include + static int find_map(void **start, void **end, const char *name) { FILE *maps; - char line[128]; + char *line =3D NULL; + size_t len =3D 0; int found =3D 0; =20 maps =3D fopen("/proc/self/maps", "r"); @@ -11,7 +16,7 @@ static int find_map(void **start, void **end, const char = *name) return -1; } =20 - while (!found && fgets(line, sizeof(line), maps)) { + while (!found && getline(&line, &len, maps) !=3D -1) { int m =3D -1; =20 /* We care only about private r-x mappings. */ @@ -25,6 +30,7 @@ static int find_map(void **start, void **end, const char = *name) found =3D 1; } =20 + free(line); fclose(maps); return !found; } --=20 2.55.0.229.g6434b31f56-goog From nobody Sat Jul 25 01:52:31 2026 Received: from mail-pj1-f70.google.com (mail-pj1-f70.google.com [209.85.216.70]) (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 7A9984307BC for ; Mon, 20 Jul 2026 22:52:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.70 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784587941; cv=none; b=KbSPRgebT2WECtOF7MK9O3RduFFEFaCzeZGiO/sd1hlFCxvNt8ywsEGLiOirDrTCu5ijuVb161cIJI/xBiLBy01e9O0WBN/O/MYJv/Li6omFp0ZpQPiU/EmLevjfNFibpRO95GBw8koo9UgndtC4Hv3/8ywHMOeZ+8bxhtpbMLA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784587941; c=relaxed/simple; bh=3wWG303Mi00lwKOloAJVM+64fgwc2/pnNdIhwKqSm6o=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=baxGxS3Jf0HCu2XmqfUlhE4u9vfhXIZRGiVirsHCyihSp+tduAjeZ6HW6OdGZpXMtpdJxjcLQmSNwInZ92Ttx4H3gk6EOCpoM2MqKujiHwtoB7OUSI++OPWFnPAM6lIaDkWhmjyoauM3pkCX1U0FuTlb+9upjXcRt+jTUqagXIw= 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=eWpdXQJi; arc=none smtp.client-ip=209.85.216.70 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="eWpdXQJi" Received: by mail-pj1-f70.google.com with SMTP id 98e67ed59e1d1-38e095fd889so15150955a91.2 for ; Mon, 20 Jul 2026 15:52:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1784587939; x=1785192739; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=QKteTyvHt7cD2g0v/QB2yYzZKHYzZC0yeBK3kqeJla0=; b=eWpdXQJiXxyQ8uobgU9g7D/7l0SP/45AlE1sTC9G3MHkhuFEtZOp4tu0jRJzeBR74j 4MtbJxazB4a2gC+/yD3OGpBjRKKK0x2+SOl1jiW8x1Vhp2GxwyZBz7tqvP2YRPcwg490 64wB2Vc9w5P+uyiSJrFqOjz4kj42SaXtGqhofoTpTf8mnNliViHOKZlgYBO2SWf/oJL5 +DPPra7jcl84ALpnZcbAm4Yllc1NHdFolMR0yiQBj2OMqJDdikhex95QjV6rRNNxcbdu vU1AtlLDgi0aBsv/Wfoh3vCxTrh259F/v6GhXYk2R+El6RCdUYMmXmvJNqjVcNziIa22 w0qA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784587939; x=1785192739; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=QKteTyvHt7cD2g0v/QB2yYzZKHYzZC0yeBK3kqeJla0=; b=E2IR6KAGI1k4xa9VPKcUsocJvfKXWLSPoeSv05tGnO4UvOxS0aOAaxWHNX6mJuzWuS Tz72pWsAQU6kN+XrWnOIjnuSwXlHVhcCHzyoVUWkaVa8I2afRQwc85d8k708fAH6oyxe 13jio1gJYnd8dqdbSuVTxzjQoOofU0XM6+KEHSn9VJs9iB924+zKy3+Ni9sj9dPcAiYX A6wYy+wFTuUoW+qC9BZMq4oeCTwDjM/2otGHgq9gh59IVjoT6TQeX/fT6kuKYmkvy2gx Mn6kHixMd/Twt/8K/J3PHiOhOXaq2HwLFGnOx3J8tymzarcbByCr7NtlcEBhg4+wHkS/ AvBQ== X-Forwarded-Encrypted: i=1; AHgh+Rq9UH6JqCVUiTEoYuIYFLHuQbW32GIv5gGM6VmoQeV5Hua2uaP0gbKbJ/lieCB3zekj1zPzTzGKnL5k/mE=@vger.kernel.org X-Gm-Message-State: AOJu0YzmKVihIzB0IRDfOET1T2hchczHexWqz5MdjGK2OvpnOZpBcFOq 4c4BTJd9ZUkNDlNCplfej4/OWFWl1Q0mdEHkvzZcpyCo9UIOxZpYfx7phXpd6rHWI9JxZxIyJa5 2/mjwS2cJKQ== X-Received: from dlea18-n1.prod.google.com ([2002:a05:701b:4212:10b0:139:afc8:5acc]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:52ce:b0:38e:655c:6516 with SMTP id 98e67ed59e1d1-38e655c657emr8275212a91.0.1784587938540; Mon, 20 Jul 2026 15:52:18 -0700 (PDT) Date: Mon, 20 Jul 2026 15:51:58 -0700 In-Reply-To: <20260720225200.3810501-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: <20260720175455.3645946-1-irogers@google.com> <20260720225200.3810501-1-irogers@google.com> X-Mailer: git-send-email 2.55.0.229.g6434b31f56-goog Message-ID: <20260720225200.3810501-3-irogers@google.com> Subject: [PATCH v2 2/4] perf synthetic-events: Fix line synchronization, bounds, and truncation bugs in proc maps reader From: Ian Rogers To: acme@kernel.org, namhyung@kernel.org Cc: adrian.hunter@intel.com, james.clark@linaro.org, jolsa@kernel.org, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, mingo@redhat.com, peterz@infradead.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, Ian Rogers Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Fix critical logic and boundary bugs in read_proc_maps_line() and caller. Ensure any mid-line hex/dec/char parsing failure invokes io__drain_line() safely, ignoring already-consumed newlines to preserve synchronization for subsequent map entries. Use standard '//toolong' fallback literal for over-length pathnames, and emit timeout flags for truncated entries securely via goto out;. Assisted-by: Antigravity:gemini-3.5-flash Signed-off-by: Ian Rogers --- tools/perf/util/synthetic-events.c | 197 ++++++++++++++++++++--------- 1 file changed, 137 insertions(+), 60 deletions(-) diff --git a/tools/perf/util/synthetic-events.c b/tools/perf/util/synthetic= -events.c index b75f9dcf4dbf..9a2b4d561e9e 100644 --- a/tools/perf/util/synthetic-events.c +++ b/tools/perf/util/synthetic-events.c @@ -291,6 +291,17 @@ static int perf_event__synthesize_fork(const struct pe= rf_tool *tool, return 0; } =20 +static void io__drain_line(struct io *io, int ch) +{ + if (ch =3D=3D '\n') + return; + if (ch =3D=3D -2 && io->data > io->buf && io->data[-1] =3D=3D '\n') + return; + + while (ch >=3D 0 && ch !=3D '\n') + ch =3D io__get_char(io); +} + static bool read_proc_maps_line(struct io *io, __u64 *start, __u64 *end, u32 *prot, u32 *flags, __u64 *offset, u32 *maj, u32 *min, @@ -299,69 +310,127 @@ static bool read_proc_maps_line(struct io *io, __u64= *start, __u64 *end, { __u64 temp; int ch; - char *start_pathname =3D pathname; + size_t written =3D 0; + bool overflowed =3D false; =20 - if (io__get_hex(io, start) !=3D '-') + ch =3D io__get_hex(io, start); + if (ch !=3D '-') { + if (!io->eof) + io__drain_line(io, ch); return false; - if (io__get_hex(io, end) !=3D ' ') + } + ch =3D io__get_hex(io, end); + if (ch !=3D ' ') { + if (!io->eof) + io__drain_line(io, ch); return false; + } =20 /* map protection and flags bits */ *prot =3D 0; ch =3D io__get_char(io); if (ch =3D=3D 'r') *prot |=3D PROT_READ; - else if (ch !=3D '-') + else if (ch !=3D '-') { + if (!io->eof) + io__drain_line(io, ch); return false; + } ch =3D io__get_char(io); if (ch =3D=3D 'w') *prot |=3D PROT_WRITE; - else if (ch !=3D '-') + else if (ch !=3D '-') { + if (!io->eof) + io__drain_line(io, ch); return false; + } ch =3D io__get_char(io); if (ch =3D=3D 'x') *prot |=3D PROT_EXEC; - else if (ch !=3D '-') + else if (ch !=3D '-') { + if (!io->eof) + io__drain_line(io, ch); return false; + } ch =3D io__get_char(io); if (ch =3D=3D 's') *flags =3D MAP_SHARED; else if (ch =3D=3D 'p') *flags =3D MAP_PRIVATE; - else + else { + if (!io->eof) + io__drain_line(io, ch); return false; - if (io__get_char(io) !=3D ' ') + } + ch =3D io__get_char(io); + if (ch !=3D ' ') { + if (!io->eof) + io__drain_line(io, ch); return false; + } =20 - if (io__get_hex(io, offset) !=3D ' ') + ch =3D io__get_hex(io, offset); + if (ch !=3D ' ') { + if (!io->eof) + io__drain_line(io, ch); return false; + } =20 - if (io__get_hex(io, &temp) !=3D ':') + ch =3D io__get_hex(io, &temp); + if (ch !=3D ':') { + if (!io->eof) + io__drain_line(io, ch); return false; + } *maj =3D temp; - if (io__get_hex(io, &temp) !=3D ' ') + ch =3D io__get_hex(io, &temp); + if (ch !=3D ' ') { + if (!io->eof) + io__drain_line(io, ch); return false; + } *min =3D temp; =20 ch =3D io__get_dec(io, inode); if (ch !=3D ' ') { - *pathname =3D '\0'; - return ch =3D=3D '\n'; + if (ch =3D=3D '\n') { + pathname[0] =3D '\0'; + return true; + } + if (!io->eof) + io__drain_line(io, ch); + return false; } + do { ch =3D io__get_char(io); } while (ch =3D=3D ' '); + while (true) { - if (ch < 0) - return false; - if (ch =3D=3D '\0' || ch =3D=3D '\n' || - (pathname + 1 - start_pathname) >=3D pathname_size) { - *pathname =3D '\0'; - return true; + if (ch < 0) { + if (overflowed) { + strlcpy(pathname, "//toolong", pathname_size); + return true; + } + pathname[written] =3D '\0'; + return written > 0; } - *pathname++ =3D ch; + if (ch =3D=3D '\0' || ch =3D=3D '\n') + break; + + if (written < (size_t)pathname_size - 1) + pathname[written++] =3D (char)ch; + else + overflowed =3D true; ch =3D io__get_char(io); } + + if (overflowed) + strlcpy(pathname, "//toolong", pathname_size); + else + pathname[written] =3D '\0'; + + return true; } =20 static void perf_record_mmap2__read_build_id(struct perf_record_mmap2 *eve= nt, @@ -463,45 +532,53 @@ int perf_event__synthesize_mmap_events(const struct p= erf_tool *tool, while (!io.eof) { static const char anonstr[] =3D "//anon"; size_t size, aligned_size; - - /* ensure null termination since stack will be reused. */ - event->mmap2.filename[0] =3D '\0'; + __u64 start, end, pgoff, ino; + u32 prot, flags, maj, min; =20 /* 00400000-0040c000 r-xp 00000000 fd:01 41038 /bin/cat */ - if (!read_proc_maps_line(&io, - &event->mmap2.start, - &event->mmap2.len, - &event->mmap2.prot, - &event->mmap2.flags, - &event->mmap2.pgoff, - &event->mmap2.maj, - &event->mmap2.min, - &event->mmap2.ino, - sizeof(event->mmap2.filename), - event->mmap2.filename)) + /* Read directly into event->mmap2.filename! */ + if (!read_proc_maps_line(&io, &start, &end, + &prot, &flags, &pgoff, + &maj, &min, &ino, + sizeof(event->mmap2.filename), + event->mmap2.filename)) { + if (io.eof) + break; continue; + } =20 - if ((rdclock() - t) > timeout) { - pr_warning("Reading %s/proc/%d/task/%d/maps time out. " - "You may want to increase " - "the time limit by --proc-map-timeout\n", - machine->root_dir, pid, pid); - truncation =3D true; - goto out; + if (!strcmp(event->mmap2.filename, "")) + strcpy(event->mmap2.filename, anonstr); + + if (hugetlbfs_mnt_len && + !strncmp(event->mmap2.filename, hugetlbfs_mnt, hugetlbfs_mnt_len)) { + strcpy(event->mmap2.filename, anonstr); + flags |=3D MAP_HUGETLB; } =20 - event->mmap2.ino_generation =3D 0; + size =3D strlen(event->mmap2.filename) + 1; + aligned_size =3D PERF_ALIGN(size, sizeof(u64)); + + event->mmap2.header.type =3D PERF_RECORD_MMAP2; =20 /* - * Just like the kernel, see __perf_event_mmap in kernel/perf_event.c + * Just like the kernel, see perf_misc_flags() in + * kernel/events/core.c */ if (machine__is_host(machine)) event->header.misc =3D PERF_RECORD_MISC_USER; else event->header.misc =3D PERF_RECORD_MISC_GUEST_USER; =20 - if ((event->mmap2.prot & PROT_EXEC) =3D=3D 0) { - if (!mmap_data || (event->mmap2.prot & PROT_READ) =3D=3D 0) + if ((rdclock() - t) > timeout) { + pr_warning("Reading %s/proc/%d/task/%d/maps time out. You may want to i= ncrease the time limit by --proc-map-timeout\n", + machine->root_dir, pid, pid); + truncation =3D true; + goto out; + } + + if ((prot & PROT_EXEC) =3D=3D 0) { + if (!mmap_data || (prot & PROT_READ) =3D=3D 0) continue; =20 event->header.misc |=3D PERF_RECORD_MISC_MMAP_DATA; @@ -511,26 +588,26 @@ int perf_event__synthesize_mmap_events(const struct p= erf_tool *tool, if (truncation) event->header.misc |=3D PERF_RECORD_MISC_PROC_MAP_PARSE_TIMEOUT; =20 - if (!strcmp(event->mmap2.filename, "")) - strcpy(event->mmap2.filename, anonstr); + event->mmap2.header.size =3D + offsetof(struct perf_record_mmap2, filename) + + aligned_size; =20 - if (hugetlbfs_mnt_len && - !strncmp(event->mmap2.filename, hugetlbfs_mnt, - hugetlbfs_mnt_len)) { - strcpy(event->mmap2.filename, anonstr); - event->mmap2.flags |=3D MAP_HUGETLB; - } + /* Zero the padding and ID header trailer safely! */ + memset(event->mmap2.filename + size, 0, + (aligned_size - size) + machine->id_hdr_size); =20 - size =3D strlen(event->mmap2.filename) + 1; - aligned_size =3D PERF_ALIGN(size, sizeof(u64)); - event->mmap2.len -=3D event->mmap.start; - event->mmap2.header.size =3D (sizeof(event->mmap2) - - (sizeof(event->mmap2.filename) - aligned_size)); - memset(event->mmap2.filename + size, 0, machine->id_hdr_size + - (aligned_size - size)); event->mmap2.header.size +=3D machine->id_hdr_size; + event->mmap2.start =3D start; + event->mmap2.len =3D end - start; + event->mmap2.pgoff =3D pgoff; + event->mmap2.maj =3D maj; + event->mmap2.min =3D min; + event->mmap2.ino =3D ino; + event->mmap2.ino_generation =3D 0; event->mmap2.pid =3D tgid; event->mmap2.tid =3D pid; + event->mmap2.prot =3D prot; + event->mmap2.flags =3D flags; =20 if (!symbol_conf.no_buildid_mmap2) perf_record_mmap2__read_build_id(&event->mmap2, machine, false); --=20 2.55.0.229.g6434b31f56-goog From nobody Sat Jul 25 01:52:31 2026 Received: from mail-pj1-f72.google.com (mail-pj1-f72.google.com [209.85.216.72]) (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 4AE1C43FD01 for ; Mon, 20 Jul 2026 22:52:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.72 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784587943; cv=none; b=A8DFltMmoyvqJUB+6KWOaVGYbvHEqTcgf1ZnBmU9ryh35vrpd4ZAZcIk/qSZmpZ+sFErsWrwei5AS2cbHjgmCBasN6gVXIlt2rKtAV1Ksq7OWm3DaEBTmvNtOzlW1Q9CEsUvHwn1tZjaI5JgV1TN7ShIPXoW0WttClQDYWbzVBg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784587943; c=relaxed/simple; bh=5HHYV2YtuskvpVXWLLiEwNUcmcEMrY8dXvLciuEgNo4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Tmn8E2ITfcmTa35vEyzekbjb3xXNGnX/XqbZyhKv3DqWLy1+1u7GyIxf5a2IPwpNWCSqu1orRoQwG5rjVCi9eKeeDR7ixmhWlRj6z6WI/p9beHqQFo/3hUlE68iNqRC6T9CQHBFI4/KuTDIxym1pOc9TL+KKVTKPXIuCeoj0vdI= 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=qF5cvBcy; arc=none smtp.client-ip=209.85.216.72 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="qF5cvBcy" Received: by mail-pj1-f72.google.com with SMTP id 98e67ed59e1d1-38dc085b0a7so16197682a91.2 for ; Mon, 20 Jul 2026 15:52:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1784587941; x=1785192741; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=dVysXzCxvN0YWO4pl9MoMoRFZ8JrR13DJYNHpKFDQUI=; b=qF5cvBcy0kCfy5nN8czq+tZ560rQj+xUPI1Rox8gFtbZzIhEbKyJTvF9phe9y3lwLW 4S0z4DN40DU4hdoBeatBfPpwce5TS7hkigXSf6WsCz0yiX5YwyPMvA4xG1Pr28iQZQ// /2+RV7+iMEpkwQz8RuPNYaQWxr86mf/N5PgBrlhI7Acd/Ly9aPx1aJnmmgjQSaxTm3Fx Ts3QK7vW0uWCBx0CXer6ZgacDBy2gZWGqRevkgIzBXtkq8gmW0OdhGuq4ZRXRFhENOsg 7jdBRRfZzlUEa0glnAssmxUyqh53xOHFPzCR53ttOG/1VUQTC/mm5tMH0gt9J3Icj8l/ 8hyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784587941; x=1785192741; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=dVysXzCxvN0YWO4pl9MoMoRFZ8JrR13DJYNHpKFDQUI=; b=S6INdeOgu2AI3wymjXngyfiXW3Blnwyfnmva69C4CAyzJYK30/BofACw0AtR+6jMG+ W2HxNsTTtMRn/xD2PkL62dO4MJGATeQ6hdKwSAdFXuxN/C/aTGuo94H7YYl/68ZyIQHf hVwZG2yJZ2iTMnXWIso8Tk34y4vUfYNxWb7qBWpMguf0UnHYqgU4OOJLdDHl/Oc2hfJi Uo8DqQXWrGXzUIkWhyk5sbHnFzloyKzkidgrwwAE0tFErAeqH1sAibXZABk7VaUDiugp 5xyJ7/NgQb6JXt6x2dDMh4lwrgcas1yBKV5SJ6KS3+t50AhgQB7hKI+2dyvLJJZVheTZ oByg== X-Forwarded-Encrypted: i=1; AHgh+Rpm2a0XT8tkLs1aA5FKBmatXoOhCRw08OslBN9ms73j1Gw14Cq7Pcyr7Ga7WTf5crte7RrNuaxSGOkMUfk=@vger.kernel.org X-Gm-Message-State: AOJu0YxkvutIXNaGoXIOyxJ9qQfzuQVR6mkBUeMhdkWdbifxTL3Y7Qm2 G4I4GIJvIvxJCWqJuRWHODq/BJ0ZOJ6+XbtBGrZDzjG0hJXJAT289sJgUwatvHdlyESfhLQFy0E xDjJeVlxwSg== X-Received: from dleb4-n2.prod.google.com ([2002:a05:701b:4244:20b0:13b:962e:3bc8]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:2807:b0:37e:9e9:6ffc with SMTP id 98e67ed59e1d1-38e4b532703mr16779161a91.25.1784587940457; Mon, 20 Jul 2026 15:52:20 -0700 (PDT) Date: Mon, 20 Jul 2026 15:51:59 -0700 In-Reply-To: <20260720225200.3810501-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: <20260720175455.3645946-1-irogers@google.com> <20260720225200.3810501-1-irogers@google.com> X-Mailer: git-send-email 2.55.0.229.g6434b31f56-goog Message-ID: <20260720225200.3810501-4-irogers@google.com> Subject: [PATCH v2 3/4] perf synthetic-events: Fix bounds, stale state, and misc flags in kernel module synthesis From: Ian Rogers To: acme@kernel.org, namhyung@kernel.org Cc: adrian.hunter@intel.com, james.clark@linaro.org, jolsa@kernel.org, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, mingo@redhat.com, peterz@infradead.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, Ian Rogers Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Fix potential buffer overruns in perf_event__synthesize_modules_maps_cb() by safely clamping long DSO names to the mmap/mmap2 filename boundaries. Explicitly assign and clear the misc flags and union padding across all iterations to prevent stale Build-ID state from leaking between module synthesis events. Assisted-by: Antigravity:gemini-3.5-flash Signed-off-by: Ian Rogers --- tools/perf/util/synthetic-events.c | 70 +++++++++++++++++++++--------- 1 file changed, 50 insertions(+), 20 deletions(-) diff --git a/tools/perf/util/synthetic-events.c b/tools/perf/util/synthetic= -events.c index 9a2b4d561e9e..068323b9510d 100644 --- a/tools/perf/util/synthetic-events.c +++ b/tools/perf/util/synthetic-events.c @@ -754,6 +754,7 @@ struct perf_event__synthesize_modules_maps_cb_args { perf_event__handler_t process; struct machine *machine; union perf_event *event; + u16 misc; }; =20 static int perf_event__synthesize_modules_maps_cb(struct map *map, void *d= ata) @@ -761,49 +762,78 @@ static int perf_event__synthesize_modules_maps_cb(str= uct map *map, void *data) struct perf_event__synthesize_modules_maps_cb_args *args =3D data; union perf_event *event =3D args->event; struct dso *dso; - size_t size; + size_t size, aligned_size; + int rc =3D 0; =20 if (!__map__is_kmodule(map)) return 0; =20 dso =3D map__dso(map); if (!symbol_conf.no_buildid_mmap2) { - size =3D PERF_ALIGN(dso__long_name_len(dso) + 1, sizeof(u64)); + const char *long_name =3D dso__long_name(dso); + + size =3D strlen(long_name); + if (size >=3D sizeof(event->mmap2.filename)) + size =3D sizeof(event->mmap2.filename) - 1; + + strlcpy(event->mmap2.filename, long_name, + sizeof(event->mmap2.filename)); + + aligned_size =3D PERF_ALIGN(size + 1, sizeof(u64)); event->mmap2.header.type =3D PERF_RECORD_MMAP2; - event->mmap2.header.size =3D (sizeof(event->mmap2) - - (sizeof(event->mmap2.filename) - size)); - memset(event->mmap2.filename + size, 0, args->machine->id_hdr_size); + event->mmap2.header.misc =3D args->misc; + event->mmap2.header.size =3D + offsetof(struct perf_record_mmap2, filename) + + aligned_size; + + /* Zero the padding and ID header trailer safely! */ + memset(event->mmap2.filename + size, 0, + (aligned_size - size) + args->machine->id_hdr_size); + event->mmap2.header.size +=3D args->machine->id_hdr_size; event->mmap2.start =3D map__start(map); event->mmap2.len =3D map__size(map); event->mmap2.pid =3D args->machine->pid; =20 - memcpy(event->mmap2.filename, dso__long_name(dso), dso__long_name_len(ds= o) + 1); - - /* Clear stale build ID from previous module iteration */ + /* Clear stale build ID and entire union from previous module iteration = */ event->mmap2.header.misc &=3D ~PERF_RECORD_MISC_MMAP_BUILD_ID; memset(event->mmap2.build_id, 0, sizeof(event->mmap2.build_id)); event->mmap2.build_id_size =3D 0; + event->mmap2.__reserved_1 =3D 0; + event->mmap2.__reserved_2 =3D 0; =20 perf_record_mmap2__read_build_id(&event->mmap2, args->machine, false); } else { - size =3D PERF_ALIGN(dso__long_name_len(dso) + 1, sizeof(u64)); + const char *long_name =3D dso__long_name(dso); + + size =3D strlen(long_name); + if (size >=3D sizeof(event->mmap.filename)) + size =3D sizeof(event->mmap.filename) - 1; + + strlcpy(event->mmap.filename, long_name, + sizeof(event->mmap.filename)); + + aligned_size =3D PERF_ALIGN(size + 1, sizeof(u64)); event->mmap.header.type =3D PERF_RECORD_MMAP; - event->mmap.header.size =3D (sizeof(event->mmap) - - (sizeof(event->mmap.filename) - size)); - memset(event->mmap.filename + size, 0, args->machine->id_hdr_size); + event->mmap.header.misc =3D args->misc; + event->mmap.header.size =3D + offsetof(struct perf_record_mmap, filename) + + aligned_size; + + /* Zero the padding and ID header trailer safely! */ + memset(event->mmap.filename + size, 0, + (aligned_size - size) + args->machine->id_hdr_size); + event->mmap.header.size +=3D args->machine->id_hdr_size; event->mmap.start =3D map__start(map); event->mmap.len =3D map__size(map); event->mmap.pid =3D args->machine->pid; - - memcpy(event->mmap.filename, dso__long_name(dso), dso__long_name_len(dso= ) + 1); } =20 if (perf_tool__process_synth_event(args->tool, event, args->machine, args= ->process) !=3D 0) - return -1; + rc =3D -1; =20 - return 0; + return rc; } =20 int perf_event__synthesize_modules(const struct perf_tool *tool, perf_even= t__handler_t process, @@ -828,13 +858,13 @@ int perf_event__synthesize_modules(const struct perf_= tool *tool, perf_event__han } =20 /* - * kernel uses 0 for user space maps, see kernel/perf_event.c - * __perf_event_mmap + * Just like the kernel, see perf_misc_flags() in + * kernel/events/core.c */ if (machine__is_host(machine)) - args.event->header.misc =3D PERF_RECORD_MISC_KERNEL; + args.misc =3D PERF_RECORD_MISC_KERNEL; else - args.event->header.misc =3D PERF_RECORD_MISC_GUEST_KERNEL; + args.misc =3D PERF_RECORD_MISC_GUEST_KERNEL; =20 rc =3D maps__for_each_map(maps, perf_event__synthesize_modules_maps_cb, &= args); =20 --=20 2.55.0.229.g6434b31f56-goog From nobody Sat Jul 25 01:52:31 2026 Received: from mail-pf1-f198.google.com (mail-pf1-f198.google.com [209.85.210.198]) (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 8950E446859 for ; Mon, 20 Jul 2026 22:52:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.198 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784587949; cv=none; b=XOC0/x72LYZ8835EYtcTR3yWA3OGYDYdRJo0CTSsMRWxQbXPN3zi+VLMplYl3k1JIsbhWuROcihRdI7D/2t+pzjroQgg9lyquW84dxZ91sMH+eHYvLchCJqBVhzw10oWbHak165q8n3xloV9UufvBRQ+JQ3jivb8k58cOpOFM+8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784587949; c=relaxed/simple; bh=3yay0veMsFj7vwcaAhqZB7S78e5bwAhi4kSuw/rHn+k=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Zf1ng47qsfDAduh9/2anfOD+w9FtfNFPwbEgBbjD3o1XarBOZtZLClH8tHdYcbhy/ERicCvm0W8xDJQgRh2Q1ZJGqcEmLNlCRgiK3Uu3OOYchrLr8KaYxQaJhakih4MbLEIApTg4Lscz+IrKo89qZmZIgPWRp5WM8+ycf/YYy7o= 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=RkrCzEkG; arc=none smtp.client-ip=209.85.210.198 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="RkrCzEkG" Received: by mail-pf1-f198.google.com with SMTP id d2e1a72fcca58-848662cd2a1so7749149b3a.2 for ; Mon, 20 Jul 2026 15:52:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1784587947; x=1785192747; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=CHcmZ3r9l7ED3Ld93xhYMri0AgqcafHtnu+fH+/O4JA=; b=RkrCzEkGCtfhd3zZwOXDYzhL3llNiS3j1q/O9p90vf/FJMJ0kH577Tzlnu+fGcpisZ q0LiLhSZ3AHa3pJKug2Wxj6pw4hzBaeil6J0CNkX21AfVBfn2ihs59Ek5/SWRuE9yx6Y RRT12d0e3tR0q8T+TiYzxBB+GiU7kw94HqCLFT1TCG/eKi5PLg+WOn+gvOLB8fygyEcA p6JjNMRoJkolv0vqAu76cTxRgLg84noTcvyl5YWHuGvnd8usafe/Lh0/tqj5KhhQ7blY bel8s8JCG3iGlMOI0vtgXM3tCt1hbHwP1SbIju8ZqQkzAQeV8XhkmDuNSLTnzBsxZeZC aTIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784587947; x=1785192747; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=CHcmZ3r9l7ED3Ld93xhYMri0AgqcafHtnu+fH+/O4JA=; b=iJSk3l5Wsj9Y4Sw0/dXuDZMitXHNsLgj97it9BwoGvb9m/RbCFwzS4XxIhCzg2xWG+ FM22VoFDzuWnjM0BzZedEA4hA2IgnU47l8LupC4pUjc6CJSnsHjU1WGOdlbD88y5uodP Mz582mz7vCfUGZVKrfncEoxO1Eeh9wN50NbLRMlEqYR5Un76RKL675LOCVKQOkWqgC+2 eJVixUVEmYzV+bccdaP+MaorjgY56jZzXqlc65lQum/Cw4taCdQJAII6Ur6fWggUrzsA 5JEcCu/1KZM7zfXADwbiokQg8D2auljLq1c2FmiFxEE0yUCw5IZTTi1ybjD0viicLvr8 vqug== X-Forwarded-Encrypted: i=1; AHgh+RrbBF4MB4sgjrSwayJRLFmugqWbJzJdfJrZE2izl+3yQjPcL42Xf947wes5gn4bYuLkPGnFbEpOhKv6/oI=@vger.kernel.org X-Gm-Message-State: AOJu0Yzn8HrWDCITtC4xQcueDKvS0u/iX7+hY/35qbfz7K0rWQjWZUXM is/GzcKmBw9BwfCVGiAFowZ57NB4j/zcyEJrFPKvPIRnxew3l8sDDV6e/jD+5xdNEPSpijFhe3L nBCOXR3xx4w== X-Received: from pfblx1.prod.google.com ([2002:a05:6a00:7541:b0:848:2a35:eb83]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:179c:b0:848:425a:4e31 with SMTP id d2e1a72fcca58-84c29274827mr16439225b3a.24.1784587946538; Mon, 20 Jul 2026 15:52:26 -0700 (PDT) Date: Mon, 20 Jul 2026 15:52:00 -0700 In-Reply-To: <20260720225200.3810501-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: <20260720175455.3645946-1-irogers@google.com> <20260720225200.3810501-1-irogers@google.com> X-Mailer: git-send-email 2.55.0.229.g6434b31f56-goog Message-ID: <20260720225200.3810501-5-irogers@google.com> Subject: [PATCH v2 4/4] perf synthetic-events: Fix bounds and union member access in mmap2 build_id synthesis From: Ian Rogers To: acme@kernel.org, namhyung@kernel.org Cc: adrian.hunter@intel.com, james.clark@linaro.org, jolsa@kernel.org, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, mingo@redhat.com, peterz@infradead.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, Ian Rogers Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Fix a critical logic bug in perf_event__synthesize_mmap2_build_id() where the wrong union member structure size and offset boundaries were utilized. Safely calculate the exact maximum allowed filename length to guarantee absolute stack and alignment boundaries for ID sample trailers, preventing -E2BIG overruns on very long filenames while meeting strict standard C compliance. Assisted-by: Antigravity:gemini-3.5-flash Signed-off-by: Ian Rogers --- tools/perf/util/synthetic-events.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/tools/perf/util/synthetic-events.c b/tools/perf/util/synthetic= -events.c index 068323b9510d..fb4f736f64c0 100644 --- a/tools/perf/util/synthetic-events.c +++ b/tools/perf/util/synthetic-events.c @@ -2447,13 +2447,18 @@ int perf_event__synthesize_mmap2_build_id(const str= uct perf_tool *tool, size_t filename_len =3D strlen(filename); size_t ev_len; u64 sample_type =3D sample->evsel ? sample->evsel->core.attr.sample_type = : 0; - void *array; + void *array =3D &ev; int ret; + size_t max_filename_len; =20 - if (filename_len >=3D sizeof(ev.mmap2.filename)) - return -EINVAL; + max_filename_len =3D sizeof(ev) - + (MAX_ID_HDR_ENTRIES * sizeof(__u64)) - + offsetof(struct perf_record_mmap2, filename) - 1; =20 - ev_len =3D sizeof(ev.mmap2) - sizeof(ev.mmap2.filename) + filename_len + = 1; + if (filename_len > max_filename_len) + filename_len =3D max_filename_len; + + ev_len =3D offsetof(struct perf_record_mmap2, filename) + filename_len + = 1; ev_len =3D PERF_ALIGN(ev_len, sizeof(u64)); =20 if (ev_len + MAX_ID_HDR_ENTRIES * sizeof(__u64) > sizeof(ev)) @@ -2473,16 +2478,15 @@ int perf_event__synthesize_mmap2_build_id(const str= uct perf_tool *tool, =20 ev.mmap2.build_id_size =3D bid->size; if (ev.mmap2.build_id_size > sizeof(ev.mmap2.build_id)) - ev.build_id.size =3D sizeof(ev.mmap2.build_id); + ev.mmap2.build_id_size =3D sizeof(ev.mmap2.build_id); memcpy(ev.mmap2.build_id, bid->data, ev.mmap2.build_id_size); =20 ev.mmap2.prot =3D prot; ev.mmap2.flags =3D flags; =20 - memcpy(ev.mmap2.filename, filename, min(strlen(filename), sizeof(ev.mmap.= filename))); + strlcpy(ev.mmap2.filename, filename, filename_len + 1); =20 - array =3D &ev; - array +=3D ev.header.size; + array =3D (void *)((char *)&ev + ev.header.size); ret =3D perf_event__synthesize_id_sample(array, sample_type, sample); if (ret < 0) return ret; --=20 2.55.0.229.g6434b31f56-goog