KASAN: slab-out-of-bounds Read in perf_event_fd_array_release

From: syzbot <hidden>
Date: 2018-01-10 12:59:04
Also in: lkml

Hello,

syzkaller hit the following crash on  
b4464bcab38d3f7fe995a7cb960eeac6889bec08
git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/master
compiler: gcc (GCC) 7.1.1 20170620
.config is attached
Raw console output is attached.
C reproducer is attached
syzkaller reproducer is attached. See https://goo.gl/kgGztJ
for information about syzkaller reproducers


IMPORTANT: if you fix the bug, please add the following tag to the commit:
Reported-by: syzbot+6c15e9744f75f2364773@syzkaller.appspotmail.com
It will help syzbot understand when the bug is fixed. See footer for  
details.
If you forward the report, please keep this part and the footer.

audit: type=1400 audit(1515566962.610:11): avc:  denied  { map_read  
map_write } for  pid=3488 comm="syzkaller000829"  
scontext=unconfined_u:system_r:insmod_t:s0-s0:c0.c1023  
tcontext=unconfined_u:system_r:insmod_t:s0-s0:c0.c1023 tclass=bpf  
permissive=1
==================================================================
BUG: KASAN: slab-out-of-bounds in __read_once_size  
include/linux/compiler.h:188 [inline]
BUG: KASAN: slab-out-of-bounds in perf_event_fd_array_release+0x435/0x480  
kernel/bpf/arraymap.c:544
Read of size 8 at addr ffff8801c0055140 by task syzkaller000829/3488

CPU: 0 PID: 3488 Comm: syzkaller000829 Not tainted  
4.15.0-rc7-next-20180110+ #93
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS  
Google 01/01/2011
Call Trace:
  __dump_stack lib/dump_stack.c:17 [inline]
  dump_stack+0x194/0x257 lib/dump_stack.c:53
  print_address_description+0x73/0x250 mm/kasan/report.c:256
  kasan_report_error mm/kasan/report.c:354 [inline]
  kasan_report+0x23b/0x360 mm/kasan/report.c:412
  __asan_report_load8_noabort+0x14/0x20 mm/kasan/report.c:433
  __read_once_size include/linux/compiler.h:188 [inline]
  perf_event_fd_array_release+0x435/0x480 kernel/bpf/arraymap.c:544
  bpf_map_release+0x84/0xc0 kernel/bpf/syscall.c:257
  __fput+0x327/0x7e0 fs/file_table.c:209
  ____fput+0x15/0x20 fs/file_table.c:243
  task_work_run+0x199/0x270 kernel/task_work.c:113
  exit_task_work include/linux/task_work.h:22 [inline]
  do_exit+0x9bb/0x1ad0 kernel/exit.c:869
  do_group_exit+0x149/0x400 kernel/exit.c:972
  SYSC_exit_group kernel/exit.c:983 [inline]
  SyS_exit_group+0x1d/0x20 kernel/exit.c:981
  entry_SYSCALL_64_fastpath+0x29/0xa0
RIP: 0033:0x440a69
RSP: 002b:00000000007dff48 EFLAGS: 00000206 ORIG_RAX: 00000000000000e7
RAX: ffffffffffffffda RBX: 00007ffda1715470 RCX: 0000000000440a69
RDX: 0000000000440a69 RSI: 000000000000002c RDI: 0000000000000001
RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000206 R12: 0000000000402240
R13: 00000000004022d0 R14: 0000000000000000 R15: 0000000000000000

Allocated by task 3488:
  save_stack+0x43/0xd0 mm/kasan/kasan.c:447
  set_track mm/kasan/kasan.c:459 [inline]
  kasan_kmalloc+0xad/0xe0 mm/kasan/kasan.c:552
  __do_kmalloc_node mm/slab.c:3669 [inline]
  __kmalloc_node+0x47/0x70 mm/slab.c:3676
  kmalloc_node include/linux/slab.h:557 [inline]
  bpf_map_area_alloc+0x32/0x80 kernel/bpf/syscall.c:123
  array_map_alloc+0x351/0xa00 kernel/bpf/arraymap.c:96
  fd_array_map_alloc+0x57/0x70 kernel/bpf/arraymap.c:341
  find_and_alloc_map kernel/bpf/syscall.c:105 [inline]
  map_create kernel/bpf/syscall.c:404 [inline]
  SYSC_bpf kernel/bpf/syscall.c:1805 [inline]
  SyS_bpf+0x7f8/0x4400 kernel/bpf/syscall.c:1782
  entry_SYSCALL_64_fastpath+0x29/0xa0

Freed by task 1980:
  save_stack+0x43/0xd0 mm/kasan/kasan.c:447
  set_track mm/kasan/kasan.c:459 [inline]
  __kasan_slab_free+0x11a/0x170 mm/kasan/kasan.c:520
  kasan_slab_free+0xe/0x10 mm/kasan/kasan.c:527
  __cache_free mm/slab.c:3485 [inline]
  kfree+0xd9/0x260 mm/slab.c:3800
  seq_release fs/seq_file.c:366 [inline]
  single_release+0x80/0xb0 fs/seq_file.c:602
  __fput+0x327/0x7e0 fs/file_table.c:209
  ____fput+0x15/0x20 fs/file_table.c:243
  task_work_run+0x199/0x270 kernel/task_work.c:113
  tracehook_notify_resume include/linux/tracehook.h:191 [inline]
  exit_to_usermode_loop+0x275/0x2f0 arch/x86/entry/common.c:165
  prepare_exit_to_usermode arch/x86/entry/common.c:195 [inline]
  syscall_return_slowpath+0x490/0x550 arch/x86/entry/common.c:264
  entry_SYSCALL_64_fastpath+0x9e/0xa0

The buggy address belongs to the object at ffff8801c0055040
  which belongs to the cache kmalloc-256 of size 256
The buggy address is located 0 bytes to the right of
  256-byte region [ffff8801c0055040, ffff8801c0055140)
The buggy address belongs to the page:
page:ffffea0007001540 count:1 mapcount:0 mapping:ffff8801c0055040 index:0x0
flags: 0x2fffc0000000100(slab)
raw: 02fffc0000000100 ffff8801c0055040 0000000000000000 000000010000000c
raw: ffffea000701e720 ffffea000700c7a0 ffff8801dac007c0 0000000000000000
page dumped because: kasan: bad access detected

Memory state around the buggy address:
  ffff8801c0055000: fc fc fc fc fc fc fc fc 00 00 00 00 00 00 00 00
  ffff8801c0055080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ffff8801c0055100: 00 00 00 00 00 00 00 00 fc fc fc fc fc fc fc fc
                                            ^
  ffff8801c0055180: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
  ffff8801c0055200: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
==================================================================


---
This bug is generated by a dumb bot. It may contain errors.
See https://goo.gl/tpsmEJ for details.
Direct all questions to syzkaller@googlegroups.com.

syzbot will keep track of this bug report.
If you forgot to add the Reported-by tag, once the fix for this bug is  
merged
into any tree, please reply to this email with:
#syz fix: exact-commit-title
If you want to test a patch for this bug, please reply with:
#syz test: git://repo/address.git branch
and provide the patch inline or as an attachment.
To mark this as a duplicate of another syzbot report, please reply with:
#syz dup: exact-subject-of-another-report
If it's a one-off invalid bug report, please reply with:
#syz invalid
Note: if the crash happens again, it will cause creation of a new bug  
report.
Note: all commands must start from beginning of the line in the email body.

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help