CVE-2026-52961
NoneCVSS
—
EPSS
0.2%
Published
Jun 24, 2026
CISA due date
—
Cloudanix analysis
A flaw in Linux systems using CephFS storage can cause affected machines to crash during certain file metadata activity, potentially interrupting services.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- Moderate
- Impact
- Denial Of Service
- Component
- OS kernel
- Class
- Race Condition
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Medium
What it actually does
This is a race condition in the Linux kernel CephFS client extended-attribute handling path. The client calculates the required xattr blob size, then calls code that temporarily releases and reacquires the Ceph inode lock. During that window, an MDS capability grant can replace the cached xattr blob and increment its version. The stale precomputed size can then be used against the newer blob, triggering a kernel BUG_ON in __ceph_build_xattrs_blob(). The practical impact is a kernel oops/crash or node instability when CephFS xattr/capability activity hits the race; this is primarily an availability flaw, not a demonstrated privilege-escalation or code-execution issue.
Why it matters to the business
Systems using the Linux kernel CephFS client can unexpectedly crash or become unstable during normal or adversarial CephFS metadata activity, causing workload interruption, failed jobs, service downtime, and possible failover events. The issue is not currently listed in CISA KEV, has no reported ransomware use, and has a low EPSS score, so broad internet-scale exploitation is not indicated; however, organizations that rely heavily on CephFS for production storage should treat it as an operational resilience risk because a kernel crash can interrupt every workload on the affected node.
How an attack unfolds
An attacker would need a path to influence CephFS metadata activity seen by a vulnerable Linux client, such as authenticated access to a mounted CephFS filesystem or control over/compromise of CephFS metadata-server behavior. The attacker triggers xattr-related operations while the client is concurrently processing MDS capability grants. If the timing aligns, the client computes an xattr blob size, drops the inode lock, receives a newer MDS-provided xattr blob, and then resumes using stale sizing assumptions. That inconsistent state reaches __ceph_build_xattrs_blob() and trips a kernel BUG_ON, producing an invalid-opcode oops in the ceph-msgr workqueue. Depending on kernel configuration and workload state, the result can be process/workqueue failure, filesystem disruption, or a full host panic/reboot.
How to fix it
Upgrade the Linux kernel to a vendor release that includes the CephFS fix for the stale xattr blob size race in __ceph_build_xattrs_blob(). Because no product-specific fixed versions were provided, use the relevant distribution kernel advisory/changelog and confirm it contains the patch titled similar to "ceph: fix BUG_ON in __ceph_build_xattrs_blob() due to stale blob size." Reboot into the fixed kernel after installation. Where immediate patching is not possible, reduce risk by avoiding or limiting CephFS mounts on critical nodes, restricting CephFS access to trusted users and workloads, limiting unnecessary extended-attribute-heavy operations, isolating Ceph monitor/MDS/client networks, and ensuring high-availability/failover capacity for systems that depend on CephFS. These mitigations reduce exposure but do not remove the vulnerable kernel code path.
How to confirm the fix worked
Confirm remediation by verifying the running kernel version with uname -r and checking the installed kernel package changelog or vendor advisory for the Ceph xattr blob race fix. Ensure the host has actually rebooted into the patched kernel rather than only installing it. On systems that previously mounted CephFS, review kernel logs after normal CephFS activity to confirm there are no recurring BUG/Oops traces involving __ceph_build_xattrs_blob, ceph_check_caps, handle_cap_grant, or ceph_con_workfn. In a non-production test environment, CephFS regression testing such as the generic/642 xfstests case can be used to validate that the crash is no longer reproducible.
Typical attack path
- Identify a Linux system mounting CephFS with a vulnerable kernel Ceph client.
- Obtain a way to generate CephFS metadata and extended-attribute activity, or influence MDS capability grants received by the client.
- Create concurrent xattr/capability churn so the client enters the xattr blob rebuild path while MDS updates arrive.
- Win the race where the required blob size is computed before the cached xattr blob is replaced.
- Trigger the BUG_ON in __ceph_build_xattrs_blob().
- Cause a kernel oops, crash, reboot, or CephFS client disruption, resulting in denial of service.
How to detect it
Look for evidence of kernel crashes or oops events on systems using CephFS. Primary sources are journalctl -k, /var/log/kern.log, /var/log/messages, syslog, dmesg output, pstore/EFI pstore records, kdump/vmcore analysis, hypervisor reset logs, and centralized log aggregation. Focus on stack traces that include __ceph_build_xattrs_blob together with Ceph capability-processing functions such as handle_cap_grant, ceph_check_caps, ceph_handle_caps, mds_dispatch, ceph_con_process_message, or ceph_con_workfn. Correlate crash timing with CephFS mount activity, xattr-heavy workloads, metadata-server events, or unusual client/MDS message bursts. Because this flaw causes availability impact rather than leaving a stable file artifact, absence of filesystem IOCs does not prove absence of exploitation; kernel crash telemetry is the most reliable evidence.
- kernel BUG at fs/ceph/xattr.c
- __ceph_build_xattrs_blob
- Workqueue: ceph-msgr ceph_con_workfn
- Oops: invalid opcode
- __prep_cap
- ceph_check_caps
- handle_cap_grant
- ceph_handle_caps
- mds_dispatch
- ceph_con_process_message
- ceph_con_v2_try_read
- ceph_con_workfn
- process_message+0x16/0x1a0
- generic/642
What your security team should do
- Inventory Linux systems that mount CephFS and prioritize those running production, clustered, or high-availability workloads.
- Map each CephFS client to its running kernel version and vendor patch status.
- Patch and reboot CephFS client systems to a kernel containing the upstream/vendor fix, prioritizing nodes where unplanned reboot or filesystem disruption would be high impact.
- Until patched, restrict CephFS access to trusted users and workloads and avoid exposing CephFS client functionality to untrusted multi-tenant activity.
- Enable or verify crash capture and centralized kernel logging so any exploitation or recurrence is observable after a reboot.
- Search historical kernel logs and crash dumps for CephFS BUG/Oops signatures associated with this issue.
- Monitor vendor advisories because fixed package versions vary by distribution and kernel stream.
The record
In the Linux kernel, the following vulnerability has been resolved: ceph: fix BUG_ON in __ceph_build_xattrs_blob() due to stale blob size The generic/642 test-case can reproduce the kernel crash: [40243.605254] ------------[ cut here ]------------ [40243.605956] kernel BUG at fs/ceph/xattr.c:918! [40243.607142] Oops: invalid opcode: 0000 [#1] SMP PTI [40243.608067] CPU: 7 UID: 0 PID: 498762 Comm: kworker/7:1 Not tainted 7.0.0-rc7+ #3 PREEMPT(full) [40243.609700] Hardware name: QEMU Ubuntu 25.10 PC v2 (i440FX + PIIX, + 10.1 machine, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014 [40243.611820] Workqueue: ceph-msgr ceph_con_workfn [40243.612715] RIP: 0010:__ceph_build_xattrs_blob+0x1b8/0x1e0 [40243.613731] Code: 0f 84 82 fe ff ff e9 cf 8e 56 ff 48 8d 65 e8 31 c0 5b 41 5c 41 5d 5d 31 d2 31 c9 31 f6 31 ff 45 31 c0 45 31 c9 c3 cc cc cc cc <0f> 0b 4c 8b 62 08 41 8b 85 24 07 00 00 49 83 c4 04 41 89 44 24 fc [40243.616888] RSP: 0018:ffffcc80c4d4b688 EFLAGS: 00010287 [40243.617773] RAX: 0000000000010026 RBX: 0000000000000001 RCX: 0000000000000000 [40243.618928] RDX: ffff8a773798dee0 RSI: 0000000000000000 RDI: 0000000000000000 [40243.620158] RBP: ffffcc80c4d4b6a0 R08: 0000000000000000 R09: 0000000000000000 [40243.621573] R10: 0000000000000000 R11: 0000000000000000 R12: ffff8a75f3b58000 [40243.622907] R13: ffff8a75f3b58000 R14: 0000000000000080 R15: 000000000000bffd [40243.624054] FS: 0000000000000000(0000) GS:ffff8a787d1b4000(0000) knlGS:0000000000000000 [40243.625331] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [40243.626269] CR2: 000072f390b623c0 CR3: 000000011c02a003 CR4: 0000000000372ef0 [40243.627408] Call Trace: [40243.627839] <TASK> [40243.628188] __prep_cap+0x3fd/0x4a0 [40243.628789] ? do_raw_spin_unlock+0x4e/0xe0 [40243.629474] ceph_check_caps+0x46a/0xc80 [40243.630094] ? __lock_acquire+0x4a2/0x2650 [40243.630773] ? find_held_lock+0x31/0x90 [40243.631347] ? handle_cap_grant+0x79f/0x1060 [40243.632068] ? lock_release+0xd9/0x300 [40243.632696] ? __mutex_unlock_slowpath+0x3e/0x340 [40243.633429] ? lock_release+0xd9/0x300 [40243.634052] handle_cap_grant+0xcf6/0x1060 [40243.634745] ceph_handle_caps+0x122b/0x2110 [40243.635415] mds_dispatch+0x5bd/0x2160 [40243.636034] ? ceph_con_process_message+0x65/0x190 [40243.636828] ? lock_release+0xd9/0x300 [40243.637431] ceph_con_process_message+0x7a/0x190 [40243.638184] ? kfree+0x311/0x4f0 [40243.638749] ? kfree+0x311/0x4f0 [40243.639268] process_message+0x16/0x1a0 [40243.639915] ? sg_free_table+0x39/0x90 [40243.640572] ceph_con_v2_try_read+0xf58/0x2120 [40243.641255] ? lock_acquire+0xc8/0x300 [40243.641863] ceph_con_workfn+0x151/0x820 [40243.642493] process_one_work+0x22f/0x630 [40243.643093] ? process_one_work+0x254/0x630 [40243.643770] worker_thread+0x1e2/0x400 [40243.644332] ? __pfx_worker_thread+0x10/0x10 [40243.645020] kthread+0x109/0x140 [40243.645560] ? __pfx_kthread+0x10/0x10 [40243.646125] ret_from_fork+0x3f8/0x480 [40243.646752] ? __pfx_kthread+0x10/0x10 [40243.647316] ? __pfx_kthread+0x10/0x10 [40243.647919] ret_from_fork_asm+0x1a/0x30 [40243.648556] </TASK> [40243.648902] Modules linked in: overlay hctr2 libpolyval chacha libchacha adiantum libnh libpoly1305 essiv intel_rapl_msr intel_rapl_common intel_uncore_frequency_common skx_edac_common nfit kvm_intel kvm irqbypass joydev ghash_clmulni_intel aesni_intel rapl input_leds mac_hid psmouse vga16fb serio_raw vgastate floppy i2c_piix4 pata_acpi bochs qemu_fw_cfg i2c_smbus sch_fq_codel rbd dm_crypt msr parport_pc ppdev lp parport efi_pstore [40243.654766] ---[ end trace 0000000000000000 ]--- Commit d93231a6bc8a ("ceph: prevent a client from exceeding the MDS maximum xattr size") moved the required_blob_size computation to before the __build_xattrs() call, introducing a race. __build_xattrs() releases and reacquires i_ceph_lock during execution. In that window, handle_cap_grant() may update i_xattrs.blob with a newer MDS-provided blob and bump i_xattrs.version. When __bui ---truncated---
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|