* [PATCH] perf record: Fix segmentation fault in record__read_lost_samples()
@ 2022-09-24 11:33 Leo Yan
2022-09-24 16:52 ` Namhyung Kim
0 siblings, 1 reply; 7+ messages in thread
From: Leo Yan @ 2022-09-24 11:33 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo, Namhyung Kim, Ingo Molnar, Mark Rutland,
Alexander Shishkin, Jiri Olsa, Adrian Hunter, linux-perf-users,
linux-kernel
Cc: Leo Yan
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>
---
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
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH] perf record: Fix segmentation fault in record__read_lost_samples()
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 12:59 ` Arnaldo Carvalho de Melo
0 siblings, 2 replies; 7+ messages in thread
From: Namhyung Kim @ 2022-09-24 16:52 UTC (permalink / raw)
To: Leo Yan
Cc: Arnaldo Carvalho de Melo, Ingo Molnar, Mark Rutland,
Alexander Shishkin, Jiri Olsa, Adrian Hunter, linux-perf-users,
linux-kernel
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
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
>
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH] perf record: Fix segmentation fault in record__read_lost_samples()
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
1 sibling, 1 reply; 7+ messages in thread
From: Leo Yan @ 2022-09-25 1:12 UTC (permalink / raw)
To: Namhyung Kim
Cc: Arnaldo Carvalho de Melo, Ingo Molnar, Mark Rutland,
Alexander Shishkin, Jiri Olsa, Adrian Hunter, linux-perf-users,
linux-kernel
Hi Namhyung,
On Sat, Sep 24, 2022 at 09:52:09AM -0700, Namhyung Kim wrote:
[...]
> > 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
Thanks a lot for the info and fix. The patch in above link looks good
to me! Please ignore this one.
Leo
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH] perf record: Fix segmentation fault in record__read_lost_samples()
2022-09-25 1:12 ` Leo Yan
@ 2022-09-26 13:03 ` Arnaldo Carvalho de Melo
0 siblings, 0 replies; 7+ messages in thread
From: Arnaldo Carvalho de Melo @ 2022-09-26 13:03 UTC (permalink / raw)
To: Leo Yan
Cc: Namhyung Kim, Ingo Molnar, Mark Rutland, Alexander Shishkin,
Jiri Olsa, Adrian Hunter, linux-perf-users, linux-kernel
Em Sun, Sep 25, 2022 at 09:12:37AM +0800, Leo Yan escreveu:
> Hi Namhyung,
>
> On Sat, Sep 24, 2022 at 09:52:09AM -0700, Namhyung Kim wrote:
>
> [...]
>
> > > 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
>
> Thanks a lot for the info and fix. The patch in above link looks good
> to me! Please ignore this one.
Took that as an Acked-by: Leo, thanks!
- Arnaldo
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] perf record: Fix segmentation fault in record__read_lost_samples()
2022-09-24 16:52 ` Namhyung Kim
2022-09-25 1:12 ` Leo Yan
@ 2022-09-26 12:59 ` Arnaldo Carvalho de Melo
2022-09-26 14:54 ` Leo Yan
1 sibling, 1 reply; 7+ messages in thread
From: Arnaldo Carvalho de Melo @ 2022-09-26 12:59 UTC (permalink / raw)
To: Namhyung Kim
Cc: Leo Yan, Ingo Molnar, Mark Rutland, Alexander Shishkin, Jiri Olsa,
Adrian Hunter, linux-perf-users, linux-kernel
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
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH] perf record: Fix segmentation fault in record__read_lost_samples()
2022-09-26 12:59 ` Arnaldo Carvalho de Melo
@ 2022-09-26 14:54 ` Leo Yan
2022-09-26 19:16 ` Arnaldo Carvalho de Melo
0 siblings, 1 reply; 7+ messages in thread
From: Leo Yan @ 2022-09-26 14:54 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo
Cc: Namhyung Kim, Ingo Molnar, Mark Rutland, Alexander Shishkin,
Jiri Olsa, Adrian Hunter, linux-perf-users, linux-kernel
On Mon, Sep 26, 2022 at 01:59:29PM +0100, Arnaldo Carvalho de Melo wrote:
[...]
> > > 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?
Yeah, I think it's good to add Fixes tag. Just remind, actually
Namhyung has mentioned Fixed tag in above link:
"I didn't add a Fixes tag as it's not sent to Linus yet. But in case you want it.
Fixes: a49aa8a54e86 ("perf record: Read and inject LOST_SAMPLES events")
"
Thanks,
Leo
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH] perf record: Fix segmentation fault in record__read_lost_samples()
2022-09-26 14:54 ` Leo Yan
@ 2022-09-26 19:16 ` Arnaldo Carvalho de Melo
0 siblings, 0 replies; 7+ messages in thread
From: Arnaldo Carvalho de Melo @ 2022-09-26 19:16 UTC (permalink / raw)
To: Leo Yan
Cc: Namhyung Kim, Ingo Molnar, Mark Rutland, Alexander Shishkin,
Jiri Olsa, Adrian Hunter, linux-perf-users, linux-kernel
Em Mon, Sep 26, 2022 at 10:54:43PM +0800, Leo Yan escreveu:
> On Mon, Sep 26, 2022 at 01:59:29PM +0100, Arnaldo Carvalho de Melo wrote:
>
> [...]
>
> > > > 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?
>
> Yeah, I think it's good to add Fixes tag. Just remind, actually
> Namhyung has mentioned Fixed tag in above link:
>
> "I didn't add a Fixes tag as it's not sent to Linus yet. But in case you want it.
>
> Fixes: a49aa8a54e86 ("perf record: Read and inject LOST_SAMPLES events")
> "
I'll add it.
Sometimes I think about combining fixes with patches in my tree that
didn't made it into Linus tree yet, so that we avoid having problems
with 'git bisect', but I also try not to rebase acme/perf/core.
Perhaps in the future 'git bisect' will look at Fixes: tags :-)
- Arnaldo
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2022-09-26 19:16 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
2022-09-26 14:54 ` Leo Yan
2022-09-26 19:16 ` Arnaldo Carvalho de Melo
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.