mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [syzbot] KASAN: use-after-free Read in ring_buffer_peek
@ 2026-08-16 22:10 syzbot
  2026-08-17  5:03 ` Forwarded: [PATCH] tracing: Fix use-after-free in trace_pipe read on sub-buffer order change syzbot
  0 siblings, 1 reply; 2+ messages in thread
From: syzbot @ 2026-08-16 22:10 UTC (permalink / raw)
  To: linux-kernel, syzkaller-bugs

Hello,

syzbot found the following issue on:

HEAD commit:    3d6d817622b0 Merge tag 'scsi-fixes' of git://git.kernel.or..
git tree:       upstream
console output: https://syzkaller.appspot.com/x/log.txt?x=10d17479580000
kernel config:  https://syzkaller.appspot.com/x/.config?x=dd70c0851d340092
dashboard link: https://syzkaller.appspot.com/bug?extid=685955db58555575fdd2
compiler:       gcc (Debian 14.2.0-19) 14.2.0, GNU ld (GNU Binutils for Debian) 2.44
C reproducer:   https://syzkaller.appspot.com/x/repro.c?x=12910ac6580000

IMPORTANT: if you fix the issue, please add the following tag to the commit:
Reported-by: syzbot+685955db58555575fdd2@syzkaller.appspotmail.com

==================================================================
BUG: KASAN: use-after-free in ring_buffer_peek+0x3e0/0x430 kernel/trace/ring_buffer.c:6274
Read of size 1 at addr ffff88802a4cf010 by task syz-executor989/6002

CPU: 1 UID: 0 PID: 6002 Comm: syz-executor989 Not tainted syzkaller #0 PREEMPT(full) 
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 07/16/2026
Call Trace:
 <TASK>
 __dump_stack lib/dump_stack.c:94 [inline]
 dump_stack_lvl+0x100/0x190 lib/dump_stack.c:120
 print_address_description mm/kasan/report.c:378 [inline]
 print_report+0x13d/0x4b0 mm/kasan/report.c:482
 kasan_report+0xdf/0x1c0 mm/kasan/report.c:595
 ring_buffer_peek+0x3e0/0x430 kernel/trace/ring_buffer.c:6274
 peek_next_entry+0x17a/0x250 kernel/trace/trace.c:2354
 __find_next_entry+0x1ed/0x4e0 kernel/trace/trace.c:2398
 trace_find_next_entry_inc+0x3d/0x1c0 kernel/trace/trace.c:2672
 tracing_read_pipe+0x557/0xd60 kernel/trace/trace.c:5440
 vfs_read+0x1e4/0xb40 fs/read_write.c:572
 ksys_read+0x12a/0x250 fs/read_write.c:716
 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
 do_syscall_64+0x115/0x870 arch/x86/entry/syscall_64.c:94
 entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7f588d3b7d9e
Code: 08 0f 85 f5 e2 ff ff 49 89 fb 48 89 f0 48 89 d7 48 89 ce 4c 89 c2 4d 89 ca 4c 8b 44 24 08 4c 8b 4c 24 10 4c 89 5c 24 08 0f 05 <c3> 90 41 57 41 56 4d 89 c6 41 55 4d 89 cd 41 54 55 53 48 83 ec 08
RSP: 002b:00007f588d361198 EFLAGS: 00000246 ORIG_RAX: 0000000000000000
RAX: ffffffffffffffda RBX: 00007f588d3626c0 RCX: 00007f588d3b7d9e
RDX: 0000000000001000 RSI: 00007f588d361200 RDI: 0000000000000003
RBP: 00007f588d361200 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: ffffffffffffffd0
R13: 0000000000000000 R14: 00007ffe1b5bf5a0 R15: 00007ffe1b5bf688
 </TASK>

The buggy address belongs to the physical page:
page: refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x2a4cf
flags: 0xfff00000000000(node=0|zone=1|lastcpupid=0x7ff)
raw: 00fff00000000000 ffffea0001ddbd08 ffffea00006f0fc8 0000000000000000
raw: 0000000000000000 0000000000000000 00000000ffffffff 0000000000000000
page dumped because: kasan: bad access detected
page_owner tracks the page as freed
page last allocated via order 0, migratetype Unmovable, gfp_mask 0x44dc0(GFP_KERNEL|__GFP_ZERO|__GFP_RETRY_MAYFAIL|__GFP_COMP), pid 5981, tgid 5981 (syz-executor989), ts 130836230668, free_ts 170720200085
 set_page_owner include/linux/page_owner.h:32 [inline]
 post_alloc_hook+0xfd/0x120 mm/page_alloc.c:1859
 prep_new_page mm/page_alloc.c:1867 [inline]
 get_page_from_freelist+0xf48/0x3530 mm/page_alloc.c:3946
 __alloc_frozen_pages_noprof+0x299/0x2dc0 mm/page_alloc.c:5304
 __alloc_pages_noprof+0xb/0x110 mm/page_alloc.c:5338
 __alloc_pages_node_noprof include/linux/gfp.h:291 [inline]
 alloc_pages_node_noprof include/linux/gfp.h:318 [inline]
 alloc_cpu_data+0x60/0x160 kernel/trace/ring_buffer.c:427
 __rb_allocate_pages+0xbd5/0x10a0 kernel/trace/ring_buffer.c:2436
 ring_buffer_resize+0x6df/0x1e80 kernel/trace/ring_buffer.c:3274
 __tracing_resize_ring_buffer.part.0+0x52/0x1f0 kernel/trace/trace.c:4738
 __tracing_resize_ring_buffer kernel/trace/trace.c:4732 [inline]
 tracing_update_buffers+0xd4/0xf0 kernel/trace/trace.c:4977
 system_enable_write+0x151/0x300 kernel/trace/trace_events.c:2020
 vfs_write+0x2aa/0x1050 fs/read_write.c:685
 ksys_write+0x12a/0x250 fs/read_write.c:739
 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
 do_syscall_64+0x115/0x870 arch/x86/entry/syscall_64.c:94
 entry_SYSCALL_64_after_hwframe+0x77/0x7f
page last free pid 6003 tgid 5981 stack trace:
 reset_page_owner include/linux/page_owner.h:25 [inline]
 __free_pages_prepare mm/page_alloc.c:1406 [inline]
 __free_frozen_pages+0x79f/0x1090 mm/page_alloc.c:2950
 free_buffer_page kernel/trace/ring_buffer.c:398 [inline]
 ring_buffer_subbuf_order_set+0x1325/0x18e0 kernel/trace/ring_buffer.c:7444
 buffer_subbuf_size_write+0x182/0x280 kernel/trace/trace.c:8221
 vfs_write+0x2aa/0x1050 fs/read_write.c:685
 ksys_write+0x12a/0x250 fs/read_write.c:739
 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
 do_syscall_64+0x115/0x870 arch/x86/entry/syscall_64.c:94
 entry_SYSCALL_64_after_hwframe+0x77/0x7f

Memory state around the buggy address:
 ffff88802a4cef00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 ffff88802a4cef80: 00 00 00 00 00 00 fc fc fc fc fc fc fc fc fc fc
>ffff88802a4cf000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
                         ^
 ffff88802a4cf080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
 ffff88802a4cf100: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
==================================================================
==================================================================
BUG: KASAN: use-after-free in ring_buffer_event_length+0x218/0x260 kernel/trace/ring_buffer.c:266
Read of size 4 at addr ffff88802a4cf010 by task syz-executor989/6002

CPU: 0 UID: 0 PID: 6002 Comm: syz-executor989 Tainted: G    B               syzkaller #0 PREEMPT(full) 
Tainted: [B]=BAD_PAGE
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 07/16/2026
Call Trace:
 <TASK>
 __dump_stack lib/dump_stack.c:94 [inline]
 dump_stack_lvl+0x100/0x190 lib/dump_stack.c:120
 print_address_description mm/kasan/report.c:378 [inline]
 print_report+0x13d/0x4b0 mm/kasan/report.c:482
 kasan_report+0xdf/0x1c0 mm/kasan/report.c:595
 ring_buffer_event_length+0x218/0x260 kernel/trace/ring_buffer.c:266
 peek_next_entry+0x198/0x250 kernel/trace/trace.c:2359
 __find_next_entry+0x1ed/0x4e0 kernel/trace/trace.c:2398
 trace_find_next_entry_inc+0x3d/0x1c0 kernel/trace/trace.c:2672
 tracing_read_pipe+0x557/0xd60 kernel/trace/trace.c:5440
 vfs_read+0x1e4/0xb40 fs/read_write.c:572
 ksys_read+0x12a/0x250 fs/read_write.c:716
 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
 do_syscall_64+0x115/0x870 arch/x86/entry/syscall_64.c:94
 entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7f588d3b7d9e
Code: 08 0f 85 f5 e2 ff ff 49 89 fb 48 89 f0 48 89 d7 48 89 ce 4c 89 c2 4d 89 ca 4c 8b 44 24 08 4c 8b 4c 24 10 4c 89 5c 24 08 0f 05 <c3> 90 41 57 41 56 4d 89 c6 41 55 4d 89 cd 41 54 55 53 48 83 ec 08
RSP: 002b:00007f588d361198 EFLAGS: 00000246 ORIG_RAX: 0000000000000000
RAX: ffffffffffffffda RBX: 00007f588d3626c0 RCX: 00007f588d3b7d9e
RDX: 0000000000001000 RSI: 00007f588d361200 RDI: 0000000000000003
RBP: 00007f588d361200 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: ffffffffffffffd0
R13: 0000000000000000 R14: 00007ffe1b5bf5a0 R15: 00007ffe1b5bf688
 </TASK>

The buggy address belongs to the physical page:
page: refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x2a4cf
flags: 0xfff00000000000(node=0|zone=1|lastcpupid=0x7ff)
raw: 00fff00000000000 ffffea0001ddbd08 ffffea00006f0fc8 0000000000000000
raw: 0000000000000000 0000000000000000 00000000ffffffff 0000000000000000
page dumped because: kasan: bad access detected
page_owner tracks the page as freed
page last allocated via order 0, migratetype Unmovable, gfp_mask 0x44dc0(GFP_KERNEL|__GFP_ZERO|__GFP_RETRY_MAYFAIL|__GFP_COMP), pid 5981, tgid 5981 (syz-executor989), ts 130836230668, free_ts 170720200085
 set_page_owner include/linux/page_owner.h:32 [inline]
 post_alloc_hook+0xfd/0x120 mm/page_alloc.c:1859
 prep_new_page mm/page_alloc.c:1867 [inline]
 get_page_from_freelist+0xf48/0x3530 mm/page_alloc.c:3946
 __alloc_frozen_pages_noprof+0x299/0x2dc0 mm/page_alloc.c:5304
 __alloc_pages_noprof+0xb/0x110 mm/page_alloc.c:5338
 __alloc_pages_node_noprof include/linux/gfp.h:291 [inline]
 alloc_pages_node_noprof include/linux/gfp.h:318 [inline]
 alloc_cpu_data+0x60/0x160 kernel/trace/ring_buffer.c:427
 __rb_allocate_pages+0xbd5/0x10a0 kernel/trace/ring_buffer.c:2436
 ring_buffer_resize+0x6df/0x1e80 kernel/trace/ring_buffer.c:3274
 __tracing_resize_ring_buffer.part.0+0x52/0x1f0 kernel/trace/trace.c:4738
 __tracing_resize_ring_buffer kernel/trace/trace.c:4732 [inline]
 tracing_update_buffers+0xd4/0xf0 kernel/trace/trace.c:4977
 system_enable_write+0x151/0x300 kernel/trace/trace_events.c:2020
 vfs_write+0x2aa/0x1050 fs/read_write.c:685
 ksys_write+0x12a/0x250 fs/read_write.c:739
 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
 do_syscall_64+0x115/0x870 arch/x86/entry/syscall_64.c:94
 entry_SYSCALL_64_after_hwframe+0x77/0x7f
page last free pid 6003 tgid 5981 stack trace:
 reset_page_owner include/linux/page_owner.h:25 [inline]
 __free_pages_prepare mm/page_alloc.c:1406 [inline]
 __free_frozen_pages+0x79f/0x1090 mm/page_alloc.c:2950
 free_buffer_page kernel/trace/ring_buffer.c:398 [inline]
 ring_buffer_subbuf_order_set+0x1325/0x18e0 kernel/trace/ring_buffer.c:7444
 buffer_subbuf_size_write+0x182/0x280 kernel/trace/trace.c:8221
 vfs_write+0x2aa/0x1050 fs/read_write.c:685
 ksys_write+0x12a/0x250 fs/read_write.c:739
 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
 do_syscall_64+0x115/0x870 arch/x86/entry/syscall_64.c:94
 entry_SYSCALL_64_after_hwframe+0x77/0x7f

Memory state around the buggy address:
 ffff88802a4cef00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 ffff88802a4cef80: 00 00 00 00 00 00 fc fc fc fc fc fc fc fc fc fc
>ffff88802a4cf000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
                         ^
 ffff88802a4cf080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
 ffff88802a4cf100: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
==================================================================
==================================================================
BUG: KASAN: use-after-free in rb_event_data_length kernel/trace/ring_buffer.c:198 [inline]
BUG: KASAN: use-after-free in rb_event_length kernel/trace/ring_buffer.c:227 [inline]
BUG: KASAN: use-after-free in ring_buffer_event_length+0x243/0x260 kernel/trace/ring_buffer.c:269
Read of size 1 at addr ffff88802a4cf010 by task syz-executor989/6002

CPU: 0 UID: 0 PID: 6002 Comm: syz-executor989 Tainted: G    B               syzkaller #0 PREEMPT(full) 
Tainted: [B]=BAD_PAGE
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 07/16/2026
Call Trace:
 <TASK>
 __dump_stack lib/dump_stack.c:94 [inline]
 dump_stack_lvl+0x100/0x190 lib/dump_stack.c:120
 print_address_description mm/kasan/report.c:378 [inline]
 print_report+0x13d/0x4b0 mm/kasan/report.c:482
 kasan_report+0xdf/0x1c0 mm/kasan/report.c:595
 rb_event_data_length kernel/trace/ring_buffer.c:198 [inline]
 rb_event_length kernel/trace/ring_buffer.c:227 [inline]
 ring_buffer_event_length+0x243/0x260 kernel/trace/ring_buffer.c:269
 peek_next_entry+0x198/0x250 kernel/trace/trace.c:2359
 __find_next_entry+0x1ed/0x4e0 kernel/trace/trace.c:2398
 trace_find_next_entry_inc+0x3d/0x1c0 kernel/trace/trace.c:2672
 tracing_read_pipe+0x557/0xd60 kernel/trace/trace.c:5440
 vfs_read+0x1e4/0xb40 fs/read_write.c:572
 ksys_read+0x12a/0x250 fs/read_write.c:716
 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
 do_syscall_64+0x115/0x870 arch/x86/entry/syscall_64.c:94
 entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7f588d3b7d9e
Code: 08 0f 85 f5 e2 ff ff 49 89 fb 48 89 f0 48 89 d7 48 89 ce 4c 89 c2 4d 89 ca 4c 8b 44 24 08 4c 8b 4c 24 10 4c 89 5c 24 08 0f 05 <c3> 90 41 57 41 56 4d 89 c6 41 55 4d 89 cd 41 54 55 53 48 83 ec 08
RSP: 002b:00007f588d361198 EFLAGS: 00000246 ORIG_RAX: 0000000000000000
RAX: ffffffffffffffda RBX: 00007f588d3626c0 RCX: 00007f588d3b7d9e
RDX: 0000000000001000 RSI: 00007f588d361200 RDI: 0000000000000003
RBP: 00007f588d361200 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: ffffffffffffffd0
R13: 0000000000000000 R14: 00007ffe1b5bf5a0 R15: 00007ffe1b5bf688
 </TASK>

The buggy address belongs to the physical page:
page: refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x2a4cf
flags: 0xfff00000000000(node=0|zone=1|lastcpupid=0x7ff)
raw: 00fff00000000000 ffffea0001ddbd08 ffffea00006f0fc8 0000000000000000
raw: 0000000000000000 0000000000000000 00000000ffffffff 0000000000000000
page dumped because: kasan: bad access detected
page_owner tracks the page as freed
page last allocated via order 0, migratetype Unmovable, gfp_mask 0x44dc0(GFP_KERNEL|__GFP_ZERO|__GFP_RETRY_MAYFAIL|__GFP_COMP), pid 5981, tgid 5981 (syz-executor989), ts 130836230668, free_ts 170720200085
 set_page_owner include/linux/page_owner.h:32 [inline]
 post_alloc_hook+0xfd/0x120 mm/page_alloc.c:1859
 prep_new_page mm/page_alloc.c:1867 [inline]
 get_page_from_freelist+0xf48/0x3530 mm/page_alloc.c:3946
 __alloc_frozen_pages_noprof+0x299/0x2dc0 mm/page_alloc.c:5304
 __alloc_pages_noprof+0xb/0x110 mm/page_alloc.c:5338
 __alloc_pages_node_noprof include/linux/gfp.h:291 [inline]
 alloc_pages_node_noprof include/linux/gfp.h:318 [inline]
 alloc_cpu_data+0x60/0x160 kernel/trace/ring_buffer.c:427
 __rb_allocate_pages+0xbd5/0x10a0 kernel/trace/ring_buffer.c:2436
 ring_buffer_resize+0x6df/0x1e80 kernel/trace/ring_buffer.c:3274
 __tracing_resize_ring_buffer.part.0+0x52/0x1f0 kernel/trace/trace.c:4738
 __tracing_resize_ring_buffer kernel/trace/trace.c:4732 [inline]
 tracing_update_buffers+0xd4/0xf0 kernel/trace/trace.c:4977
 system_enable_write+0x151/0x300 kernel/trace/trace_events.c:2020
 vfs_write+0x2aa/0x1050 fs/read_write.c:685
 ksys_write+0x12a/0x250 fs/read_write.c:739
 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
 do_syscall_64+0x115/0x870 arch/x86/entry/syscall_64.c:94
 entry_SYSCALL_64_after_hwframe+0x77/0x7f
page last free pid 6003 tgid 5981 stack trace:
 reset_page_owner include/linux/page_owner.h:25 [inline]
 __free_pages_prepare mm/page_alloc.c:1406 [inline]
 __free_frozen_pages+0x79f/0x1090 mm/page_alloc.c:2950
 free_buffer_page kernel/trace/ring_buffer.c:398 [inline]
 ring_buffer_subbuf_order_set+0x1325/0x18e0 kernel/trace/ring_buffer.c:7444
 buffer_subbuf_size_write+0x182/0x280 kernel/trace/trace.c:8221
 vfs_write+0x2aa/0x1050 fs/read_write.c:685
 ksys_write+0x12a/0x250 fs/read_write.c:739
 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
 do_syscall_64+0x115/0x870 arch/x86/entry/syscall_64.c:94
 entry_SYSCALL_64_after_hwframe+0x77/0x7f

Memory state around the buggy address:
 ffff88802a4cef00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 ffff88802a4cef80: 00 00 00 00 00 00 fc fc fc fc fc fc fc fc fc fc
>ffff88802a4cf000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
                         ^
 ffff88802a4cf080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
 ffff88802a4cf100: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
==================================================================
==================================================================
BUG: KASAN: use-after-free in rb_event_data kernel/trace/ring_buffer.c:284 [inline]
BUG: KASAN: use-after-free in ring_buffer_event_data+0x129/0x150 kernel/trace/ring_buffer.c:300
Read of size 4 at addr ffff88802a4cf010 by task syz-executor989/6002

CPU: 1 UID: 0 PID: 6002 Comm: syz-executor989 Tainted: G    B               syzkaller #0 PREEMPT(full) 
Tainted: [B]=BAD_PAGE
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 07/16/2026
Call Trace:
 <TASK>
 __dump_stack lib/dump_stack.c:94 [inline]
 dump_stack_lvl+0x100/0x190 lib/dump_stack.c:120
 print_address_description mm/kasan/report.c:378 [inline]
 print_report+0x13d/0x4b0 mm/kasan/report.c:482
 kasan_report+0xdf/0x1c0 mm/kasan/report.c:595
 rb_event_data kernel/trace/ring_buffer.c:284 [inline]
 ring_buffer_event_data+0x129/0x150 kernel/trace/ring_buffer.c:300
 peek_next_entry+0x1d3/0x250 kernel/trace/trace.c:2360
 __find_next_entry+0x1ed/0x4e0 kernel/trace/trace.c:2398
 trace_find_next_entry_inc+0x3d/0x1c0 kernel/trace/trace.c:2672
 tracing_read_pipe+0x557/0xd60 kernel/trace/trace.c:5440
 vfs_read+0x1e4/0xb40 fs/read_write.c:572
 ksys_read+0x12a/0x250 fs/read_write.c:716
 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
 do_syscall_64+0x115/0x870 arch/x86/entry/syscall_64.c:94
 entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7f588d3b7d9e
Code: 08 0f 85 f5 e2 ff ff 49 89 fb 48 89 f0 48 89 d7 48 89 ce 4c 89 c2 4d 89 ca 4c 8b 44 24 08 4c 8b 4c 24 10 4c 89 5c 24 08 0f 05 <c3> 90 41 57 41 56 4d 89 c6 41 55 4d 89 cd 41 54 55 53 48 83 ec 08
RSP: 002b:00007f588d361198 EFLAGS: 00000246 ORIG_RAX: 0000000000000000
RAX: ffffffffffffffda RBX: 00007f588d3626c0 RCX: 00007f588d3b7d9e
RDX: 0000000000001000 RSI: 00007f588d361200 RDI: 0000000000000003
RBP: 00007f588d361200 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: ffffffffffffffd0
R13: 0000000000000000 R14: 00007ffe1b5bf5a0 R15: 00007ffe1b5bf688
 </TASK>

The buggy address belongs to the physical page:
page: refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x2a4cf
flags: 0xfff00000000000(node=0|zone=1|lastcpupid=0x7ff)
raw: 00fff00000000000 ffffea0001ddbd08 ffffea00006f0fc8 0000000000000000
raw: 0000000000000000 0000000000000000 00000000ffffffff 0000000000000000
page dumped because: kasan: bad access detected
page_owner tracks the page as freed
page last allocated via order 0, migratetype Unmovable, gfp_mask 0x44dc0(GFP_KERNEL|__GFP_ZERO|__GFP_RETRY_MAYFAIL|__GFP_COMP), pid 5981, tgid 5981 (syz-executor989), ts 130836230668, free_ts 170720200085
 set_page_owner include/linux/page_owner.h:32 [inline]
 post_alloc_hook+0xfd/0x120 mm/page_alloc.c:1859
 prep_new_page mm/page_alloc.c:1867 [inline]
 get_page_from_freelist+0xf48/0x3530 mm/page_alloc.c:3946
 __alloc_frozen_pages_noprof+0x299/0x2dc0 mm/page_alloc.c:5304
 __alloc_pages_noprof+0xb/0x110 mm/page_alloc.c:5338
 __alloc_pages_node_noprof include/linux/gfp.h:291 [inline]
 alloc_pages_node_noprof include/linux/gfp.h:318 [inline]
 alloc_cpu_data+0x60/0x160 kernel/trace/ring_buffer.c:427
 __rb_allocate_pages+0xbd5/0x10a0 kernel/trace/ring_buffer.c:2436
 ring_buffer_resize+0x6df/0x1e80 kernel/trace/ring_buffer.c:3274
 __tracing_resize_ring_buffer.part.0+0x52/0x1f0 kernel/trace/trace.c:4738
 __tracing_resize_ring_buffer kernel/trace/trace.c:4732 [inline]
 tracing_update_buffers+0xd4/0xf0 kernel/trace/trace.c:4977
 system_enable_write+0x151/0x300 kernel/trace/trace_events.c:2020
 vfs_write+0x2aa/0x1050 fs/read_write.c:685
 ksys_write+0x12a/0x250 fs/read_write.c:739
 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
 do_syscall_64+0x115/0x870 arch/x86/entry/syscall_64.c:94
 entry_SYSCALL_64_after_hwframe+0x77/0x7f
page last free pid 6003 tgid 5981 stack trace:
 reset_page_owner include/linux/page_owner.h:25 [inline]
 __free_pages_prepare mm/page_alloc.c:1406 [inline]
 __free_frozen_pages+0x79f/0x1090 mm/page_alloc.c:2950
 free_buffer_page kernel/trace/ring_buffer.c:398 [inline]
 ring_buffer_subbuf_order_set+0x1325/0x18e0 kernel/trace/ring_buffer.c:7444
 buffer_subbuf_size_write+0x182/0x280 kernel/trace/trace.c:8221
 vfs_write+0x2aa/0x1050 fs/read_write.c:685
 ksys_write+0x12a/0x250 fs/read_write.c:739
 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
 do_syscall_64+0x115/0x870 arch/x86/entry/syscall_64.c:94
 entry_SYSCALL_64_after_hwframe+0x77/0x7f

Memory state around the buggy address:
 ffff88802a4cef00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 ffff88802a4cef80: 00 00 00 00 00 00 fc fc fc fc fc fc fc fc fc fc
>ffff88802a4cf000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
                         ^
 ffff88802a4cf080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
 ffff88802a4cf100: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
==================================================================


---
This report is generated by a bot. It may contain errors.
See https://goo.gl/tpsmEJ for more information about syzbot.
syzbot engineers can be reached at syzkaller@googlegroups.com.

syzbot will keep track of this issue. See:
https://goo.gl/tpsmEJ#status for how to communicate with syzbot.

If the report is already addressed, let syzbot know by replying with:
#syz fix: exact-commit-title

If you want syzbot to run the reproducer, reply with:
#syz test: git://repo/address.git branch-or-commit-hash
If you attach or paste a git patch, syzbot will apply it before testing.

If you want to overwrite report's subsystems, reply with:
#syz set subsystems: new-subsystem
(See the list of subsystem names on the web dashboard)

If the report is a duplicate of another one, reply with:
#syz dup: exact-subject-of-another-report

If you want to undo deduplication, reply with:
#syz undup

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Forwarded: [PATCH] tracing: Fix use-after-free in trace_pipe read on sub-buffer order change
  2026-08-16 22:10 [syzbot] KASAN: use-after-free Read in ring_buffer_peek syzbot
@ 2026-08-17  5:03 ` syzbot
  0 siblings, 0 replies; 2+ messages in thread
From: syzbot @ 2026-08-17  5:03 UTC (permalink / raw)
  To: linux-kernel, syzkaller-bugs

For archival purposes, forwarding an incoming command email to
linux-kernel@vger.kernel.org, syzkaller-bugs@googlegroups.com.

***

Subject: [PATCH] tracing: Fix use-after-free in trace_pipe read on sub-buffer order change
Author: kartikey406@gmail.com

#syz test: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master


Writing to buffer_subbuf_size_kb calls ring_buffer_subbuf_order_set(),
which frees every sub-buffer of the ring buffer, including the reader
page, and replaces them with newly allocated ones.

Readers of trace_pipe hold pointers into those pages. ring_buffer_peek()
looks up an event under cpu_buffer->reader_lock but returns the event
pointer after dropping the lock, and peek_next_entry() then calls
ring_buffer_event_length() and ring_buffer_event_data() on it. If the
sub-buffer order is changed in that window, the reader dereferences
freed memory:

  BUG: KASAN: use-after-free in ring_buffer_peek+0x3e0/0x430
  Read of size 1 at addr ffff88802a4cf010 by task syz-executor989/6002

  Freed by:
   free_buffer_page kernel/trace/ring_buffer.c:398 [inline]
   ring_buffer_subbuf_order_set+0x1325/0x18e0 kernel/trace/ring_buffer.c:7444
   buffer_subbuf_size_write+0x182/0x280 kernel/trace/trace.c:8221

Take trace_access_lock(RING_BUFFER_ALL_CPUS) around the order change.
This is the lock trace_pipe readers already hold across their entire
peek-and-print loop, so the swap can no longer race with a reader that
is dereferencing a peeked event.

Reported-by: syzbot+685955db58555575fdd2@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=685955db58555575fdd2
Fixes: f9b94daa542a ("ring-buffer: Set new size of the ring buffer sub page")
Signed-off-by: Deepanshu Kartikey <kartikey406@gmail.com>
---
 kernel/trace/trace.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 395238b2b715..c38a5de602e0 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -8214,6 +8214,8 @@ buffer_subbuf_size_write(struct file *filp, const char __user *ubuf,
 	/* Do not allow tracing while changing the order of the ring buffer */
 	tracing_stop_tr(tr);
 
+	trace_access_lock(RING_BUFFER_ALL_CPUS);
+
 	old_order = ring_buffer_subbuf_order_get(tr->array_buffer.buffer);
 	if (old_order == order)
 		goto out;
@@ -8253,6 +8255,7 @@ buffer_subbuf_size_write(struct file *filp, const char __user *ubuf,
 #endif
 	(*ppos)++;
  out:
+	trace_access_unlock(RING_BUFFER_ALL_CPUS);
 	if (ret)
 		cnt = ret;
 	tracing_start_tr(tr);
-- 
2.43.0


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-08-17  5:03 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-08-16 22:10 [syzbot] KASAN: use-after-free Read in ring_buffer_peek syzbot
2026-08-17  5:03 ` Forwarded: [PATCH] tracing: Fix use-after-free in trace_pipe read on sub-buffer order change syzbot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®