CVE-2026-89656
largeOut-of-bounds kernel write in Linux libceph CRUSH map decoding
The Linux kernel's Ceph client library (libceph) contains a heap out-of-bounds write in bucket_perm_choose() that is reached when decoding a malformed CRUSH map: a bucket whose encoded id does not match its array slot can alias another bucket's workspace, and for uniform buckets the permutation expansion writes past the smaller bucket's array and can escape the kvmalloc'd CRUSH workspace. The malicious map is delivered to a host running the kernel Ceph client (e.g., kernel CephFS mounts or RBD via kclient), typically from a malicious or compromised Ceph monitor, giving the attacker kernel memory corruption with only a 4-byte overflow reported by KASAN but potentially sufficient for a kernel crash (denial of service) or privilege escalation. Any Linux host that consumes CRUSH maps from a cluster it connects to is affected, and CVSS 3.1 rates it 9.8 critical (network vector, no privileges or user interaction required). No public proof of concept exists and the issue is not in CISA's KEV, so exploitation status is none known. The fix rejects any bucket whose encoded id does not match its slot, which does not change behavior for valid maps.
What to do: Patch kernel Ceph client hosts (kernel CephFS and RBD users first) as soon as a kernel build containing the crush_decode fix is available from your distribution. Because the malicious input comes from the cluster's CRUSH map, restrict clients to trusted, cephx-authenticated monitors and firewall monitor ports so a compromised or spoofed monitor cannot reach kernel clients. If a patched kernel is not yet available for affected hosts, consider switching those workloads to the userspace Ceph client as a stopgap.
| Linux kernel (libceph / kernel Ceph client) | — |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
In the Linux kernel, the following vulnerability has been resolved: libceph: reject buckets with mismatched CRUSH ids crush_decode() stores bucket data by array slot, and the mapper later derives the per-bucket workspace index from the decoded bucket id. A malformed map can therefore make one bucket reuse another bucket's workspace by encoding an id different from -1 - slot. For uniform buckets, the second replica selection expands the source bucket's permutation into that aliased workspace buffer. If the source bucket is larger than the aliased bucket, the write runs past the smaller permutation array and can escape the kvmalloc'd CRUSH workspace. KASAN reports a slab OOB write of 4 bytes in bucket_perm_choose(). Reject buckets whose encoded id does not match their array slot. Valid CRUSH maps already use the canonical negative id corresponding to the bucket slot, so this restores the invariant expected by work->work[-1 - in->id] without changing valid map behavior.
- Vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
In the news0 stories
No ingested article mentions this CVE yet.