Thread (4 messages) flat view 4 messages, 4 authors, 2018-02-01

RE: KASAN: use-after-free Read in tipc_group_size

From: Jon Maloy <hidden>
Date: 2018-01-08 20:11:45
Also in: lkml

-----Original Message-----
From: Cong Wang [mailto:xiyou.wangcong@gmail.com]
Sent: Monday, January 08, 2018 13:44
To: syzbot <redacted>
Cc: David Miller <davem@davemloft.net>; Jon Maloy
[off-list ref]; LKML [off-list ref]; Linux
Kernel Network Developers [off-list ref]; syzkaller-
bugs@googlegroups.com; tipc-discussion@lists.sourceforge.net; Ying Xue
[off-list ref]
Subject: Re: KASAN: use-after-free Read in tipc_group_size

On Mon, Jan 8, 2018 at 6:58 AM, syzbot
[off-list ref] wrote:
quoted
Hello,

syzkaller hit the following crash on
b2cd1df66037e7c4697c7e40496bf7e4a5e16a2d
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/maste
r
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+aae58876fb5a1fad0a4b@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.
==========================================================
========
quoted
BUG: KASAN: use-after-free in tipc_group_size+0x40/0x50
net/tipc/group.c:158 Read of size 2 at addr ffff8801c08ba280 by task
syzkaller447710/3513

CPU: 0 PID: 3513 Comm: syzkaller447710 Not tainted 4.15.0-rc7+ #252
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:252
kasan_report_error mm/kasan/report.c:351 [inline]
 kasan_report+0x25b/0x340 mm/kasan/report.c:409
 __asan_report_load2_noabort+0x14/0x20 mm/kasan/report.c:428
 tipc_group_size+0x40/0x50 net/tipc/group.c:158
 tipc_poll+0x374/0x4f0 net/tipc/socket.c:739
Seems we have to lock the sock for tipc_group_size() in tipc_poll().
Not quite. I think it is that we initialize 'grp' on the stack before we call sock_poll_wait() and access it after it returns.
This is anyway fixed in patch #9 of the series I just sent to net-next, where the poll() handling for group members is redesigned.

///jon
quoted
 sock_poll+0x141/0x320 net/socket.c:1117  do_pollfd fs/select.c:822
[inline]  do_poll fs/select.c:872 [inline]
 do_sys_poll+0x715/0x10b0 fs/select.c:966  SYSC_poll fs/select.c:1024
[inline]
 SyS_poll+0x10d/0x450 fs/select.c:1012
entry_SYSCALL_64_fastpath+0x23/0x9a
RIP: 0033:0x445cb9
RSP: 002b:00007f04886b1ce8 EFLAGS: 00000246 ORIG_RAX:
0000000000000007
quoted
RAX: ffffffffffffffda RBX: 00000000006dac3c RCX: 0000000000445cb9
RDX: 0000000000000000 RSI: 0000000000000001 RDI: 0000000020fa2ff8
RBP: 00000000006dac38 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 00007ffc84d56d7f R14: 00007f04886b29c0 R15: 0000000000000005

Allocated by task 3510:
 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:551
 kmem_cache_alloc_trace+0x136/0x750 mm/slab.c:3610  kmalloc
include/linux/slab.h:499 [inline]  kzalloc include/linux/slab.h:688
[inline]
 tipc_group_create+0x116/0x9c0 net/tipc/group.c:167  tipc_sk_join
net/tipc/socket.c:2747 [inline]
 tipc_setsockopt+0x249/0xc10 net/tipc/socket.c:2861  SYSC_setsockopt
net/socket.c:1829 [inline]
 SyS_setsockopt+0x189/0x360 net/socket.c:1808
entry_SYSCALL_64_fastpath+0x23/0x9a

Freed by task 3510:
 save_stack+0x43/0xd0 mm/kasan/kasan.c:447  set_track
mm/kasan/kasan.c:459 [inline]
 kasan_slab_free+0x71/0xc0 mm/kasan/kasan.c:524  __cache_free
mm/slab.c:3488 [inline]
 kfree+0xd6/0x260 mm/slab.c:3803
 tipc_group_delete+0x2c8/0x3d0 net/tipc/group.c:206  tipc_sk_join
net/tipc/socket.c:2760 [inline]
 tipc_setsockopt+0xb0d/0xc10 net/tipc/socket.c:2861  SYSC_setsockopt
net/socket.c:1829 [inline]
 SyS_setsockopt+0x189/0x360 net/socket.c:1808
entry_SYSCALL_64_fastpath+0x23/0x9a

The buggy address belongs to the object at ffff8801c08ba200  which
belongs to the cache kmalloc-192 of size 192 The buggy address is
located 128 bytes inside of  192-byte region [ffff8801c08ba200,
ffff8801c08ba2c0) The buggy address belongs to the page:
page:ffffea0007022e80 count:1 mapcount:0 mapping:ffff8801c08ba000
index:0x0
flags: 0x2fffc0000000100(slab)
raw: 02fffc0000000100 ffff8801c08ba000 0000000000000000
0000000100000010
raw: ffffea00071338a0 ffffea0006fe2360 ffff8801dac00040
0000000000000000 page dumped because: kasan: bad access detected

Memory state around the buggy address:
 ffff8801c08ba180: fb fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
 ffff8801c08ba200: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
quoted
ffff8801c08ba280: fb fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
                   ^
 ffff8801c08ba300: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
 ffff8801c08ba380: fb fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
==========================================================
========
quoted

---
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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help