Hi Steve,

On Wed, Oct 05, 2016 at 09:28:01AM -0400, Steven Rostedt wrote:
> On Sat,  1 Oct 2016 19:17:00 +0900
> Namhyung Kim <namhy...@kernel.org> wrote:
> 
> > When it's called with an offset less than or equal to the first event,
> > it'll return a garbage value since the data is not initialized.
> 
> Well, it can at most be equal to (unless offset is negative) because
> kbuffer_load_subbuffer() sets kbuf->curr to zero.

Actually kbuffer_load_subbuffer() calls kbuf->next_event().  Inside
the function it has a loop updating next valid event.  Sometimes, the
data starts with TIME_EXTEND with value of 0 and the loop skips it
which ended up setting kbuf->curr to 8. :)

I'll take a look it later.

> 
> But that said, it looks like offset == 0 is buggy.
> 
> Acked-by: Steven Rostedt <rost...@goodmis.org>

Thanks,
Namhyung

> 
> 
> -- Steve
> 
> > 
> > Cc: Steven Rostedt <rost...@goodmis.org>
> > Signed-off-by: Namhyung Kim <namhy...@kernel.org>
> > ---
> >  tools/lib/traceevent/kbuffer-parse.c | 1 +
> >  1 file changed, 1 insertion(+)
> > 
> > diff --git a/tools/lib/traceevent/kbuffer-parse.c 
> > b/tools/lib/traceevent/kbuffer-parse.c
> > index 3bcada3ae05a..65984f1c2974 100644
> > --- a/tools/lib/traceevent/kbuffer-parse.c
> > +++ b/tools/lib/traceevent/kbuffer-parse.c
> > @@ -622,6 +622,7 @@ void *kbuffer_read_at_offset(struct kbuffer *kbuf, int 
> > offset,
> >  
> >     /* Reset the buffer */
> >     kbuffer_load_subbuffer(kbuf, kbuf->subbuffer);
> > +   data = kbuffer_read_event(kbuf, ts);
> >  
> >     while (kbuf->curr < offset) {
> >             data = kbuffer_next_event(kbuf, ts);
> 

Reply via email to