--- x/kernel/trace/trace_events_filter.c +++ y/kernel/trace/trace_events_filter.c @@ -1429,6 +1429,7 @@ static void filter_free_subsystem_filter struct trace_event_file *file; struct filter_head *head; struct filter_list *item; + int free_filter = 1; head = kmalloc(sizeof(*head), GFP_KERNEL); if (!head) @@ -1442,6 +1443,7 @@ static void filter_free_subsystem_filter item->filter = filter; list_add_tail(&item->list, &head->list); + free_filter = 0; list_for_each_entry(file, &tr->events, list) { if (file->system != dir) @@ -1467,7 +1469,8 @@ static void filter_free_subsystem_filter continue; __free_subsystem_filter(file); } - __free_filter(filter); + if (free_filter) + __free_filter(filter); } int filter_assign_type(const char *type)