Ping...
On 2020/6/12 23:19, Namhyung Kim wrote: > Hello, > > On Fri, Jun 12, 2020 at 6:58 PM Wei Li <liwei...@huawei.com> wrote: >> >> The segmentation fault can be reproduced as following steps: >> 1) Executing perf report in tui. >> 2) Typing '/xxxxx' to filter the symbol to get nothing matched. >> 3) Pressing enter with no entry selected. >> Then it will report a segmentation fault. >> >> It is caused by the lack of check of browser->he_selection when >> accessing it's member res_samples in perf_evsel__hists_browse(). >> >> These processes are meaningful for specified samples, so we can >> skip these when nothing is selected. >> >> Fixes: 4968ac8fb7c3 ("perf report: Implement browsing of individual samples") >> Signed-off-by: Wei Li <liwei...@huawei.com> > > Acked-by: Namhyung Kim <namhy...@kernel.org> > > Thanks > Namhyung > > >> --- >> tools/perf/ui/browsers/hists.c | 17 +++++++++++------ >> 1 file changed, 11 insertions(+), 6 deletions(-) >> >> diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c >> index 487e54ef56a9..2101b6b770d8 100644 >> --- a/tools/perf/ui/browsers/hists.c >> +++ b/tools/perf/ui/browsers/hists.c >> @@ -2288,6 +2288,11 @@ static struct thread >> *hist_browser__selected_thread(struct hist_browser *browser >> return browser->he_selection->thread; >> } >> >> +static struct res_sample *hist_browser__selected_res_sample(struct >> hist_browser *browser) >> +{ >> + return browser->he_selection ? browser->he_selection->res_samples : >> NULL; >> +} >> + >> /* Check whether the browser is for 'top' or 'report' */ >> static inline bool is_report_browser(void *timer) >> { >> @@ -3357,16 +3362,16 @@ static int perf_evsel__hists_browse(struct evsel >> *evsel, int nr_events, >> &options[nr_options], NULL, >> NULL, evsel); >> nr_options += add_res_sample_opt(browser, >> &actions[nr_options], >> &options[nr_options], >> - >> hist_browser__selected_entry(browser)->res_samples, >> - evsel, A_NORMAL); >> + >> hist_browser__selected_res_sample(browser), >> + evsel, A_NORMAL); >> nr_options += add_res_sample_opt(browser, >> &actions[nr_options], >> &options[nr_options], >> - >> hist_browser__selected_entry(browser)->res_samples, >> - evsel, A_ASM); >> + >> hist_browser__selected_res_sample(browser), >> + evsel, A_ASM); >> nr_options += add_res_sample_opt(browser, >> &actions[nr_options], >> &options[nr_options], >> - >> hist_browser__selected_entry(browser)->res_samples, >> - evsel, A_SOURCE); >> + >> hist_browser__selected_res_sample(browser), >> + evsel, A_SOURCE); >> nr_options += add_switch_opt(browser, &actions[nr_options], >> &options[nr_options]); >> skip_scripting: >> -- >> 2.17.1 >>