Hello,
syzbot has tested the proposed patch but the reproducer is still triggering an issue:
WARNING: locking bug in sock_i_uid
------------[ cut here ]------------
DEBUG_LOCKS_WARN_ON(1)
WARNING: CPU: 1 PID: 5088 at kernel/locking/lockdep.c:231 check_wait_context kernel/locking/lockdep.c:4729 [inline]
WARNING: CPU: 1 PID: 5088 at kernel/locking/lockdep.c:231 __lock_acquire+0x2b0/0x3084 kernel/locking/lockdep.c:5005
Modules linked in:
CPU: 1 PID: 5088 Comm: syz-executor.3 Not tainted 6.1.0-syzkaller-12901-g3628ca9b8dba #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/26/2022
pstate: 604000c5 (nZCv daIF +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
pc : check_wait_context kernel/locking/lockdep.c:4729 [inline]
pc : __lock_acquire+0x2b0/0x3084 kernel/locking/lockdep.c:5005
lr : hlock_class kernel/locking/lockdep.c:231 [inline]
lr : check_wait_context kernel/locking/lockdep.c:4729 [inline]
lr : __lock_acquire+0x298/0x3084 kernel/locking/lockdep.c:5005
sp : ffff800012fb38c0
x29: ffff800012fb39a0 x28: 0000000000000002 x27: ffff0000d3784e50
x26: ffff0000cb1612b8 x25: ffff0000d3785840 x24: 0000000000000000
x23: 0000000000000000 x22: 0000000000000001 x21: 0000000000000000
x20: 0000000000000002 x19: aaaaaa0000fc5233 x18: 0000000000000287
x17: 0000000000000000 x16: ffff80000dd86118 x15: ffff0000d3784e00
x14: 0000000000000000 x13: 0000000000000012 x12: ffff80000dadb9a0
x11: ff808000081cc3c8 x10: ffff80000df48158 x9 : 62f873844a52aa00
x8 : 0000000000000000 x7 : 4e5241575f534b43 x6 : ffff80000c11a934
x5 : 0000000000000000 x4 : 0000000000000001 x3 : 0000000000000000
x2 : 0000000000000000 x1 : 0000000100000402 x0 : 0000000000000016
Call trace:
check_wait_context kernel/locking/lockdep.c:4729 [inline]
__lock_acquire+0x2b0/0x3084 kernel/locking/lockdep.c:5005
lock_acquire+0x100/0x1f8 kernel/locking/lockdep.c:5668
__raw_read_lock_bh include/linux/rwlock_api_smp.h:176 [inline]
_raw_read_lock_bh+0x64/0x7c kernel/locking/spinlock.c:252
sock_i_uid+0x24/0x58 net/core/sock.c:2564
udp_lib_lport_inuse+0x44/0x268 net/ipv4/udp.c:145
udp_lib_get_port+0x1c8/0x934 net/ipv4/udp.c:265
udp_v6_get_port+0x60/0x74 net/ipv6/udp.c:105
inet_autobind net/ipv4/af_inet.c:180 [inline]
inet_send_prepare+0xa4/0xf4 net/ipv4/af_inet.c:813
inet6_sendmsg+0x30/0x80 net/ipv6/af_inet6.c:655
sock_sendmsg_nosec net/socket.c:714 [inline]
sock_sendmsg net/socket.c:734 [inline]
__sys_sendto+0x1e4/0x280 net/socket.c:2120
__do_sys_sendto net/socket.c:2132 [inline]
__se_sys_sendto net/socket.c:2128 [inline]
__arm64_sys_sendto+0x30/0x44 net/socket.c:2128
__invoke_syscall arch/arm64/kernel/syscall.c:38 [inline]
invoke_syscall arch/arm64/kernel/syscall.c:52 [inline]
el0_svc_common+0x138/0x220 arch/arm64/kernel/syscall.c:142
do_el0_svc+0x48/0x140 arch/arm64/kernel/syscall.c:197
el0_svc+0x58/0x150 arch/arm64/kernel/entry-common.c:637
el0t_64_sync_handler+0x84/0xf0 arch/arm64/kernel/entry-common.c:655
el0t_64_sync+0x190/0x194 arch/arm64/kernel/entry.S:584
irq event stamp: 138
hardirqs last enabled at (137): [<ffff800009972d58>] get_random_u32+0x20c/0x294 drivers/char/random.c:532
hardirqs last disabled at (136): [<ffff800009972c38>] get_random_u32+0xec/0x294 drivers/char/random.c:532
softirqs last enabled at (132): [<ffff80000b29c2a0>] spin_unlock_bh include/linux/spinlock.h:395 [inline]
softirqs last enabled at (132): [<ffff80000b29c2a0>] lock_sock_nested+0xc0/0xd8 net/core/sock.c:3488
softirqs last disabled at (138): [<ffff80000b6ebecc>] spin_lock_bh include/linux/spinlock.h:355 [inline]
softirqs last disabled at (138): [<ffff80000b6ebecc>] udp_lib_get_port+0x1a4/0x934 net/ipv4/udp.c:264
---[ end trace 0000000000000000 ]---
Unable to handle kernel NULL pointer dereference at virtual address 00000000000000b8
Mem abort info:
ESR = 0x0000000096000006
EC = 0x25: DABT (current EL), IL = 32 bits
SET = 0, FnV = 0
EA = 0, S1PTW = 0
FSC = 0x06: level 2 translation fault
Data abort info:
ISV = 0, ISS = 0x00000006
CM = 0, WnR = 0
user pgtable: 4k pages, 48-bit VAs, pgdp=0000000114506000
[00000000000000b8] pgd=08000001144e2003, p4d=08000001144e2003, pud=08000001143b6003, pmd=0000000000000000
Internal error: Oops: 0000000096000006 [#1] PREEMPT SMP
Modules linked in:
CPU: 1 PID: 5088 Comm: syz-executor.3 Tainted: G W 6.1.0-syzkaller-12901-g3628ca9b8dba #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/26/2022
pstate: 604000c5 (nZCv daIF +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
pc : check_wait_context kernel/locking/lockdep.c:4729 [inline]
pc : __lock_acquire+0x2d0/0x3084 kernel/locking/lockdep.c:5005
lr : hlock_class kernel/locking/lockdep.c:231 [inline]
lr : check_wait_context kernel/locking/lockdep.c:4729 [inline]
lr : __lock_acquire+0x298/0x3084 kernel/locking/lockdep.c:5005
sp : ffff800012fb38c0
x29: ffff800012fb39a0 x28: 0000000000000002 x27: ffff0000d3784e50
x26: ffff0000cb1612b8 x25: ffff0000d3785840 x24: 0000000000000000
x23: 0000000000000000 x22: 0000000000000001 x21: 0000000000000000
x20: 0000000000000002 x19: aaaaaa0000fc5233 x18: 0000000000000287
x17: 0000000000000000 x16: ffff80000dd86118 x15: ffff0000d3784e00
x14: 0000000000000000 x13: 0000000000000012 x12: ffff80000dadb9a0
x11: ff808000081cc3c8 x10: ffff80000df48158 x9 : 0000000000061233
x8 : 0000000000000000 x7 : 4e5241575f534b43 x6 : ffff80000c11a934
x5 : 0000000000000000 x4 : 0000000000000001 x3 : 0000000000000000
x2 : 0000000000000000 x1 : 0000000100000402 x0 : 0000000000000016
Call trace:
hlock_class kernel/locking/lockdep.c:222 [inline]
check_wait_context kernel/locking/lockdep.c:4730 [inline]
__lock_acquire+0x2d0/0x3084 kernel/locking/lockdep.c:5005
lock_acquire+0x100/0x1f8 kernel/locking/lockdep.c:5668
__raw_read_lock_bh include/linux/rwlock_api_smp.h:176 [inline]
_raw_read_lock_bh+0x64/0x7c kernel/locking/spinlock.c:252
sock_i_uid+0x24/0x58 net/core/sock.c:2564
udp_lib_lport_inuse+0x44/0x268 net/ipv4/udp.c:145
udp_lib_get_port+0x1c8/0x934 net/ipv4/udp.c:265
udp_v6_get_port+0x60/0x74 net/ipv6/udp.c:105
inet_autobind net/ipv4/af_inet.c:180 [inline]
inet_send_prepare+0xa4/0xf4 net/ipv4/af_inet.c:813
inet6_sendmsg+0x30/0x80 net/ipv6/af_inet6.c:655
sock_sendmsg_nosec net/socket.c:714 [inline]
sock_sendmsg net/socket.c:734 [inline]
__sys_sendto+0x1e4/0x280 net/socket.c:2120
__do_sys_sendto net/socket.c:2132 [inline]
__se_sys_sendto net/socket.c:2128 [inline]
__arm64_sys_sendto+0x30/0x44 net/socket.c:2128
__invoke_syscall arch/arm64/kernel/syscall.c:38 [inline]
invoke_syscall arch/arm64/kernel/syscall.c:52 [inline]
el0_svc_common+0x138/0x220 arch/arm64/kernel/syscall.c:142
do_el0_svc+0x48/0x140 arch/arm64/kernel/syscall.c:197
el0_svc+0x58/0x150 arch/arm64/kernel/entry-common.c:637
el0t_64_sync_handler+0x84/0xf0 arch/arm64/kernel/entry-common.c:655
el0t_64_sync+0x190/0x194 arch/arm64/kernel/entry.S:584
Code: f002ed0a 91046210 9105614a b9400329 (3942e114)
---[ end trace 0000000000000000 ]---
----------------
Code disassembly (best guess):
0: f002ed0a adrp x10, 0x5da3000
4: 91046210 add x16, x16, #0x118
8: 9105614a add x10, x10, #0x158
c: b9400329 ldr w9, [x25]
* 10: 3942e114 ldrb w20, [x8, #184] <-- trapping instruction
Tested on:
commit: 3628ca9b bpf: Always use maximal size for copy_array()
console output:
https://syzkaller.appspot.com/x/log.txt?x=11617cdc480000