Re: [syzbot] [trace?] KASAN: slab-use-after-free Read in __free_filter

From: Hillf Danton
Date: Tue Jun 24 2025 - 04:29:53 EST


> Date: Mon, 23 Jun 2025 16:58:28 -0700
> syzbot found the following issue on:
>
> HEAD commit: 86731a2a651e Linux 6.16-rc3
> git tree: upstream
> console output: https://syzkaller.appspot.com/x/log.txt?x=1611eb0c580000
> kernel config: https://syzkaller.appspot.com/x/.config?x=4ad206eb0100c6a2
> dashboard link: https://syzkaller.appspot.com/bug?extid=daba72c4af9915e9c894
> compiler: gcc (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40
> syz repro: https://syzkaller.appspot.com/x/repro.syz?x=13b16dd4580000
> C reproducer: https://syzkaller.appspot.com/x/repro.c?x=17c7bb0c580000

#syz test

--- 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)
--