Skip to content

Suspicious RCU usage in mptcp_sched_find #523

Closed
@matttbe

Description

@matttbe

When the kernel is compiled with CONFIG_RCU_EXPERT=y and CONFIG_PROVE_RCU_LIST=y (see this discussion), we have this warning when using MPTCP for the first time:

./diag.sh
  TAP version 13
  1..1
  [    7.650529][  T176] 
  [    7.650703][  T176] =============================
  [    7.651494][  T176] WARNING: suspicious RCU usage
  [    7.652694][  T176] 6.12.0-rc2+ #1 Tainted: G                 N
  [    7.653105][  T176] -----------------------------
  [    7.653727][  T176] net/mptcp/sched.c:44 RCU-list traversed in non-reader section!!
  [    7.654413][  T176] 
  [    7.654413][  T176] other info that might help us debug this:
  [    7.654413][  T176] 
  [    7.656017][  T176] 
  [    7.656017][  T176] rcu_scheduler_active = 2, debug_locks = 1
  [    7.657948][  T176] no locks held by mptcp_connect/176.
  [    7.659075][  T176] 
  [    7.659075][  T176] stack backtrace:
  [    7.660132][  T176] CPU: 0 UID: 0 PID: 176 Comm: mptcp_connect Tainted: G                 N 6.12.0-rc2+ #1
  [    7.660838][  T176] Tainted: [N]=TEST
  [    7.661162][  T176] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
  [    7.661818][  T176] Call Trace:
  [    7.662351][  T176]  <TASK>
  [ 7.662636][ T176] dump_stack_lvl (lib/dump_stack.c:123) 
  [ 7.663298][ T176] lockdep_rcu_suspicious (kernel/locking/lockdep.c:6822) 
  [ 7.663812][ T176] mptcp_sched_find (net/mptcp/sched.c:44 (discriminator 7)) 
  [ 7.664509][ T176] mptcp_init_sock (net/mptcp/protocol.c:2867 (discriminator 1)) 
  [ 7.665099][ T176] ? sock_init_data_uid (arch/x86/include/asm/atomic.h:28) 
  [ 7.665659][ T176] inet_create.part.0.constprop.0 (net/ipv4/af_inet.c:386) 
  [ 7.666056][ T176] ? __sock_create (include/linux/rcupdate.h:347 (discriminator 1)) 
  [ 7.666470][ T176] __sock_create (net/socket.c:1576) 
  [ 7.666949][ T176] __sys_socket (net/socket.c:1671) 
  [ 7.667387][ T176] ? __pfx___sys_socket (net/socket.c:1712) 
  [ 7.667713][ T176] ? do_user_addr_fault (arch/x86/mm/fault.c:1419 (discriminator 1)) 
  [ 7.668181][ T176] __x64_sys_socket (net/socket.c:1728) 
  [ 7.668753][ T176] do_syscall_64 (arch/x86/entry/common.c:52 (discriminator 1)) 
  [ 7.669200][ T176] entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130) 
  [    7.669797][  T176] RIP: 0033:0x7f86d171f2eb
  [ 7.670316][ T176] Code: 48 8b 55 f8 64 48 2b 14 25 28 00 00 00 75 02 c9 c3 e8 b9 bb 00 00 66 0f 1f 84 00 00 00 00 00 f3 0f 1e fa b8 29 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d fd 6a 0d 00 f7 d8 64 89 01 48
  All code
  ========
     0:	48 8b 55 f8          	mov    -0x8(%rbp),%rdx
     4:	64 48 2b 14 25 28 00 	sub    %fs:0x28,%rdx
     b:	00 00 
     d:	75 02                	jne    0x11
     f:	c9                   	leave
    10:	c3                   	ret
    11:	e8 b9 bb 00 00       	call   0xbbcf
    16:	66 0f 1f 84 00 00 00 	nopw   0x0(%rax,%rax,1)
    1d:	00 00 
    1f:	f3 0f 1e fa          	endbr64
    23:	b8 29 00 00 00       	mov    $0x29,%eax
    28:	0f 05                	syscall
    2a:*	48 3d 01 f0 ff ff    	cmp    $0xfffffffffffff001,%rax		<-- trapping instruction
    30:	73 01                	jae    0x33
    32:	c3                   	ret
    33:	48 8b 0d fd 6a 0d 00 	mov    0xd6afd(%rip),%rcx        # 0xd6b37
    3a:	f7 d8                	neg    %eax
    3c:	64 89 01             	mov    %eax,%fs:(%rcx)
    3f:	48                   	rex.W
  
  Code starting with the faulting instruction
  ===========================================
     0:	48 3d 01 f0 ff ff    	cmp    $0xfffffffffffff001,%rax
     6:	73 01                	jae    0x9
     8:	c3                   	ret
     9:	48 8b 0d fd 6a 0d 00 	mov    0xd6afd(%rip),%rcx        # 0xd6b0d
    10:	f7 d8                	neg    %eax
    12:	64 89 01             	mov    %eax,%fs:(%rcx)
    15:	48                   	rex.W
  [    7.671651][  T176] RSP: 002b:00007ffe051a5378 EFLAGS: 00000206 ORIG_RAX: 0000000000000029
  [    7.672176][  T176] RAX: ffffffffffffffda RBX: 00007ffe051a6a92 RCX: 00007f86d171f2eb
  [    7.672724][  T176] RDX: 0000000000000106 RSI: 0000000000000001 RDI: 0000000000000002
  [    7.673280][  T176] RBP: 000055d9c45fd2a0 R08: 00007f86d17f6b20 R09: 0000000000000050
  [    7.673839][  T176] R10: 0000000000000001 R11: 0000000000000206 R12: 0000000000000106
  [    7.674577][  T176] R13: 000055d988966bd8 R14: 000055d988968c28 R15: 000055d988966edb
  [    7.675485][  T176]  </TASK>

Metadata

Metadata

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions