]> git.baikalelectronics.ru Git - kernel.git/commit
bpfilter: fix race in pipe access
authorAlexei Starovoitov <ast@kernel.org>
Thu, 7 Jun 2018 22:31:14 +0000 (15:31 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 8 Jun 2018 00:07:28 +0000 (20:07 -0400)
commite754b95550b5fc6a3fdf1a08b8d1a37a6dbb219a
treed7710bfa72ece08d436fbb70d66314abf2634e24
parent67ae9fa635c8f62675941dc8e6766a7c55eed848
bpfilter: fix race in pipe access

syzbot reported the following crash
[  338.293946] bpfilter: read fail -512
[  338.304515] kasan: GPF could be caused by NULL-ptr deref or user memory access
[  338.311863] general protection fault: 0000 [#1] SMP KASAN
[  338.344360] RIP: 0010:__vfs_write+0x4a6/0x960
[  338.426363] Call Trace:
[  338.456967]  __kernel_write+0x10c/0x380
[  338.460928]  __bpfilter_process_sockopt+0x1d8/0x35b
[  338.487103]  bpfilter_mbox_request+0x4d/0xb0
[  338.491492]  bpfilter_ip_get_sockopt+0x6b/0x90

This can happen when multiple cpus trying to talk to user mode process
via bpfilter_mbox_request(). One cpu grabs the mutex while another goes to
sleep on the same mutex. Then former cpu sees that umh pipe is down and
shuts down the pipes. Later cpu finally acquires the mutex and crashes
on freed pipe.
Fix the race by using info.pid as an indicator that umh and pipes are healthy
and check it after acquiring the mutex.

Fixes: 6507af9e4e23 ("net: add skeleton of bpfilter kernel module")
Reported-by: syzbot+7ade6c94abb2774c0fee@syzkaller.appspotmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/bpfilter/bpfilter_kern.c