Commit e1d09c2
af_unix: Fix data races around sk->sk_shutdown.
KCSAN found a data race around sk->sk_shutdown where unix_release_sock()
and unix_shutdown() update it under unix_state_lock(), OTOH unix_poll()
and unix_dgram_poll() read it locklessly.
We need to annotate the writes and reads with WRITE_ONCE() and READ_ONCE().
BUG: KCSAN: data-race in unix_poll / unix_release_sock
write to 0xffff88800d0f8aec of 1 bytes by task 264 on cpu 0:
unix_release_sock+0x75c/0x910 net/unix/af_unix.c:631
unix_release+0x59/0x80 net/unix/af_unix.c:1042
__sock_release+0x7d/0x170 net/socket.c:653
sock_close+0x19/0x30 net/socket.c:1397
__fput+0x179/0x5e0 fs/file_table.c:321
____fput+0x15/0x20 fs/file_table.c:349
task_work_run+0x116/0x1a0 kernel/task_work.c:179
resume_user_mode_work include/linux/resume_user_mode.h:49 [inline]
exit_to_user_mode_loop kernel/entry/common.c:171 [inline]
exit_to_user_mode_prepare+0x174/0x180 kernel/entry/common.c:204
__syscall_exit_to_user_mode_work kernel/entry/common.c:286 [inline]
syscall_exit_to_user_mode+0x1a/0x30 kernel/entry/common.c:297
do_syscall_64+0x4b/0x90 arch/x86/entry/common.c:86
entry_SYSCALL_64_after_hwframe+0x72/0xdc
read to 0xffff88800d0f8aec of 1 bytes by task 222 on cpu 1:
unix_poll+0xa3/0x2a0 net/unix/af_unix.c:3170
sock_poll+0xcf/0x2b0 net/socket.c:1385
vfs_poll include/linux/poll.h:88 [inline]
ep_item_poll.isra.0+0x78/0xc0 fs/eventpoll.c:855
ep_send_events fs/eventpoll.c:1694 [inline]
ep_poll fs/eventpoll.c:1823 [inline]
do_epoll_wait+0x6c4/0xea0 fs/eventpoll.c:2258
__do_sys_epoll_wait fs/eventpoll.c:2270 [inline]
__se_sys_epoll_wait fs/eventpoll.c:2265 [inline]
__x64_sys_epoll_wait+0xcc/0x190 fs/eventpoll.c:2265
do_syscall_x64 arch/x86/entry/common.c:50 [inline]
do_syscall_64+0x3b/0x90 arch/x86/entry/common.c:80
entry_SYSCALL_64_after_hwframe+0x72/0xdc
value changed: 0x00 -> 0x03
Reported by Kernel Concurrency Sanitizer on:
CPU: 1 PID: 222 Comm: dbus-broker Not tainted 6.3.0-rc7-02330-gca6270c12e20 #2
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org 04/01/2014
Fixes: 3c73419 ("af_unix: fix 'poll for write'/ connected DGRAM sockets")
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Reported-by: syzbot <syzkaller@googlegroups.com>
Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Michal Kubiak <michal.kubiak@intel.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>1 parent 679ed00 commit e1d09c2
1 file changed
Lines changed: 12 additions & 8 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
603 | 603 | | |
604 | 604 | | |
605 | 605 | | |
606 | | - | |
| 606 | + | |
607 | 607 | | |
608 | 608 | | |
609 | 609 | | |
| |||
628 | 628 | | |
629 | 629 | | |
630 | 630 | | |
631 | | - | |
| 631 | + | |
632 | 632 | | |
633 | 633 | | |
634 | 634 | | |
| |||
3008 | 3008 | | |
3009 | 3009 | | |
3010 | 3010 | | |
3011 | | - | |
| 3011 | + | |
3012 | 3012 | | |
3013 | 3013 | | |
3014 | 3014 | | |
| |||
3028 | 3028 | | |
3029 | 3029 | | |
3030 | 3030 | | |
3031 | | - | |
| 3031 | + | |
3032 | 3032 | | |
3033 | 3033 | | |
3034 | 3034 | | |
| |||
3160 | 3160 | | |
3161 | 3161 | | |
3162 | 3162 | | |
| 3163 | + | |
3163 | 3164 | | |
3164 | 3165 | | |
3165 | 3166 | | |
| 3167 | + | |
3166 | 3168 | | |
3167 | 3169 | | |
3168 | 3170 | | |
3169 | 3171 | | |
3170 | | - | |
| 3172 | + | |
3171 | 3173 | | |
3172 | | - | |
| 3174 | + | |
3173 | 3175 | | |
3174 | 3176 | | |
3175 | 3177 | | |
| |||
3203 | 3205 | | |
3204 | 3206 | | |
3205 | 3207 | | |
| 3208 | + | |
3206 | 3209 | | |
3207 | 3210 | | |
3208 | 3211 | | |
| 3212 | + | |
3209 | 3213 | | |
3210 | 3214 | | |
3211 | 3215 | | |
3212 | 3216 | | |
3213 | 3217 | | |
3214 | 3218 | | |
3215 | 3219 | | |
3216 | | - | |
| 3220 | + | |
3217 | 3221 | | |
3218 | | - | |
| 3222 | + | |
3219 | 3223 | | |
3220 | 3224 | | |
3221 | 3225 | | |
| |||
0 commit comments