CVE-2026-80557

CVE-2026-80557

Critical · published August 26, 2026

CVSS v3.1
9.8
EPSS
1%
Percentile
43.7
In the wild
Unconfirmed
What it is

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

libceph: fix OOB read in decode_watchers() via missing bounds check

ceph_start_decoding() validates that struct_len bytes remain in the

buffer after the encoding header, but accepts struct_len=0 as valid:

ceph_decode_need(p, end, 0, bad) always passes. When a malicious or

compromised OSD sends an obj_list_watch_response_t reply with

struct_len=0, ceph_start_decoding() returns success with p == end,

leaving zero bytes guaranteed for subsequent reads.

The immediately following ceph_decode_32(p) in decode_watchers() has

no preceding bounds check. With p == end this is a 4-byte read past

the validated buffer boundary. The garbage value is then passed

directly to kzalloc_objs() as the watcher count.

The sibling function decode_watcher() already uses the safe variants

(ceph_decode_copy_safe, ceph_decode_64_safe, ceph_decode_skip_32)

after its own ceph_start_decoding() call. decode_watchers() is the

only site that uses the bare variant, confirming an oversight.

Fix by replacing ceph_decode_32(p) with ceph_decode_32_safe(p, end,

*num_watchers, bad), consistent with the established pattern.

Attacker model: a malicious or compromised OSD in a multi-tenant Ceph

deployment (e.g. cloud) can trigger this against any kernel client

that calls CEPH_OSD_OP_LIST_WATCHERS, without any further privileges

beyond OSD session establishment.

[ idryomov: trim changelog ]

The record
Technical detail
CVSS v3.1
9.8 · CRITICAL
Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00525 · 43.7th percentile
Published
2026-08-26T19:17Z
References (8)
EPSS history
Timeline
  • 28 AUG 06:54Z
    EPSS moved — → 0%
    epss
  • 26 AUG 14:37Z
    libceph: fix OOB read in decode_watchers() via missing bounds check
    cvelistv5