linux/io_uring
Pavel Begunkov 390513642e io_uring: always do atomic put from iowq
io_uring always switches requests to atomic refcounting for iowq
execution before there is any parallilism by setting REQ_F_REFCOUNT,
and the flag is not cleared until the request completes. That should be
fine as long as the compiler doesn't make up a non existing value for
the flags, however KCSAN still complains when the request owner changes
oter flag bits:

BUG: KCSAN: data-race in io_req_task_cancel / io_wq_free_work
...
read to 0xffff888117207448 of 8 bytes by task 3871 on cpu 0:
 req_ref_put_and_test io_uring/refs.h:22 [inline]

Skip REQ_F_REFCOUNT checks for iowq, we know it's set.

Reported-by: syzbot+903a2ad71fb3f1e47cf5@syzkaller.appspotmail.com
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/d880bc27fb8c3209b54641be4ff6ac02b0e5789a.1743679736.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2025-04-03 08:31:57 -06:00
..
advise.c io_uring/advise: support 64-bit lengths 2024-06-16 14:54:55 -06:00
advise.h
alloc_cache.c io_uring: add alloc_cache.c 2025-01-28 15:10:40 -07:00
alloc_cache.h io_uring/net: convert to struct iou_vec 2025-03-07 13:41:08 -07:00
cancel.c io_uring/cancel: add generic cancel helper 2025-02-17 05:34:45 -07:00
cancel.h io_uring/cancel: add generic cancel helper 2025-02-17 05:34:45 -07:00
epoll.c io_uring/epoll: add support for IORING_OP_EPOLL_WAIT 2025-02-20 07:59:56 -07:00
epoll.h io_uring/epoll: add support for IORING_OP_EPOLL_WAIT 2025-02-20 07:59:56 -07:00
eventfd.c io_uring/eventfd: ensure io_eventfd_signal() defers another RCU period 2025-01-09 07:16:45 -07:00
eventfd.h io_uring/eventfd: move eventfd handling to separate file 2024-06-16 14:54:55 -06:00
fdinfo.c io_uring/fdinfo: fix io_uring_show_fdinfo() misuse of ->d_iname 2025-01-19 07:28:37 -07:00
fdinfo.h
filetable.c io_uring: cache nodes and mapped buffers 2025-02-28 07:05:46 -07:00
filetable.h io_uring/rsrc: pass 'struct io_ring_ctx' reference to rsrc helpers 2024-11-07 15:24:33 -07:00
fs.c io_uring/fs: consider link->flags when getting path for LINKAT 2023-11-20 09:01:42 -07:00
fs.h
futex.c io_uring: introduce io_cache_free() helper 2025-03-05 07:38:55 -07:00
futex.h io_uring: move cancelations to be io_uring_task based 2024-11-06 13:55:38 -07:00
io-wq.c Merge branch 'io_uring-6.14' into for-6.15/io_uring 2025-02-27 07:18:01 -07:00
io-wq.h io_uring/io-wq: cache work->flags in variable 2025-02-17 05:34:45 -07:00
io_uring.c io_uring: always do atomic put from iowq 2025-04-03 08:31:57 -06:00
io_uring.h io_uring: don't pass ctx to tw add remote helper 2025-03-28 17:14:01 -06:00
kbuf.c io_uring/kbuf: enable bundles for incrementally consumed buffers 2025-03-10 16:24:43 -06:00
kbuf.h io_uring/kbuf: uninline __io_put_kbufs 2025-02-17 05:34:45 -07:00
Kconfig io_uring: make zcrx depend on CONFIG_IO_URING 2025-03-31 07:07:44 -06:00
Makefile io_uring/epoll: remove CONFIG_EPOLL guards 2025-02-20 07:59:56 -07:00
memmap.c io_uring: add missing IORING_MAP_OFF_ZCRX_REGION in io_uring_mmap 2025-02-21 09:40:09 -07:00
memmap.h io_uring/zcrx: add interface queue and refill queue 2025-02-17 05:41:03 -07:00
msg_ring.c io_uring: don't pass ctx to tw add remote helper 2025-03-28 17:14:01 -06:00
msg_ring.h io_uring/msg_ring: Drop custom destructor 2024-12-27 10:08:21 -07:00
napi.c net: use napi_id_valid helper 2025-02-17 16:43:04 -08:00
napi.h io_uring/napi: add static napi tracking strategy 2024-11-06 13:55:38 -07:00
net.c io_uring/net: avoid import_ubuf for regvec send 2025-03-31 12:41:49 -06:00
net.h io_uring/net: convert to struct iou_vec 2025-03-07 13:41:08 -07:00
nop.c io_uring/nop: use io_find_buf_node() 2025-02-28 19:35:37 -07:00
nop.h
notif.c io_uring: introduce type alias for io_tw_state 2025-02-17 05:34:50 -07:00
notif.h io_uring/notif: implement notification stacking 2024-04-22 19:31:18 -06:00
opdef.c for-6.15/io_uring-epoll-wait-20250325 2025-03-28 14:55:32 -07:00
opdef.h io_uring: rearrange opdef flags by use pattern 2025-02-27 07:27:56 -07:00
openclose.c io_uring: enable audit and restrict cred override for IORING_OP_FIXED_FD_INSTALL 2024-01-23 15:25:14 -07:00
openclose.h io_uring/openclose: add support for IORING_OP_FIXED_FD_INSTALL 2023-12-12 07:42:57 -07:00
poll.c io_uring: unify STOP_MULTISHOT with IOU_OK 2025-03-10 07:14:18 -06:00
poll.h io_uring: introduce type alias for io_tw_state 2025-02-17 05:34:50 -07:00
refs.h io_uring: always do atomic put from iowq 2025-04-03 08:31:57 -06:00
register.c io_uring/zcrx: add interface queue and refill queue 2025-02-17 05:41:03 -07:00
register.h io_uring: temporarily disable registered waits 2024-11-15 09:58:34 -07:00
rsrc.c io_uring: support vectored kernel fixed buffer 2025-04-02 07:06:59 -06:00
rsrc.h for-6.15/io_uring-rx-zc-20250325 2025-03-28 13:45:52 -07:00
rw.c for-6.15/io_uring-reg-vec-20250327 2025-03-28 15:07:04 -07:00
rw.h io_uring/rw: implement vectored registered rw 2025-03-07 09:07:29 -07:00
slist.h io_uring: silence variable ‘prev’ set but not used warning 2023-03-09 10:10:58 -07:00
splice.c io_uring/rsrc: avoid NULL check in io_put_rsrc_node() 2025-02-17 05:34:46 -07:00
splice.h io_uring/splice: open code 2nd direct file assignment 2024-10-29 13:43:28 -06:00
sqpoll.c execve updates for v6.14-rc1 2025-01-20 13:27:58 -08:00
sqpoll.h io_uring/sqpoll: statistics of the true utilization of sq threads 2024-03-01 06:28:19 -07:00
statx.c io_statx_prep(): use getname_uflags() 2024-11-13 11:44:30 -05:00
statx.h
sync.c
sync.h
tctx.c io_uring/tctx: work around xa_store() allocation error issue 2024-11-29 07:20:28 -07:00
tctx.h
timeout.c for-6.15/io_uring-20250322 2025-03-26 17:56:00 -07:00
timeout.h io_uring: move cancelations to be io_uring_task based 2024-11-06 13:55:38 -07:00
truncate.c io_uring: add support for ftruncate 2024-02-09 09:04:39 -07:00
truncate.h io_uring: add support for ftruncate 2024-02-09 09:04:39 -07:00
uring_cmd.c io_uring: cleanup {g,s]etsockopt sqe reading 2025-03-31 07:08:46 -06:00
uring_cmd.h io_uring: hide caches sqes from drivers 2025-03-31 07:08:34 -06:00
waitid.c io_uring/waitid: use io_is_compat() 2025-02-24 12:10:38 -07:00
waitid.h io_uring: move cancelations to be io_uring_task based 2024-11-06 13:55:38 -07:00
xattr.c replace do_getxattr() with saner helpers. 2024-11-06 12:59:39 -05:00
xattr.h
zcrx.c io_uring/zcrx: return early from io_zcrx_recv_skb if readlen is 0 2025-04-01 14:00:46 -06:00
zcrx.h io_uring/zcrx: add a read limit to recvzc requests 2025-02-24 12:55:58 -07:00