security, hugetlbfs: write to user memory in hugetlbfs_destroy_inode
From: Dmitry Vyukov <dvyukov@google.com>
Date: 2017-03-23 13:07:23
Hello, I've got the following report while running syzkaller fuzzer on 093b995e3b55a0ae0670226ddfcb05bfbf0099ae. Note the preceding injected kmalloc failure in inode_alloc_security, most likely it's the root cause. FAULT_INJECTION: forcing a failure. name failslab, interval 1, probability 0, space 0, times 0 CPU: 3 PID: 14086 Comm: syz-executor6 Not tainted 4.11.0-rc3+ #364 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs 01/01/2011 Call Trace: __dump_stack lib/dump_stack.c:16 [inline] dump_stack+0x1b8/0x28d lib/dump_stack.c:52 fail_dump lib/fault-inject.c:45 [inline] should_fail+0x78a/0x870 lib/fault-inject.c:154 should_failslab+0xec/0x120 mm/failslab.c:31 slab_pre_alloc_hook mm/slab.h:434 [inline] slab_alloc mm/slab.c:3394 [inline] kmem_cache_alloc+0x200/0x720 mm/slab.c:3570 kmem_cache_zalloc include/linux/slab.h:653 [inline] inode_alloc_security security/selinux/hooks.c:221 [inline] selinux_inode_alloc_security+0xf9/0x390 security/selinux/hooks.c:2833 security_inode_alloc+0x90/0xd0 security/security.c:387 inode_init_always+0x5af/0xc20 fs/inode.c:166 alloc_inode+0x82/0x180 fs/inode.c:214 new_inode_pseudo+0x69/0x190 fs/inode.c:889 new_inode+0x1c/0x40 fs/inode.c:918 hugetlbfs_get_inode+0x40/0x420 fs/hugetlbfs/inode.c:734 hugetlb_file_setup+0x329/0x9f0 fs/hugetlbfs/inode.c:1282 newseg+0x422/0xd30 ipc/shm.c:575 ipcget_new ipc/util.c:285 [inline] ipcget+0x21e/0x580 ipc/util.c:639 SYSC_shmget ipc/shm.c:673 [inline] SyS_shmget+0x158/0x230 ipc/shm.c:657 entry_SYSCALL_64_fastpath+0x1f/0xc2 RIP: 0033:0x445b79 RSP: 002b:00007f9dcc5df858 EFLAGS: 00000282 ORIG_RAX: 000000000000001d RAX: ffffffffffffffda RBX: 0000000000708000 RCX: 0000000000445b79