CVE-2026-68082: libceph: fix two unsafe bare decodes in decode_lockers()
In the Linux kernel, the following vulnerability has been resolved:
libceph: fix two unsafe bare decodes in decodelockers()
decodelockers() in clslockclient.c contains two bare decode operations that allow a malicious or compromised OSD to trigger slab-out-of-bounds reads:
1. cephdecode32(p) at the numlockers field has no preceding bounds check. cephstartdecoding() accepts structlen=0 as valid -- the internal cephdecodeneed(p, end, 0, bad) always passes -- so when an OSD sends structlen=0, cephstartdecoding() returns success with p == end. The immediately following bare cephdecode32(p) then reads 4 bytes past the validated buffer boundary. The garbage value is passed directly to kzallocobjs() as the locker count.
The sibling function decodewatchers() in osdclient.c already uses cephdecode32safe() after its own cephstartdecoding() call. decodelockers() was the only site using the bare variant.
2. cephdecode8(p) after the decodelocker() loop has no preceding bounds check. If an OSD crafts numlockers such that the loop advances p exactly to end, the subsequent bare cephdecode8(p) reads one byte past the validated buffer boundary. The result is passed directly into type, which is used as a lock type discriminator by callers, giving an OSD-controlled one-byte OOB read with direct influence over the lock type field.
Fix both by replacing bare operations with their safe variants: cephdecode32(p) -> cephdecode32safe(p, end, numlockers, errinval) cephdecode8(p) -> cephdecode8safe(p, end, type, errfreelockers)
The goto targets differ intentionally: errinval: is a new label returning -EINVAL directly. It is used for the pre-allocation failure path where lockers is not yet allocated and must not be passed to cephfreelockers().
errfreelockers: is the existing label. It is used for the post-allocation failure path where lockers is allocated and must be freed.
ret is set to -EINVAL before cephdecode8safe() so that errfreelockers returns the correct error code on bounds violation. Without this, errfreelockers would return a stale ret value (0 from the successful decodelocker() loop), silently swallowing the error.
-EINVAL is correct for both failure paths. The data received from the OSD is structurally malformed. -ENOMEM would misrepresent the failure class to callers and to stable@ backporters triaging error paths.
Attacker model: a malicious or compromised OSD in a multi-tenant Ceph deployment can trigger this against any kernel client that issues the lock.getinfo class method (e.g. during RBD exclusive lock acquisition).
[ idryomov: trim changelog, formatting ]
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade to a fixed release to a version that resolves this vulnerability.
Fixed in 6.6.157.1-1 - Upgrade
Upgrade
debian/linuxto a version that resolves this vulnerability.Fixed in 6.1.190-1Fixed in 6.12.107-1Fixed in 6.12.113-1Fixed in 7.2.12-1Fixed in 7.2.13-1 - Upgrade
Upgrade
debian/linux-6.12to a version that resolves this vulnerability.Fixed in 6.12.113-1~deb12u1 - Upgrade
Upgrade
ubuntu/linux-aws-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-1014.14~24.04.1 - Upgrade
Upgrade
ubuntu/linux-azure-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-1017.17~24.04.1 - Upgrade
Upgrade
ubuntu/linux-azure-fde-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-1016.16~24.04.1 - Upgrade
Upgrade
ubuntu/linux-gcp-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-1014.14~24.04.1 - Upgrade
Upgrade
ubuntu/linux-hwe-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-38.38~24.04.4 - Upgrade
Upgrade
ubuntu/linux-nvidia-tegrato a version that resolves this vulnerability.Fixed in 6.8.0-1035.38 - Upgrade
Upgrade
ubuntu/linux-oracle-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-1013.13~24.04.1 - Upgrade
Upgrade
ubuntu/linux-riscv-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-38.38.1~24.04.1 - Upgrade
Upgrade
ubuntu/linuxto a version that resolves this vulnerability.Fixed in 7.0.0-38.38 - Upgrade
Upgrade
ubuntu/linux-awsto a version that resolves this vulnerability.Fixed in 7.0.0-1014.14 - Upgrade
Upgrade
ubuntu/linux-azureto a version that resolves this vulnerability.Fixed in 7.0.0-1017.17 - Upgrade
Upgrade
ubuntu/linux-azure-fdeto a version that resolves this vulnerability.Fixed in 7.0.0-1016.16 - Upgrade
Upgrade
ubuntu/linux-gcpto a version that resolves this vulnerability.Fixed in 7.0.0-1014.14 - Upgrade
Upgrade
ubuntu/linux-gketo a version that resolves this vulnerability.Fixed in 7.0.0-1008.9 - Upgrade
Upgrade
ubuntu/linux-ibmto a version that resolves this vulnerability.Fixed in 7.0.0-1015.15 - Upgrade
Upgrade
ubuntu/linux-oem-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-1015.15 - Upgrade
Upgrade
ubuntu/linux-oracleto a version that resolves this vulnerability.Fixed in 7.0.0-1013.13 - Upgrade
Upgrade
ubuntu/linux-realtimeto a version that resolves this vulnerability.Fixed in 7.0.0-38.38.1 - Upgrade
Upgrade
ubuntu/linux-riscvto a version that resolves this vulnerability.Fixed in 7.0.0-38.38.1 - Compensating control
In libceph decode_lockers(), replace the bare decodes with bounds-checked variants: change ceph_decode_32(p) to ceph_decode_32_safe(p, end, *num_lockers, err_inval) and ceph_decode_8(p) to ceph_decode_8_safe(p, end, *type, err_free_lockers). Set ret to -EINVAL before ceph_decode_8_safe(); use err_inval for the pre-allocation failure path and err_free_lockers for the post-allocation cleanup path.
Event History
Frequently Asked Questions
What is the severity of CVE-2026-68082?
CVE-2026-68082 has a risk rating of 33.
How do I fix CVE-2026-68082?
To fix CVE-2026-68082, update to the latest version of the Linux kernel that incorporates the patch for libceph.
What software is affected by CVE-2026-68082?
CVE-2026-68082 affects the Linux Kernel and libceph module.
What type of vulnerability is CVE-2026-68082?
CVE-2026-68082 is a vulnerability related to unsafe bare decode operations leading to slab-out-of-bounds reads.
When was CVE-2026-68082 published?
CVE-2026-68082 was published on August 8, 2026.