From: Wang Nan [mailto:[email protected]] > >In system with kprobe enabled but uprobe turned off, 'perf probe -d' >causes segfault because it calls probe_file__get_events() with a >negative fd (when deleting uprobe events).
Hmm, OK. This may happen if user runs perf probe on the kernel which only enables either CONFIG_KPROBE_EVENTS or CONFIG_UPROBE_EVENTS. > >This patch validates fds before calling probe_file__get_events(). Hmm, could you improve probe_file__get_events() to check the fd instead of checking it at call-site? I think that is more generic fixup. Thank you, > >Signed-off-by: Wang Nan <[email protected]> >Cc: Arnaldo Carvalho de Melo <[email protected]> >Cc: Jiri Olsa <[email protected]> >Cc: Masami Hiramatsu <[email protected]> >Cc: Namhyung Kim <[email protected]> >--- > tools/perf/builtin-probe.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > >diff --git a/tools/perf/builtin-probe.c b/tools/perf/builtin-probe.c >index 132afc9..861aa89 100644 >--- a/tools/perf/builtin-probe.c >+++ b/tools/perf/builtin-probe.c >@@ -384,7 +384,11 @@ static int perf_del_probe_events(struct strfilter *filter) > goto out; > } > >- ret = probe_file__get_events(kfd, filter, klist); >+ if (kfd < 0) >+ ret = -ENOENT; >+ else >+ ret = probe_file__get_events(kfd, filter, klist); >+ > if (ret == 0) { > strlist__for_each(ent, klist) > pr_info("Removed event: %s\n", ent->s); >@@ -394,7 +398,11 @@ static int perf_del_probe_events(struct strfilter *filter) > goto error; > } > >- ret2 = probe_file__get_events(ufd, filter, ulist); >+ if (ufd < 0) >+ ret2 = -ENOENT; >+ else >+ ret2 = probe_file__get_events(ufd, filter, ulist); >+ > if (ret2 == 0) { > strlist__for_each(ent, ulist) > pr_info("Removed event: %s\n", ent->s); >-- >1.8.3.4

