• Steven Rostedt (VMware)'s avatar
    tracing: Enforce passing in filter=NULL to create_filter() · 0b3dec05
    Steven Rostedt (VMware) authored
    There's some inconsistency with what to set the output parameter filterp
    when passing to create_filter(..., struct event_filter **filterp).
    
    Whatever filterp points to, should be NULL when calling this function. The
    create_filter() calls create_filter_start() with a pointer to a local
    "filter" variable that is set to NULL. The create_filter_start() has a
    WARN_ON() if the passed in pointer isn't pointing to a value set to NULL.
    
    Ideally, create_filter() should pass the filterp variable it received to
    create_filter_start() and not hide it as with a local variable, this allowed
    create_filter() to fail, and not update the passed in filter, and the caller
    of create_filter() then tried to free filter, which was never initialized to
    anything, causing memory corruption.
    
    Link: http://lkml.kernel.org/r/00000000000032a0c30569916870@google.com
    
    Fixes: 80765597 ("tracing: Rewrite filter logic to be simpler and faster")
    Reported-by: syzbot+dadcc936587643d7f568@syzkaller.appspotmail.com
    Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
    0b3dec05
trace_events_filter.c 55.1 KB