From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ian Rogers <irogers@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Namhyung Kim <namhyung@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Jiri Olsa <jolsa@kernel.org>,
Adrian Hunter <adrian.hunter@intel.com>,
Kan Liang <kan.liang@linux.intel.com>,
James Clark <james.clark@linaro.org>,
Dapeng Mi <dapeng1.mi@linux.intel.com>,
Thomas Richter <tmricht@linux.ibm.com>,
Veronika Molnarova <vmolnaro@redhat.com>,
Hao Ge <gehao@kylinos.cn>, Howard Chu <howardchu95@gmail.com>,
Weilin Wang <weilin.wang@intel.com>,
Levi Yun <yeoreum.yun@arm.com>,
"Dr. David Alan Gilbert" <linux@treblig.org>,
Dominique Martinet <asmadeus@codewreck.org>,
Xu Yang <xu.yang_2@nxp.com>, Tengda Wu <wutengda@huaweicloud.com>,
linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org,
bpf@vger.kernel.org
Subject: Re: [PATCH v2 06/12] perf record: Switch user option to use BPF filter
Date: Thu, 24 Apr 2025 18:35:11 -0300 [thread overview]
Message-ID: <aAquj31djneyTwLG@x1> (raw)
In-Reply-To: <20250410173631.1713627-7-irogers@google.com>
On Thu, Apr 10, 2025 at 10:36:25AM -0700, Ian Rogers wrote:
> Finding user processes by scanning /proc is inherently racy and
> results in perf_event_open failures. Use a BPF filter to drop samples
> where the uid doesn't match. Ensure adding the BPF filter forces
> system-wide.
Since the BPF filter is not introduced in this patch, can you please
provide, in the commit log message or in the patch itself, some
commentary as to how this is accomplished thru a BPF filter?
- Arnaldo
> Signed-off-by: Ian Rogers <irogers@google.com>
> ---
> tools/perf/builtin-record.c | 27 ++++++++++++++++-----------
> 1 file changed, 16 insertions(+), 11 deletions(-)
>
> diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
> index ba20bf7c011d..202c917fd122 100644
> --- a/tools/perf/builtin-record.c
> +++ b/tools/perf/builtin-record.c
> @@ -173,6 +173,7 @@ struct record {
> bool timestamp_boundary;
> bool off_cpu;
> const char *filter_action;
> + const char *uid_str;
> struct switch_output switch_output;
> unsigned long long samples;
> unsigned long output_max_size; /* = 0: unlimited */
> @@ -3460,8 +3461,7 @@ static struct option __record_options[] = {
> "or ranges of time to enable events e.g. '-D 10-20,30-40'",
> record__parse_event_enable_time),
> OPT_BOOLEAN(0, "kcore", &record.opts.kcore, "copy /proc/kcore"),
> - OPT_STRING('u', "uid", &record.opts.target.uid_str, "user",
> - "user to profile"),
> + OPT_STRING('u', "uid", &record.uid_str, "user", "user to profile"),
>
> OPT_CALLBACK_NOOPT('b', "branch-any", &record.opts.branch_stack,
> "branch any", "sample any taken branches",
> @@ -4196,19 +4196,24 @@ int cmd_record(int argc, const char **argv)
> ui__warning("%s\n", errbuf);
> }
>
> - err = target__parse_uid(&rec->opts.target);
> - if (err) {
> - int saved_errno = errno;
> + if (rec->uid_str) {
> + uid_t uid = parse_uid(rec->uid_str);
>
> - target__strerror(&rec->opts.target, err, errbuf, BUFSIZ);
> - ui__error("%s", errbuf);
> + if (uid == UINT_MAX) {
> + ui__error("Invalid User: %s", rec->uid_str);
> + err = -EINVAL;
> + goto out;
> + }
> + err = parse_uid_filter(rec->evlist, uid);
> + if (err)
> + goto out;
>
> - err = -saved_errno;
> - goto out;
> + /* User ID filtering implies system wide. */
> + rec->opts.target.system_wide = true;
> }
>
> - /* Enable ignoring missing threads when -u/-p option is defined. */
> - rec->opts.ignore_missing_thread = rec->opts.target.uid != UINT_MAX || rec->opts.target.pid;
> + /* Enable ignoring missing threads when -p option is defined. */
> + rec->opts.ignore_missing_thread = rec->opts.target.pid;
>
> evlist__warn_user_requested_cpus(rec->evlist, rec->opts.target.cpu_list);
>
> --
> 2.49.0.604.gff1f9ca942-goog
next prev parent reply other threads:[~2025-04-24 21:35 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-10 17:36 [PATCH v2 00/12] Move uid filtering to BPF filters Ian Rogers
2025-04-10 17:36 ` [PATCH v2 01/12] perf tests record: Cleanup improvements Ian Rogers
2025-04-10 17:36 ` [PATCH v2 02/12] perf bench evlist-open-close: Reduce scope of 2 variables Ian Rogers
2025-04-10 17:36 ` [PATCH v2 03/12] perf parse-events filter: Use evsel__find_pmu Ian Rogers
2025-04-10 17:36 ` [PATCH v2 04/12] perf target: Separate parse_uid into its own function Ian Rogers
2025-04-10 17:36 ` [PATCH v2 05/12] perf parse-events: Add parse_uid_filter helper Ian Rogers
2025-04-10 17:36 ` [PATCH v2 06/12] perf record: Switch user option to use BPF filter Ian Rogers
2025-04-24 21:35 ` Arnaldo Carvalho de Melo [this message]
2025-04-10 17:36 ` [PATCH v2 07/12] perf tests record: Add basic uid filtering test Ian Rogers
2025-04-10 17:36 ` [PATCH v2 08/12] perf top: Switch user option to use BPF filter Ian Rogers
2025-04-10 17:36 ` [PATCH v2 09/12] perf trace: " Ian Rogers
2025-04-10 17:36 ` [PATCH v2 10/12] perf bench evlist-open-close: " Ian Rogers
2025-04-10 17:36 ` [PATCH v2 11/12] perf target: Remove uid from target Ian Rogers
2025-04-10 17:36 ` [PATCH v2 12/12] perf thread_map: Remove uid options Ian Rogers
2025-04-24 20:25 ` [PATCH v2 00/12] Move uid filtering to BPF filters Ian Rogers
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aAquj31djneyTwLG@x1 \
--to=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=asmadeus@codewreck.org \
--cc=bpf@vger.kernel.org \
--cc=dapeng1.mi@linux.intel.com \
--cc=gehao@kylinos.cn \
--cc=howardchu95@gmail.com \
--cc=irogers@google.com \
--cc=james.clark@linaro.org \
--cc=jolsa@kernel.org \
--cc=kan.liang@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=linux@treblig.org \
--cc=mark.rutland@arm.com \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=tmricht@linux.ibm.com \
--cc=vmolnaro@redhat.com \
--cc=weilin.wang@intel.com \
--cc=wutengda@huaweicloud.com \
--cc=xu.yang_2@nxp.com \
--cc=yeoreum.yun@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).