Direct naar de inhoud
Kritieke cyberalerts voor jouw sector & systemen — direct in je inbox. Aanmelden →
CVE's Videos Dagbriefing

← Terug naar CVE-database

CVE-2026-53191

HIGH · 7.8 CVSS Gepubliceerd:

Beschrijving NL

In de Linux kernel is de volgende kwetsbaarheid verholpen:

io_uring/net: erf IORING_CQE_F_buf_MORE over bundel recv herkansingen

Wanneer een bundel recv opnieuw probeert in io_recv_finish(), wordt de samenvoeglogica OF
de opgeslagen cvlaggen van de vorige iteratie met de cvlaggen geretourneerd door
de nieuwe iteratie:
cflags = req->cqe.flags | (cflags & CQE_F_MASK);

Bits vermeld in CQE_F_MASK worden geërfd van de nieuwe iteratie en alle
andere bits (met name IORING_CQE_F_BUFFER EN t de buffer-ID) afkomstig zijn van de
opgeslagen cflags. Vóór deze wijziging CQE_F_MASK alleen gedekt
IORING_CQE_F_SOCK_NONEMPTY en IORING_CQE_F_MORE. Bij gebruik van meegeleverde bufferringen (IOU_PBUF_RING_INC) met incrementele
modus en bundel recv, io_kbuf_inc_commit() kan de hoofdring verlaten
invoer gedeeltelijk verbruikt, __io_put_kbufs() stelt vervolgens
IORING_CQE_F_buf_MORE over de geretourneerde cflags, zodat userspace de
buffer-ID wordt hergebruikt voor latere voltooiingen. Omdat IORING_CQE_F_buf_MORE niet in CQE_F_MASK zat, is de samenvoeging hierboven
liet het stil vallen wanneer de laatste iteratie opnieuw gedeeltelijk
verbruikt de buffer, en de daaropvolgende req->cqe.flags = cflags &
~CQE_F_MASK opslaan zou een verouderde IORING_CQE_F_buf_MORE hebben achtergelaten in de
overgedragen cvlaggen was er één aanwezig geweest. Userspace zou dan
ten onrechte het rinkelkop voorbij een ingang gaan die de kernel nog steeds gebruikt. Voeg IORING_CQE_F_buf_MORE toe aan CQE_F_MASK zodat het beide wordt geërfd van de
nieuwe iteratie in de door de gebruiker zichtbare CQE en ontdaan van de opgeslagen
cvlaggen tussen iteraties.

Origineel (Engels) tonen

In the Linux kernel, the following vulnerability has been resolved:

io_uring/net: inherit IORING_CQE_F_BUF_MORE across bundle recv retries

When a bundle recv retries inside io_recv_finish(), the merge logic OR
the saved cflags from the previous iteration with the cflags returned by
the new iteration:
cflags = req->cqe.flags | (cflags & CQE_F_MASK);

Bits listed in CQE_F_MASK are inherited from the new iteration, and all
other bits (notably IORING_CQE_F_BUFFER and the buffer ID) come from the
saved cflags. Before this change CQE_F_MASK covered only
IORING_CQE_F_SOCK_NONEMPTY and IORING_CQE_F_MORE.

When using provided buffer rings (IOU_PBUF_RING_INC) with incremental
mode, and bundle recv, io_kbuf_inc_commit() can leave the head ring
entry partially consumed, __io_put_kbufs() then sets
IORING_CQE_F_BUF_MORE on the returned cflags so userspace knows the
buffer ID will be reused for subsequent completions.

Because IORING_CQE_F_BUF_MORE was not in CQE_F_MASK, the merge above
silently dropped it whenever the final retry iteration partially
consumed the buffer, and the subsequent req->cqe.flags = cflags &
~CQE_F_MASK save would have left a stale IORING_CQE_F_BUF_MORE in the
carried-over cflags had one been present. Userspace would then
wrongfully advance it ring head past an entry the kernel still uses.

Add IORING_CQE_F_BUF_MORE to CQE_F_MASK so it is both inherited from the
new iteration into the user-visible CQE and stripped from the saved
cflags between iterations.

Vendors

Linux

Affected products

Linux Kernel

References