Subject: Re: [PATCH v9 tip 6/9] samples: bpf: simple non-portable kprobe filter example

From: Alexei Starovoitov <ast-uqk4Ao+rVK5Wk0Htik3J/[email-masked]>
Date: Mon, 23 Mar 2015 10:32:45 -0700

On 3/23/15 12:35 AM, Ingo Molnar wrote:
>
> * Alexei Starovoitov <ast-uqk4Ao+rVK5Wk0Htik3J/[email-masked]> wrote:
>
>> +void read_trace_pipe(void)
>> +{
>> +	int trace_fd;
>> +
>> +	trace_fd = open(DEBUGFS "trace_pipe", O_RDONLY, 0);
>> +	if (trace_fd < 0)
>> +		return;
>> +
>> +	while (1) {
>> +		static char buf[4096];
>> +		ssize_t sz;
>> +
>> +		sz = read(trace_fd, buf, sizeof(buf));
>
> read() will return -1 on failure ...
>
>> +		if (sz) {
>
> ... this test passes ...
>
>> +			buf[sz] = 0;
>
> ... and here we smash the stack?

good point. If it was normal file, for sure it's a bug, but trace_pipe
is a pseudo file and I think read cannot return -1. Regardless, it makes
sense to fix it. Will do. Do you mind I address it as follow up patch?
Or if the rest is ok, can you change the condition to sz>0 while
applying? I can respin the whole thing too, if you like.
Thanks!