Skip to content

Releases: axboe/liburing

liburing 2.15-rc1

15 Jun 15:40

Choose a tag to compare

liburing 2.15-rc1 Pre-release
Pre-release

liburing 2.15-rc1

This is the first release candidate for the 2.15 release. It covers 180 commits
since 2.14.

Highlights

  • Classic BPF (cBPF) filter support. New io_uring_register_bpf_filter()
    support lets applications attach cBPF programs to restrict which opcodes a
    ring may issue, including ring-level filters, pdu_size validation, and
    filtering of IORING_OP_OPENAT/IORING_OP_OPENAT2. Includes a new
    io_uring_register_bpf_filter.3 man page and extensive tests.
  • New register helpers: io_uring_register_query() and
    io_uring_register_zcrx_ctrl(), each with accompanying man pages
    (io_uring_register_query.3, io_uring_register_zcrx_ctrl.3) and updated
    uapi headers carrying the ZCRX_CTRL opcode.
  • Out-of-source build support. configure now supports building outside
    the source tree, documented in the README and covered by a new CI job.

Library changes and fixes

  • io_uring_peek_cqe(): avoid an out-of-line round trip on an empty CQ, and
    drop the unnecessary acquire ordering on the CQ head load in
    __io_uring_peek_cqe().
  • io_uring_peek_batch_cqe(): correctly handle mixed (16/32-byte) CQE rings.
  • Don't return a stale CQE pointer when a timeout error occurs.
  • io_uring_wait_cqes_min_timeout() now returns -EINVAL when unsupported.
  • Fix a NULL deref in _io_uring_get_cqe() on the EXT_ARG_REG path.
  • io_uring_resize_rings(): fix an mmap leak, and preserve / clean up old ring
    state on a failed mmap remap.
  • setup: account the SQ array in rings_size() and in io_uring_alloc_huge(),
    explicitly request 2MB huge pages, and restore ring fd/flags init in
    io_uring_queue_mmap().
  • arch: use prlimit64 for the rlimit syscall wrappers, and use sysconf()
    for page size on aarch64/riscv64 libc builds.
  • sanitize: check secondary user pointers as well, and initialize the handler
    table at compile time.
  • Reject a negative op in io_uring_opcode_supported().
  • Fix integer overflow in recvmsg_validate() / payload length wraparound.
  • nolibc: fix integer overflow in __uring_malloc.
  • Ensure __io_uring_peek_cqe() is exported for FFI, make the iter helpers
    IOURINGINLINE, and add the missing iter helpers to the FFI map.
  • io_uring_cqe_nr: assign the shift value to an unsigned int upfront.

Man pages

  • Add io_uring_register_bpf_filter.3, io_uring_register_query.3, and
    io_uring_register_zcrx_ctrl.3.
  • Document the IORING_TIMEOUT_IMMEDIATE_ARG flag and that immediate absolute
    timeouts are allowed; fix timeout update flags to match the kernel.
  • Explain transfer size limits across all read/write/send/recv functions and
    misc helpers; clarify unsigned input vs. __s32 output in
    io_uring_prep_read.3.
  • Explain the -ENOMEM return from io_uring_queue_init().
  • Update io_uring_buf_reg documentation, document missing opcodes in
    io_uring_prep_cmd_sock.3, mention the length cap in
    io_uring_prep_recv.3, and fix IOPOLL-related notes.

Build, CI and configure

  • Upgrade CI clang to version 22 and fix the resulting over-eager warnings.
  • Fix missing bpf_filter.h installation and add it as an installed header.
  • Various configure fixes: Alpine mktemp handling, BPF/clang detection,
    ensure bpftool is found when not in PATH, and silence assorted unused
    variable/parameter warnings.

Tests and examples

  • New tests for cBPF filters (including IORING_OP_CONNECT), mixed-CQE peek
    batching, ring resize with pending large CQEs/SQEs and failed mmap remap,
    buffer-ring upgrade/drain-refill, multishot accept/recv stress, per-task
    restrictions, cancel-vs-completion races, fixed file table regressions,
    immediate/absolute timeouts, and timens regressions.
  • Many fixes to make tests skip cleanly on older kernels and run correctly as
    root, plus zcrx test improvements.
  • examples: add a minimal multishot echo server; assorted fixes to
    io_uring-udp, link-cp, proxy, ucontext-cp, send-zerocopy, and
    zcrx.

Contributors

Thanks to everyone who contributed to this release:

Ahmed Abdelmoemen, Ammar Faizi, Andrew Sayers, Caleb Sander Mateos,
Christian A. Ehrhardt, Guillem Jover, Haiyue Wang, Jens Axboe, KaFai Wan,
Maoyi Xie, Pavel Begunkov, Prateek, Sebastian Chlad, Shouvik Kar, Tom Ryan,
Travis Downs, XananasX, Yang Xiuwei, Yitang Yang, YooLCD, Zile Xiong,
mag1c1an1, rootvector2, uwezkhan06.

liburing 2.14

07 Feb 23:25

Choose a tag to compare

What's Changed

  • Lots of test updates
  • Lots of man page updates, including a selection of section 7 man pages describing various io_uring specific concepts. The entire liburing API is now documented.
  • Various bug fixes
  • test/epwait: change the epwait.t:test/epwait to count SQEs/CQEs and check for sqe->user_data/cqe->user_data by @schlad in #1507
  • [GIT PULL] src/setup: fix incorrect ring_mem calculation in io_uring_alloc_huge by @wokron in #1510
  • test: min-timeout: fail on unexpected CQE count by @schlad in #1513
  • [GIT PULL] Unify date formats in manual files by @betelgeuse in #1519
  • [GIT PULL] Fix io_uring_prep_cmd_sock man page file name by @betelgeuse in #1520
  • remove const from io_uring_prep_files_update by @cmazakas in #1521
  • man/io_uring_prep_send.3: fix broken links by @espoal in #1522
  • Net zerocopy benchmarks update by @isilence in #1525
  • man: document IORING_SETUP_TASKRUN_FLAG + IORING_SETUP_DEFER_TASKRUN by @calebsander in #1517
  • [GIT PULL] man: remove man pages for io_uring_*_reg_wait() by @wokron in #1523
  • test/io-wq: verify unused workers exit by @FirstLoveLife in #1529

New Contributors

Full Changelog: liburing-2.13...liburing-2.14

liburing 2.13

16 Dec 02:53

Choose a tag to compare

What's Changed

  • test/recvsend_bundle: enlarge recv buf-ring to 2 MiB to avoid ENOBUFS… by @schlad in #1453
  • fixing missing dependencies in Makefile by @Meiye-lj in #1455
  • [GIT PULL] test/futex: Fix alternation of async cancel requests by @zeehha in #1460
  • [GIT PULL] liburing.h: Add const-qualifier for some preps by @silvanshade in #1468
  • [GIT PULL] add missing noexcept, local inline, const quals by @cmazakas in #1469
  • [GIT PULL] Added query.h to install by @rpereira-dev in #1471
  • test: poll-race-mshot: Fix incorrect posix_memalign by @schlad in #1479
  • [GIT PULL] test: Minor improvements to testing by @zeehha in #1486
  • [GIT PULL] add tsan-enabled builds by @cmazakas in #1484
  • [GIT PULL] man: Fix version reference for io_uring_prep_{read,write}v2 by @sprt in #1489
  • [GIT PULL] Lsan fixes by @cmazakas in #1490
  • [GIT PULL] Extend documentation of SQE pointer lifetimes by @ChillFish8 in #1491
  • [GIT PULL] setup: fix 1-byte munmap in NO_MMAP error paths by @MegaManSec in #1493
  • [GIT PULL] hppa: unregister buf ring if mmap fails in br_setup() by @MegaManSec in #1494
  • [GIT PULL] setup: fully unmap single NO_MMAP region when SQE and rings share one mapping by @MegaManSec in #1495
  • Fix compiling of example in io_uring.7 due to missing "errno" variable. by @huberteff in #1502
  • [GIT PULL] build: Pass env CFLAGS through to make by @phlax in #1505

New Contributors

Full Changelog: liburing-2.12...liburing-2.13

liburing-2.13-rc2

10 Dec 21:04

Choose a tag to compare

liburing-2.13-rc2 Pre-release
Pre-release

What's Changed

  • test/recvsend_bundle: enlarge recv buf-ring to 2 MiB to avoid ENOBUFS… by @schlad in #1453
  • fixing missing dependencies in Makefile by @Meiye-lj in #1455
  • [GIT PULL] test/futex: Fix alternation of async cancel requests by @zeehha in #1460
  • [GIT PULL] liburing.h: Add const-qualifier for some preps by @silvanshade in #1468
  • [GIT PULL] add missing noexcept, local inline, const quals by @cmazakas in #1469
  • [GIT PULL] Added query.h to install by @rpereira-dev in #1471
  • test: poll-race-mshot: Fix incorrect posix_memalign by @schlad in #1479
  • [GIT PULL] test: Minor improvements to testing by @zeehha in #1486
  • [GIT PULL] add tsan-enabled builds by @cmazakas in #1484
  • [GIT PULL] man: Fix version reference for io_uring_prep_{read,write}v2 by @sprt in #1489
  • [GIT PULL] Lsan fixes by @cmazakas in #1490
  • [GIT PULL] Extend documentation of SQE pointer lifetimes by @ChillFish8 in #1491
  • [GIT PULL] setup: fix 1-byte munmap in NO_MMAP error paths by @MegaManSec in #1493
  • [GIT PULL] hppa: unregister buf ring if mmap fails in br_setup() by @MegaManSec in #1494
  • [GIT PULL] setup: fully unmap single NO_MMAP region when SQE and rings share one mapping by @MegaManSec in #1495
  • Fix compiling of example in io_uring.7 due to missing "errno" variable. by @huberteff in #1502

New Contributors

Full Changelog: liburing-2.12...liburing-2.13-rc2

liburing 2.13-rc1

01 Dec 21:13

Choose a tag to compare

liburing 2.13-rc1 Pre-release
Pre-release

What's Changed

  • test/recvsend_bundle: enlarge recv buf-ring to 2 MiB to avoid ENOBUFS… by @schlad in #1453
  • fixing missing dependencies in Makefile by @Meiye-lj in #1455
  • [GIT PULL] test/futex: Fix alternation of async cancel requests by @zeehha in #1460
  • [GIT PULL] liburing.h: Add const-qualifier for some preps by @silvanshade in #1468
  • [GIT PULL] add missing noexcept, local inline, const quals by @cmazakas in #1469
  • [GIT PULL] Added query.h to install by @rpereira-dev in #1471
  • test: poll-race-mshot: Fix incorrect posix_memalign by @schlad in #1479
  • [GIT PULL] test: Minor improvements to testing by @zeehha in #1486
  • [GIT PULL] add tsan-enabled builds by @cmazakas in #1484
  • [GIT PULL] man: Fix version reference for io_uring_prep_{read,write}v2 by @sprt in #1489
  • [GIT PULL] Lsan fixes by @cmazakas in #1490
  • [GIT PULL] Extend documentation of SQE pointer lifetimes by @ChillFish8 in #1491
  • [GIT PULL] setup: fix 1-byte munmap in NO_MMAP error paths by @MegaManSec in #1493
  • [GIT PULL] hppa: unregister buf ring if mmap fails in br_setup() by @MegaManSec in #1494
  • [GIT PULL] setup: fully unmap single NO_MMAP region when SQE and rings share one mapping by @MegaManSec in #1495

New Contributors

Full Changelog: liburing-2.12...liburing-2.13-rc1

liburing 2.12

23 Aug 19:20

Choose a tag to compare

What's Changed

  • [GIT PULL] src/sanitize.c: Add compile assertion if IORING_OP_LAST increments by @grooverdan in #1424
  • [GIT PULL] general clang undefined behaviour safe code with --sanitizer by @grooverdan in #1425
  • [GIT PULL] configure: fix compile error of __kernel_timespec by @kexianda in #1429
  • [GIT PULL] smp_load_acquire(ring->cq.khead) in __io_uring_peek_cqe() for consistent dereferencing by @sohambagchi in #1437
  • man: Fix grammar errors by @vpx in #1438
  • liburing.h: Add noexcept specifiers for C++ by @rohanlean in #1439
  • test: Add CPUs count check in wq-aff by @schlad in #1440
  • [GIT PULL] man/wait_cqe*: Describe -ETIME return value by @mbr0wn in #1443
  • Add support for pipe operations, as supported by newer kernels
  • Various man page updates
  • Various test case additions and existing test improvements

New Contributors

Full Changelog: liburing-2.11...liburing-2.12

liburing-2.11

16 Jun 17:34

Choose a tag to compare

What's Changed

  • Fix potential compilation error due to io_uring_for_each_cqe macro by @Flowdalic in #1414
  • Fixes for musl
  • Fixes for io_uring_queue_init_mem()
  • Add helpers for ring sizes required
  • Fix futex test case compilation on old system headers
  • Rename internal aligned_alloc() helper to t_aligned_alloc()

New Contributors

Full Changelog: liburing-2.10...liburing-2.11

liburing 2.11-rc1

11 Jun 12:19

Choose a tag to compare

liburing 2.11-rc1 Pre-release
Pre-release

What's Changed

  • Fix potential compilation error due to io_uring_for_each_cqe macro by @Flowdalic in #1414
  • Add helpers for returning memory requirements for io_uring_queue_init_mem

New Contributors

Full Changelog: liburing-2.10...liburing-2.11-rc1

liburing-2.10

29 May 16:32

Choose a tag to compare

Full Changelog: liburing-2.9...liburing-2.10

What's Changed

  • test: Including missing string.h for memcpy by @kraj in #1351
  • [GIT PULL] examples/proxy: Fix for BIDI by @SidongYang in #1350
  • [GIT PULL] workflows/build.yml: fix sanitizer typo by @cmazakas in #1344
  • [GIT PULL] workflows/build.yml: install default ubuntu-24.04 clang by @cmazakas in #1343
  • [GIT PULL] github: Build all newly pushed commits by @ammarfaizi2 in #1352
  • [GIT PULL] Test fixes and compatibility with older kernels by @calebsander in #1354
  • [GIT PULL] SQ and CQ code cleanup by @calebsander in #1355
  • man: fix io_uring_setup() parameter name mismatch by @crimilo in #1369
  • [GIT PULL] Add notes about parallel send/receive to the manual. by @fbrosseau in #1373
  • man/io_uring.7: Fix a typo in the comment of the example by @Sberm in #1394
  • [GIT PULL] register: use io_uring_rsrc_update instead of io_uring_files_update by @calebsander in #1400
  • [GIT PULL] syscall: update io_uring_enter2() signature by @calebsander in #1401
  • [GIT PULL] src/sanitize: add missing op entries by @cmazakas in #1403
  • [GIT PULL] test/sendmsg_iov_clean: fix stack use-after-free by @cmazakas in #1410

New Contributors

Full Changelog: liburing-2.9...liburing-2.10

liburing 2.9

03 Feb 12:45

Choose a tag to compare

  • Add support for ring resizing
  • Add support for registered waits
  • Test additions and improvements
  • Fix bug with certain ring setups with SQE128 set not fully closing
    the ring after io_uring_queue_exit(3) had been called.
  • Various man page fixes and updates