• Steven Rostedt's avatar
    tracing: Fix bug when reading system filters on module removal · e9dbfae5
    Steven Rostedt authored
    The event system is freed when its nr_events is set to zero. This happens
    when a module created an event system and then later the module is
    removed. Modules may share systems, so the system is allocated when
    it is created and freed when the modules are unloaded and all the
    events under the system are removed (nr_events set to zero).
    
    The problem arises when a task opened the "filter" file for the
    system. If the module is unloaded and it removed the last event for
    that system, the system structure is freed. If the task that opened
    the filter file accesses the "filter" file after the system has
    been freed, the system will access an invalid pointer.
    
    By adding a ref_count, and using it to keep track of what
    is using the event system, we can free it after all users
    are finished with the event system.
    
    Cc: <stable@kernel.org>
    Reported-by: default avatarJohannes Berg <johannes.berg@intel.com>
    Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    e9dbfae5
trace_events.c 36.9 KB