linux/io_uring
Jens Axboe be3573124e io_uring/bpf_filter: pass in expected filter payload size
It's quite possible that opcodes that have payloads attached to them,
like IORING_OP_OPENAT/OPENAT2 or IORING_OP_SOCKET, that these paylods
can change over time. For example, on the openat/openat2 side, the
struct open_how argument is extensible, and could be extended in the
future to allow further arguments to be passed in.

Allow registration of a cBPF filter to give the size of the filter as
seen by userspace. If that filter is for an opcode that takes extra
payload data, allow it if the application payload expectation is the
same size than the kernels. If that is the case, the kernel supports
filtering on the payload that the application expects. If the size
differs, the behavior depends on the IO_URING_BPF_FILTER_SZ_STRICT flag:

1) If IO_URING_BPF_FILTER_SZ_STRICT is set and the size expectation
   differs, fail the attempt to load the filter.

2) If IO_URING_BPF_FILTER_SZ_STRICT isn't set, allow the filter if
   the userspace pdu size is smaller than what the kernel offers.

3) Regardless if IO_URING_BPF_FILTER_SZ_STRICT, fail loading the filter
   if the userspace pdu size is bigger than what the kernel supports.

An attempt to load a filter due to sizing will error with -EMSGSIZE.
For that error, the registration struct will have filter->pdu_size
populated with the pdu size that the kernel uses.

Reported-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2026-02-16 15:56:31 -07:00
..
advise.c io_uring: finish IOU_OK -> IOU_COMPLETE transition 2025-05-21 08:41:16 -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: Add SPDX id lines to remaining source files 2026-02-04 07:23:45 -07:00
bpf_filter.c io_uring/bpf_filter: pass in expected filter payload size 2026-02-16 15:56:31 -07:00
bpf_filter.h io_uring: allow registration of per-task restrictions 2026-02-06 07:29:19 -07:00
cancel.c for-7.0/io_uring-20260206 2026-02-09 17:22:00 -08:00
cancel.h io_uring/cancel: de-unionize file and user_data in struct io_cancel_data 2026-02-16 14:16:27 -07:00
cmd_net.c io_uring/cmd_net: fix too strict requirement on ioctl 2026-02-16 08:08:01 -07:00
epoll.c io_uring: finish IOU_OK -> IOU_COMPLETE transition 2025-05-21 08:41:16 -06: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: open code io_eventfd_grab() 2025-04-24 08:33:54 -06:00
eventfd.h io_uring: Add SPDX id lines to remaining source files 2026-02-04 07:23:45 -07:00
fdinfo.c io_uring/fdinfo: be a bit nicer when looping a lot of SQEs/CQEs 2026-02-03 10:58:32 -07:00
fdinfo.h
filetable.c io_uring/filetable: clamp alloc_hint to the configured alloc range 2026-02-11 15:20:44 -07:00
filetable.h io_uring: Trim out unused includes 2026-01-05 17:08:20 -07:00
fs.c non-consuming variants of do_{unlinkat,rmdir}() 2026-01-16 12:51:50 -05:00
fs.h
futex.c io_uring/futex: use GFP_KERNEL_ACCOUNT for futex data allocation 2026-01-25 10:07:09 -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 for-7.0/io_uring-20260206 2026-02-09 17:22:00 -08:00
io-wq.h io_uring: Add SPDX id lines to remaining source files 2026-02-04 07:23:45 -07:00
io_uring.c io_uring: delay sqarray static branch disablement 2026-02-15 15:12:54 -07:00
io_uring.h io_uring-bpf-restrictions.4-20260206 2026-02-09 17:31:17 -08:00
kbuf.c io_uring/kbuf: fix memory leak if io_buffer_add_list fails 2026-02-05 11:13:16 -07:00
kbuf.h io_uring/kbuf: remove obsolete buf_nr_pages and update comments 2025-11-20 13:23:05 -07:00
Kconfig io_uring: add support for BPF filtering for opcode restrictions 2026-01-27 11:09:57 -07:00
Makefile io_uring: add support for BPF filtering for opcode restrictions 2026-01-27 11:09:57 -07:00
memmap.c for-7.0/io_uring-20260206 2026-02-09 17:22:00 -08:00
memmap.h io_uring: Add SPDX id lines to remaining source files 2026-02-04 07:23:45 -07:00
mock_file.c io_uring: Add SPDX id lines to remaining source files 2026-02-04 07:23:45 -07:00
msg_ring.c io_uring/msg_ring: drop unnecessary submitter_task checks 2026-01-12 11:21:38 -07: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: remove unneeded io_send_zc accounting 2026-02-16 08:10:46 -07:00
net.h io_uring/net: allow filtering on IORING_OP_SOCKET data 2026-01-27 11:10:46 -07:00
nop.c io_uring/nop: add support for IORING_SETUP_CQE_MIXED 2025-08-27 11:24:15 -06:00
nop.h
notif.c io_uring: Add SPDX id lines to remaining source files 2026-02-04 07:23:45 -07:00
notif.h io_uring/notif: implement notification stacking 2024-04-22 19:31:18 -06:00
opdef.c io_uring/bpf_filter: move filter size and populate helper into struct 2026-02-16 15:56:25 -07:00
opdef.h io_uring/bpf_filter: move filter size and populate helper into struct 2026-02-16 15:56:25 -07:00
openclose.c io_uring/openclose: fix io_pipe_fixed() slot tracking for specific slots 2026-02-11 20:31:21 -07:00
openclose.h io_uring/bpf_filter: allow filtering on contents of struct open_how 2026-01-27 11:10:46 -07:00
poll.c io_uring/poll: unify poll waitqueue entry and list removal 2025-12-05 10:23:28 -07:00
poll.h io_uring: add wrapper type for io_req_tw_func_t arg 2025-11-03 08:31:26 -07:00
query.c io_uring/query: return support for custom rx page size 2026-02-15 14:55:37 -07:00
query.h io_uring/query: drop unused io_handle_query_entry() ctx arg 2025-11-26 09:37:10 -07:00
refs.h io_uring: Add SPDX id lines to remaining source files 2026-02-04 07:23:45 -07:00
register.c io_uring-bpf-restrictions.4-20260206 2026-02-09 17:31:17 -08:00
register.h io_uring: temporarily disable registered waits 2024-11-15 09:58:34 -07:00
rsrc.c io_uring/rsrc: improve regbuf iov validation 2026-02-16 08:15:38 -07:00
rsrc.h io_uring/rsrc: replace reg buffer bit field with flags 2026-02-10 05:26:15 -07:00
rw.c io_uring/rsrc: replace reg buffer bit field with flags 2026-02-10 05:26:15 -07:00
rw.h io_uring: add wrapper type for io_req_tw_func_t arg 2025-11-03 08:31:26 -07:00
slist.h io_uring: Add SPDX id lines to remaining source files 2026-02-04 07:23:45 -07:00
splice.c io_uring: don't include filetable.h in io_uring.h 2025-09-08 13:20:46 -06:00
splice.h io_uring/splice: open code 2nd direct file assignment 2024-10-29 13:43:28 -06:00
sqpoll.c io_uring: IOPOLL polling improvements 2025-12-28 15:54:45 -07:00
sqpoll.h io_uring/sqpoll: switch away from getrusage() for CPU accounting 2025-10-22 10:51:20 -06:00
statx.c allow incomplete imports of filenames 2026-01-13 15:18:07 -05:00
statx.h
sync.c io_uring/sync: validate passed in offset 2026-01-21 11:50:59 -07:00
sync.h
tctx.c io_uring/tctx: avoid modifying loop variable in io_ring_add_registered_file 2026-02-09 20:12:46 -07:00
tctx.h io_uring: simplify __io_uring_add_tctx_node 2022-10-07 12:25:30 -06:00
timeout.c io_uring/timeout: annotate data race in io_flush_timeouts() 2026-01-20 09:54:17 -07:00
timeout.h io_uring/timeout: don't export link t-out disarm helper 2025-05-06 10:11:23 -06:00
truncate.c io_uring: finish IOU_OK -> IOU_COMPLETE transition 2025-05-21 08:41:16 -06:00
truncate.h io_uring: add support for ftruncate 2024-02-09 09:04:39 -07:00
tw.c io_uring: split out CQ waiting code into wait.c 2026-01-22 09:21:16 -07:00
tw.h io_uring: split out CQ waiting code into wait.c 2026-01-22 09:21:16 -07:00
uring_cmd.c io_uring/uring_cmd: explicitly disallow cancelations for IOPOLL 2026-01-14 22:04:11 -07:00
uring_cmd.h io_uring/cmd: remove struct io_uring_cmd_data 2025-07-18 12:34:56 -06:00
wait.c io_uring: split out CQ waiting code into wait.c 2026-01-22 09:21:16 -07:00
wait.h io_uring: split out CQ waiting code into wait.c 2026-01-22 09:21:16 -07:00
waitid.c io_uring/waitid: fix KCSAN warning on io_waitid->head 2026-01-19 19:55:30 -07:00
waitid.h io_uring: move cancelations to be io_uring_task based 2024-11-06 13:55:38 -07:00
xattr.c filename_...xattr(): don't consume filename reference 2026-01-16 12:52:03 -05:00
xattr.h
zcrx.c io_uring/zcrx: check unsupported flags on import 2026-02-15 14:55:29 -07:00
zcrx.h io_uring/zcrx: count zcrx users 2025-11-13 11:19:37 -07:00