WARNING: suspicious RCU usage in pid_task

37 views
Skip to first unread message

syzbot

unread,
Jun 16, 2018, 2:47:03ā€ÆAM6/16/18
to ak...@linux-foundation.org, dhow...@redhat.com, ebie...@xmission.com, gs05...@gmail.com, linux-...@vger.kernel.org, ol...@redhat.com, pasha.t...@oracle.com, ri...@redhat.com, rp...@linux.vnet.ibm.com, syzkall...@googlegroups.com, wangkef...@huawei.com
Hello,

syzbot found the following crash on:

HEAD commit: f0dc7f9c6dd9 Merge git://git.kernel.org/pub/scm/linux/kern..
git tree: net-next
console output: https://syzkaller.appspot.com/x/log.txt?x=124b698f800000
kernel config: https://syzkaller.appspot.com/x/.config?x=fa9c20c48788d1c1
dashboard link: https://syzkaller.appspot.com/bug?extid=c2d4c3ae3fd90bbaf059
compiler: gcc (GCC) 8.0.1 20180413 (experimental)

Unfortunately, I don't have any reproducer for this crash yet.

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

bpfilter: read fail -512

=============================
WARNING: suspicious RCU usage
4.17.0+ #84 Not tainted
-----------------------------
kernel/pid.c:323 suspicious rcu_dereference_check() usage!

other info that might help us debug this:


rcu_scheduler_active = 2, debug_locks = 1
1 lock held by syz-executor7/29997:
device lo entered promiscuous mode
#0: 000000001e4dec85 (bpfilter_lock){+.+.}, at:
__bpfilter_process_sockopt+0x1bd/0x384 net/bpfilter/bpfilter_kern.c:67

stack backtrace:
CPU: 1 PID: 29997 Comm: syz-executor7 Not tainted 4.17.0+ #84
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
Google 01/01/2011
IPVS: ftp: loaded support on port[0] = 21
Call Trace:
__dump_stack lib/dump_stack.c:77 [inline]
dump_stack+0x1b9/0x294 lib/dump_stack.c:113
lockdep_rcu_suspicious+0x14a/0x153 kernel/locking/lockdep.c:4562
pid_task+0x1b9/0x1e0 kernel/pid.c:322
shutdown_umh.constprop.0+0x33/0x7c net/bpfilter/bpfilter_kern.c:29
__stop_umh net/bpfilter/bpfilter_kern.c:41 [inline]
__bpfilter_process_sockopt.cold.1+0x9b/0xa0 net/bpfilter/bpfilter_kern.c:81
bpfilter_mbox_request+0x4d/0xb0 net/ipv4/bpfilter/sockopt.c:25
bpfilter_ip_get_sockopt+0x6b/0x90 net/ipv4/bpfilter/sockopt.c:42
ip_getsockopt+0x238/0x2a0 net/ipv4/ip_sockglue.c:1563
tcp_getsockopt+0x93/0xe0 net/ipv4/tcp.c:3534
sock_common_getsockopt+0x9a/0xe0 net/core/sock.c:3012
smc_getsockopt+0xc7/0x120 net/smc/af_smc.c:1473
__sys_getsockopt+0x1a5/0x370 net/socket.c:1984
__do_sys_getsockopt net/socket.c:1995 [inline]
__se_sys_getsockopt net/socket.c:1992 [inline]
__x64_sys_getsockopt+0xbe/0x150 net/socket.c:1992
do_syscall_64+0x1b1/0x800 arch/x86/entry/common.c:290
entry_SYSCALL_64_after_hwframe+0x49/0xbe
RIP: 0033:0x455b29
Code: 1d ba fb ff c3 66 2e 0f 1f 84 00 00 00 00 00 66 90 48 89 f8 48 89 f7
48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff
ff 0f 83 eb b9 fb ff c3 66 2e 0f 1f 84 00 00 00 00
RSP: 002b:00007f0391bdbc68 EFLAGS: 00000246 ORIG_RAX: 0000000000000037
RAX: ffffffffffffffda RBX: 00007f0391bdc6d4 RCX: 0000000000455b29
RDX: 0000000000000043 RSI: 0000000000000000 RDI: 0000000000000016
RBP: 000000000072bea0 R08: 0000000020000040 R09: 0000000000000000
R10: 0000000020000000 R11: 0000000000000246 R12: 00000000ffffffff
R13: 00000000004c3808 R14: 00000000004c8f78 R15: 0000000000000000
netlink: 220 bytes leftover after parsing attributes in process
`syz-executor2'.


---
This bug 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 syzk...@googlegroups.com.

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

Eric W. Biederman

unread,
Jun 16, 2018, 10:33:21ā€ÆAM6/16/18
to syzbot, ak...@linux-foundation.org, dhow...@redhat.com, gs05...@gmail.com, linux-...@vger.kernel.org, ol...@redhat.com, pasha.t...@oracle.com, ri...@redhat.com, rp...@linux.vnet.ibm.com, syzkall...@googlegroups.com, wangkef...@huawei.com, Alexei Starovoitov, David S. Miller

Added Alexei Starovoitov as he appears to be the author of the problem code.
The problem code appears to be:

static void shutdown_umh(struct umh_info *info)
{
struct task_struct *tsk;

if (!info->pid)
return;
tsk = pid_task(find_vpid(info->pid), PIDTYPE_PID);
if (tsk)
force_sig(SIGKILL, tsk);
fput(info->pipe_to_umh);
fput(info->pipe_from_umh);
info->pid = 0;
}

As I read the code it is done very badly.

find_vpid and pid_task need rcu protection. The pid or
the task struct is what should have been cached in the first
place.

force_sig is meaningless for SIGKILL as a process can neither
block nor ignore SIGKILL. In truth force_sig is mostly about
synchronous exceptions that are delivered as signals.

force_sig is also per thread and not per process. Not what
I expect you want.

Similarly your task struct represents the thread not the process.
Not what I expect you want.

So I expect when the dust clears shutdown_umh should look something like:

static void shutdown_umh(struct umh_info *info)
{
if (!info->pid)
return;
kill_pid(info->pid, SIGKILL, 1);
fput(info->pipe_to_umh);
fput(info->pipe_from_umh);
put_pid(info->pid);
info->pid = NULL;
}

That assumes caching a struct pid and actually intentionally killing the
entire process associated with that struct pid.

Eric




syzbot

unread,
Jun 25, 2018, 1:45:03ā€ÆPM6/25/18
to ak...@linux-foundation.org, dhow...@redhat.com, ebie...@xmission.com, gs05...@gmail.com, linux-...@vger.kernel.org, ol...@redhat.com, pasha.t...@oracle.com, ri...@redhat.com, rp...@linux.vnet.ibm.com, syzkall...@googlegroups.com, wangkef...@huawei.com
syzbot has found a reproducer for the following crash on:

HEAD commit: 6f0d349d922b Merge git://git.kernel.org/pub/scm/linux/kern..
git tree: upstream
console output: https://syzkaller.appspot.com/x/log.txt?x=14c04304400000
kernel config: https://syzkaller.appspot.com/x/.config?x=a63be0c83e84d370
dashboard link: https://syzkaller.appspot.com/bug?extid=c2d4c3ae3fd90bbaf059
compiler: gcc (GCC) 8.0.1 20180413 (experimental)
syzkaller repro:https://syzkaller.appspot.com/x/repro.syz?x=14f0a814400000
C reproducer: https://syzkaller.appspot.com/x/repro.c?x=16ce574c400000

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

bpfilter: read fail -512

=============================
WARNING: suspicious RCU usage
4.18.0-rc2+ #117 Not tainted
-----------------------------
kernel/pid.c:323 suspicious rcu_dereference_check() usage!

other info that might help us debug this:


rcu_scheduler_active = 2, debug_locks = 1
1 lock held by syz-executor106/7744:
#0: 00000000bee82115 (bpfilter_lock){+.+.}, at:
__bpfilter_process_sockopt+0x1c5/0x39b net/bpfilter/bpfilter_kern.c:67

stack backtrace:
CPU: 1 PID: 7744 Comm: syz-executor106 Not tainted 4.18.0-rc2+ #117
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
Google 01/01/2011
Call Trace:
__dump_stack lib/dump_stack.c:77 [inline]
dump_stack+0x1c9/0x2b4 lib/dump_stack.c:113
lockdep_rcu_suspicious+0x14a/0x153 kernel/locking/lockdep.c:4562
pid_task+0x1ce/0x200 kernel/pid.c:322
shutdown_umh.constprop.0+0x33/0x7c net/bpfilter/bpfilter_kern.c:29
__stop_umh net/bpfilter/bpfilter_kern.c:41 [inline]
__bpfilter_process_sockopt.cold.1+0x9b/0xa0 net/bpfilter/bpfilter_kern.c:81
bpfilter_mbox_request+0x4d/0xb0 net/ipv4/bpfilter/sockopt.c:25
bpfilter_ip_set_sockopt+0x33/0x40 net/ipv4/bpfilter/sockopt.c:31
ip_setsockopt+0x124/0x140 net/ipv4/ip_sockglue.c:1250
dccp_setsockopt+0x96/0xf0 net/dccp/proto.c:565
sock_common_setsockopt+0x9a/0xe0 net/core/sock.c:3040
__sys_setsockopt+0x1c5/0x3b0 net/socket.c:1947
__do_sys_setsockopt net/socket.c:1958 [inline]
__se_sys_setsockopt net/socket.c:1955 [inline]
__x64_sys_setsockopt+0xbe/0x150 net/socket.c:1955
do_syscall_64+0x1b9/0x820 arch/x86/entry/common.c:290
entry_SYSCALL_64_after_hwframe+0x49/0xbe
RIP: 0033:0x44cdb9
Code: e8 6c bd 02 00 48 83 c4 18 c3 0f 1f 80 00 00 00 00 48 89 f8 48 89 f7
48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff
ff 0f 83 cb d2 fb ff c3 66 2e 0f 1f 84 00 00 00 00
RSP: 002b:00007f63b04a8d18 EFLAGS: 00000246 ORIG_RAX: 0000000000000036
RAX: ffffffffffffffda RBX: 00000000006dfce4 RCX: 000000000044cdb9
RDX: 0000000000000040 RSI: 0000000000000000 RDI: 0000000000000027
RBP: 00000000006dfce0 R08: 0000000000000000 R09: 65732f636f72702f
R10: 0000000020000000 R11: 0000000000000246 R12: 00007f63b04a8d20
R13: 0100000000000000 R14: 6273752f7665642f R15: 0000000000000034

Dmitry Vyukov

unread,
Sep 3, 2018, 12:56:41ā€ÆAM9/3/18
to syzbot, David Miller, Hideaki YOSHIFUJI, Alexei Starovoitov, weiyo...@huawei.com, netdev, Andrew Morton, David Howells, Eric W. Biederman, Gargi Sharma, LKML, Oleg Nesterov, Pavel Tatashin, Rik van Riel, Mike Rapoport, syzkaller-bugs, Kefeng Wang
On Mon, Jun 25, 2018 at 7:45 PM, syzbot
<syzbot+c2d4c3...@syzkaller.appspotmail.com> wrote:
> syzbot has found a reproducer for the following crash on:
>
> HEAD commit: 6f0d349d922b Merge git://git.kernel.org/pub/scm/linux/kern..
> git tree: upstream
> console output: https://syzkaller.appspot.com/x/log.txt?x=14c04304400000
> kernel config: https://syzkaller.appspot.com/x/.config?x=a63be0c83e84d370
> dashboard link: https://syzkaller.appspot.com/bug?extid=c2d4c3ae3fd90bbaf059
> compiler: gcc (GCC) 8.0.1 20180413 (experimental)
> syzkaller repro:https://syzkaller.appspot.com/x/repro.syz?x=14f0a814400000
> C reproducer: https://syzkaller.appspot.com/x/repro.c?x=16ce574c400000

Probably bpfilter problem, +bpfilter maintainers.
> --
> You received this message because you are subscribed to the Google Groups
> "syzkaller-bugs" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to syzkaller-bug...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/syzkaller-bugs/000000000000f0c659056f7af058%40google.com.
>
> For more options, visit https://groups.google.com/d/optout.

syzbot

unread,
Nov 24, 2019, 6:05:02ā€ÆPM11/24/19
to ak...@linux-foundation.org, a...@kernel.org, da...@davemloft.net, dhow...@redhat.com, dsa...@gmail.com, dvy...@google.com, ebie...@xmission.com, gs05...@gmail.com, kuz...@ms2.inr.ac.ru, linux-...@vger.kernel.org, net...@vger.kernel.org, ol...@redhat.com, pasha.t...@oracle.com, ri...@redhat.com, rp...@linux.vnet.ibm.com, syzkall...@googlegroups.com, wangkef...@huawei.com, weiyo...@huawei.com, yosh...@linux-ipv6.org
syzbot has bisected this bug to:

commit 23fb93a4d3f118a900790066d03368a296dce0d6
Author: David Ahern <dsa...@gmail.com>
Date: Wed Apr 18 00:33:23 2018 +0000

net/ipv6: Cleanup exception and cache route handling

bisection log: https://syzkaller.appspot.com/x/bisect.txt?x=1295147ae00000
start commit: 6f0d349d Merge git://git.kernel.org/pub/scm/linux/kernel/g..
git tree: upstream
final crash: https://syzkaller.appspot.com/x/report.txt?x=1195147ae00000
console output: https://syzkaller.appspot.com/x/log.txt?x=1695147ae00000
syz repro: https://syzkaller.appspot.com/x/repro.syz?x=14f0a814400000
C reproducer: https://syzkaller.appspot.com/x/repro.c?x=16ce574c400000

Reported-by: syzbot+c2d4c3...@syzkaller.appspotmail.com
Fixes: 23fb93a4d3f1 ("net/ipv6: Cleanup exception and cache route handling")

For information about bisection process see: https://goo.gl/tpsmEJ#bisection

syzbot

unread,
Sep 1, 2022, 11:44:21ā€ÆAM9/1/22
to syzkall...@googlegroups.com
Auto-closing this bug as obsolete.
No recent activity, existing reproducers are no longer triggering the issue.
Reply all
Reply to author
Forward
0 new messages