From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Namhyung Kim <namhyung@kernel.org>
Cc: Leo Yan <leo.yan@linaro.org>, Ingo Molnar <mingo@redhat.com>,
Mark Rutland <mark.rutland@arm.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Jiri Olsa <jolsa@kernel.org>,
Adrian Hunter <adrian.hunter@intel.com>,
linux-perf-users <linux-perf-users@vger.kernel.org>,
linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] perf record: Fix segmentation fault in record__read_lost_samples()
Date: Mon, 26 Sep 2022 13:59:29 +0100 [thread overview]
Message-ID: <YzGiMdIRRE8ibCiD@kernel.org> (raw)
In-Reply-To: <CAM9d7ci2RJOTz08eGRgLMVpS0TmwN=q=UNA_Z3wbSHCC2pMygQ@mail.gmail.com>
Em Sat, Sep 24, 2022 at 09:52:09AM -0700, Namhyung Kim escreveu:
> Hi Leo,
>
> On Sat, Sep 24, 2022 at 4:34 AM Leo Yan <leo.yan@linaro.org> wrote:
> >
> > Commit a49aa8a54e86 ("perf record: Read and inject LOST_SAMPLES events")
> > causes segmentation fault when run the "perf mem record" command in
> > unprivileged mode, the output log is:
> >
> > $ ./perf mem record --all-user -o perf_test.data -- ./test_program
> > Error:
> > Access to performance monitoring and observability operations is limited.
> > Consider adjusting /proc/sys/kernel/perf_event_paranoid setting to open
> > access to performance monitoring and observability operations for processes
> > without CAP_PERFMON, CAP_SYS_PTRACE or CAP_SYS_ADMIN Linux capability.
> > More information can be found at 'Perf events and tool security' document:
> > https://www.kernel.org/doc/html/latest/admin-guide/perf-security.html
> > perf_event_paranoid setting is 4:
> > -1: Allow use of (almost) all events by all users
> > Ignore mlock limit after perf_event_mlock_kb without CAP_IPC_LOCK
> > >= 0: Disallow raw and ftrace function tracepoint access
> > >= 1: Disallow CPU event access
> > >= 2: Disallow kernel profiling
> > To make the adjusted perf_event_paranoid setting permanent preserve it
> > in /etc/sysctl.conf (e.g. kernel.perf_event_paranoid = <setting>)
> > perf: Segmentation fault
> > Obtained 16 stack frames.
> > ./perf(dump_stack+0x31) [0x55b7aa1e8070]
> > ./perf(sighandler_dump_stack+0x36) [0x55b7aa1e815e]
> > ./perf(+0xc9120) [0x55b7aa0a9120]
> > /lib/x86_64-linux-gnu/libc.so.6(+0x4251f) [0x7fd03ef8151f]
> > ./perf(+0xccaca) [0x55b7aa0acaca]
> > ./perf(+0xcf4ab) [0x55b7aa0af4ab]
> > ./perf(cmd_record+0xd50) [0x55b7aa0b28df]
> > ./perf(+0x112f77) [0x55b7aa0f2f77]
> > ./perf(cmd_mem+0x53b) [0x55b7aa0f406c]
> > ./perf(+0x19979c) [0x55b7aa17979c]
> > ./perf(+0x199a37) [0x55b7aa179a37]
> > ./perf(+0x199b95) [0x55b7aa179b95]
> > ./perf(main+0x2c7) [0x55b7aa179fbd]
> > /lib/x86_64-linux-gnu/libc.so.6(+0x29d8f) [0x7fd03ef68d8f]
> > /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x7f) [0x7fd03ef68e3f]
> > ./perf(_start+0x24) [0x55b7aa089974]
> > Segmentation fault (core dumped)
> >
> > In the unprivileged mode perf fails to open PMU event, the function
> > record__open() returns error and "session->evlist" is NULL; this leads
> > to segmentation fault when iterates "session->evlist" in the function
> > record__read_lost_samples().
> >
> > This patch checks "session->evlist" in record__read_lost_samples(), if
> > "session->evlist" is NULL then the function directly bails out to avoid
> > segmentation fault.
> >
> > Fixes: a49aa8a54e86 ("perf record: Read and inject LOST_SAMPLES events")
> > Signed-off-by: Leo Yan <leo.yan@linaro.org>
>
> Thanks for the fix and sorry for the inconvenience.
> Actually I sent the same fix a few weeks ago.
>
> https://lore.kernel.org/r/20220909235024.278281-1-namhyung@kernel.org
collecting it now, and adding that Fixes from Leo's patch, ok?
- Arnaldo
> Thanks,
> Namhyung
>
>
> > ---
> > tools/perf/builtin-record.c | 4 ++++
> > 1 file changed, 4 insertions(+)
> >
> > diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
> > index 02e38f50a138..012b46dd4999 100644
> > --- a/tools/perf/builtin-record.c
> > +++ b/tools/perf/builtin-record.c
> > @@ -1888,6 +1888,10 @@ static void record__read_lost_samples(struct record *rec)
> > struct perf_record_lost_samples *lost;
> > struct evsel *evsel;
> >
> > + /* No any event is opened, directly bail out */
> > + if (!session->evlist)
> > + return;
> > +
> > lost = zalloc(PERF_SAMPLE_MAX_SIZE);
> > if (lost == NULL) {
> > pr_debug("Memory allocation failed\n");
> > --
> > 2.34.1
> >
--
- Arnaldo
next prev parent reply other threads:[~2022-09-26 14:39 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-24 11:33 [PATCH] perf record: Fix segmentation fault in record__read_lost_samples() Leo Yan
2022-09-24 16:52 ` Namhyung Kim
2022-09-25 1:12 ` Leo Yan
2022-09-26 13:03 ` Arnaldo Carvalho de Melo
2022-09-26 12:59 ` Arnaldo Carvalho de Melo [this message]
2022-09-26 14:54 ` Leo Yan
2022-09-26 19:16 ` Arnaldo Carvalho de Melo
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=YzGiMdIRRE8ibCiD@kernel.org \
--to=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=jolsa@kernel.org \
--cc=leo.yan@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.