diff mbox

[02/31] perf tools: Don't set cmdline_group_boundary if no evsel is collected

Message ID 1440822125-52691-3-git-send-email-wangnan0@huawei.com
State New
Headers show

Commit Message

Wang Nan Aug. 29, 2015, 4:21 a.m. UTC
If parse_events__scanner() collects no entry, perf_evlist__last(evlist)
is invalid. Then setting of cmdline_group_boundary touches invalid.

It could happend in currect BPF implementation. See [1]. Although it
can be fixed, for safety reason it whould be better to introduce this
check.

Instead of checking number of entries, check data.list instead, so we
can add dummy evsel here.

[1]: http://lkml.kernel.org/n/1436445342-1402-19-git-send-email-wangnan0@huawei.com

Signed-off-by: Wang Nan <wangnan0@huawei.com>
Cc: Alexei Starovoitov <ast@plumgrid.com>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Zefan Li <lizefan@huawei.com>
Cc: pi3orama@163.com
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Link: http://lkml.kernel.org/r/1440742821-44548-3-git-send-email-wangnan0@huawei.com
---
 tools/perf/util/parse-events.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

Comments

Arnaldo Carvalho de Melo Aug. 31, 2015, 7:20 p.m. UTC | #1
Em Sat, Aug 29, 2015 at 04:21:36AM +0000, Wang Nan escreveu:
> If parse_events__scanner() collects no entry, perf_evlist__last(evlist)
> is invalid. Then setting of cmdline_group_boundary touches invalid.
> 
> It could happend in currect BPF implementation. See [1]. Although it
> can be fixed, for safety reason it whould be better to introduce this
> check.
> 
> Instead of checking number of entries, check data.list instead, so we
> can add dummy evsel here.

Event parsing fixes should have Jiri Olsa on the CC list, Jiri, is this
ok?

From what I can see it looks Ok, my question, just from looking at this
patch, is if it is valid to get to this point with an empty data.list,
i.e. was it ever possible and this is a bug irrespective of eBPF?

- Arnaldo
 
> [1]: http://lkml.kernel.org/n/1436445342-1402-19-git-send-email-wangnan0@huawei.com
> 
> Signed-off-by: Wang Nan <wangnan0@huawei.com>
> Cc: Alexei Starovoitov <ast@plumgrid.com>
> Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
> Cc: Namhyung Kim <namhyung@kernel.org>
> Cc: Zefan Li <lizefan@huawei.com>
> Cc: pi3orama@163.com
> Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
> Link: http://lkml.kernel.org/r/1440742821-44548-3-git-send-email-wangnan0@huawei.com
> ---
>  tools/perf/util/parse-events.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
> index d826e6f..14cd7e3 100644
> --- a/tools/perf/util/parse-events.c
> +++ b/tools/perf/util/parse-events.c
> @@ -1143,10 +1143,14 @@ int parse_events(struct perf_evlist *evlist, const char *str,
>  		int entries = data.idx - evlist->nr_entries;
>  		struct perf_evsel *last;
>  
> +		if (!list_empty(&data.list)) {
> +			last = list_entry(data.list.prev,
> +					  struct perf_evsel, node);
> +			last->cmdline_group_boundary = true;
> +		}
> +
>  		perf_evlist__splice_list_tail(evlist, &data.list, entries);
>  		evlist->nr_groups += data.nr_groups;
> -		last = perf_evlist__last(evlist);
> -		last->cmdline_group_boundary = true;
>  
>  		return 0;
>  	}
> -- 
> 2.1.0
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
Wang Nan Sept. 1, 2015, 10:37 a.m. UTC | #2
On 2015/9/1 3:20, Arnaldo Carvalho de Melo wrote:
> Em Sat, Aug 29, 2015 at 04:21:36AM +0000, Wang Nan escreveu:
>> If parse_events__scanner() collects no entry, perf_evlist__last(evlist)
>> is invalid. Then setting of cmdline_group_boundary touches invalid.
>>
>> It could happend in currect BPF implementation. See [1]. Although it
>> can be fixed, for safety reason it whould be better to introduce this
>> check.
>>
>> Instead of checking number of entries, check data.list instead, so we
>> can add dummy evsel here.
> Event parsing fixes should have Jiri Olsa on the CC list, Jiri, is this
> ok?
>
>  From what I can see it looks Ok, my question, just from looking at this
> patch, is if it is valid to get to this point with an empty data.list,
> i.e. was it ever possible and this is a bug irrespective of eBPF?

It should not be a existing bug in perf. There are other places rely on
non-empty of the list. For example, in parse_events__set_leader(). 
Furtunately,
it won't triggered problem because we don't allow a BPF object to be 
wrapped with "{}"
lexically ("{./aaa.o}" will be interpreterd as file '{./aaa.o' and a 
extra '}').


> - Arnaldo
>   
>> [1]: http://lkml.kernel.org/n/1436445342-1402-19-git-send-email-wangnan0@huawei.com
>>
>> Signed-off-by: Wang Nan <wangnan0@huawei.com>
>> Cc: Alexei Starovoitov <ast@plumgrid.com>
>> Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
>> Cc: Namhyung Kim <namhyung@kernel.org>
>> Cc: Zefan Li <lizefan@huawei.com>
>> Cc: pi3orama@163.com
>> Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
>> Link: http://lkml.kernel.org/r/1440742821-44548-3-git-send-email-wangnan0@huawei.com
>> ---
>>   tools/perf/util/parse-events.c | 8 ++++++--
>>   1 file changed, 6 insertions(+), 2 deletions(-)
>>
>> diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
>> index d826e6f..14cd7e3 100644
>> --- a/tools/perf/util/parse-events.c
>> +++ b/tools/perf/util/parse-events.c
>> @@ -1143,10 +1143,14 @@ int parse_events(struct perf_evlist *evlist, const char *str,
>>   		int entries = data.idx - evlist->nr_entries;
>>   		struct perf_evsel *last;
>>   
>> +		if (!list_empty(&data.list)) {
>> +			last = list_entry(data.list.prev,
>> +					  struct perf_evsel, node);
>> +			last->cmdline_group_boundary = true;
>> +		}
>> +
>>   		perf_evlist__splice_list_tail(evlist, &data.list, entries);
>>   		evlist->nr_groups += data.nr_groups;
>> -		last = perf_evlist__last(evlist);
>> -		last->cmdline_group_boundary = true;
>>   
>>   		return 0;
>>   	}
>> -- 
>> 2.1.0


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
Jiri Olsa Sept. 1, 2015, 10:38 a.m. UTC | #3
On Mon, Aug 31, 2015 at 04:20:03PM -0300, Arnaldo Carvalho de Melo wrote:
> Em Sat, Aug 29, 2015 at 04:21:36AM +0000, Wang Nan escreveu:
> > If parse_events__scanner() collects no entry, perf_evlist__last(evlist)
> > is invalid. Then setting of cmdline_group_boundary touches invalid.
> > 
> > It could happend in currect BPF implementation. See [1]. Although it
> > can be fixed, for safety reason it whould be better to introduce this
> > check.
> > 
> > Instead of checking number of entries, check data.list instead, so we
> > can add dummy evsel here.
> 
> Event parsing fixes should have Jiri Olsa on the CC list, Jiri, is this
> ok?
> 
> From what I can see it looks Ok, my question, just from looking at this
> patch, is if it is valid to get to this point with an empty data.list,
> i.e. was it ever possible and this is a bug irrespective of eBPF?

good point, I believe it's either fail or event(s) added to the list
I haven't checked how's eBPF connected with event parsing, is there a
git tree I could check?

thanks,
jirka
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
Wang Nan Sept. 1, 2015, 12:44 p.m. UTC | #4
On 2015/9/1 18:38, Jiri Olsa wrote:
> On Mon, Aug 31, 2015 at 04:20:03PM -0300, Arnaldo Carvalho de Melo wrote:
>> Em Sat, Aug 29, 2015 at 04:21:36AM +0000, Wang Nan escreveu:
>>> If parse_events__scanner() collects no entry, perf_evlist__last(evlist)
>>> is invalid. Then setting of cmdline_group_boundary touches invalid.
>>>
>>> It could happend in currect BPF implementation. See [1]. Although it
>>> can be fixed, for safety reason it whould be better to introduce this
>>> check.
>>>
>>> Instead of checking number of entries, check data.list instead, so we
>>> can add dummy evsel here.
>> Event parsing fixes should have Jiri Olsa on the CC list, Jiri, is this
>> ok?
>>
>>  From what I can see it looks Ok, my question, just from looking at this
>> patch, is if it is valid to get to this point with an empty data.list,
>> i.e. was it ever possible and this is a bug irrespective of eBPF?
> good point, I believe it's either fail or event(s) added to the list
> I haven't checked how's eBPF connected with event parsing, is there a
> git tree I could check?

Please check:

https://git.kernel.org/cgit/linux/kernel/git/pi3orama/linux.git/log/?h=perf/ebpf

commit d7d91228cad0a78eae5ea9526a8a78debf3cf584
commit 2606fe61219899cb386823eddc1bc231ff5067a6

related to parsing.

Thank you.

> thanks,
> jirka


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
diff mbox

Patch

diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index d826e6f..14cd7e3 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -1143,10 +1143,14 @@  int parse_events(struct perf_evlist *evlist, const char *str,
 		int entries = data.idx - evlist->nr_entries;
 		struct perf_evsel *last;
 
+		if (!list_empty(&data.list)) {
+			last = list_entry(data.list.prev,
+					  struct perf_evsel, node);
+			last->cmdline_group_boundary = true;
+		}
+
 		perf_evlist__splice_list_tail(evlist, &data.list, entries);
 		evlist->nr_groups += data.nr_groups;
-		last = perf_evlist__last(evlist);
-		last->cmdline_group_boundary = true;
 
 		return 0;
 	}