Skip to main content

Linux btrfs CVE-2026-98959

| EUVDEUVD-2026-108753 CRITICAL
2026-10-23 Linux GHSA-cf5f-cwf6-82gc
9.8
CVSS 3.1 · Vendor: Linux
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Local access to mounted btrfs filesystem
  2. Delivery
    Set two crc32c-colliding xattrs on an owned file
  3. Exploit
    Replace one xattr value with a different size
  4. Execution
    Delete+insert shifts leaf data, leaving btrfs_dir_item uninitialized
  5. Persist
    listxattr reads out-of-range, tree checker aborts transaction
  6. Impact
    Xattr data loss and filesystem instability

Vulnerability Assessment

Exploitation Conditions

Requires a mounted btrfs filesystem (not ext4/xfs) and a local user able to write extended attributes to a file on it (e.g. user.* xattrs on an owned file). The specific trigger is: create two xattrs whose names produce the same crc32c hash so they are packed into a single btrfs_dir_item, then replace the value of one of them (via the setxattr(2) family) with a value of a different size, which leaves the newly inserted btrfs_dir_item with uninitialized name/name-length/key/flags/transid fields. Limiting factors: exploitation is local only (no network vector), is confined to btrfs-formatted volumes, depends on engineering a crc32c name collision, and yields metadata corruption, a tree-checker-detected out-of-range read, and transaction abort rather than code execution.

Impact

The input CVSS 9.8 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N) materially overstates real-world risk and contradicts the vulnerability mechanism: this is a btrfs filesystem bug triggered via the local setxattr(2) syscall family, with no network-reachable component - there is no network vector or remote unauthenticated path, so the AV:N/PR:N vector should be treated as erroneous and verified against the kernel advisory. Supporting signals point to low urgency in practice: EPSS is 0.21% (10th percentile), there is no CISA KEV listing, and the effect is metadata corruption, a tree-checker-caught out-of-range read in btrfs_listxattr, and a transaction abort (availability/integrity loss), not remote code execution. The 'Information Disclosure' tag has a plausible basis - the dmesg trace shows read_extent_buffer accessing an extent buffer out of range during listxattr, which can expose adjacent uninitialized leaf contents - but the dominant observed impact is filesystem corruption and forced read-only/abort. The vuln.today Decision label is act_now and a vendor patch is available, so this should be scheduled for prompt kernel updating on btrfs systems; however, the combination of local-only access, btrfs-specific triggering conditions, and low EPSS indicates this is a correctness/robustness fix rather than a widespread remote-exploitation emergency, despite the 9.8 figure. Net: prioritize patching on btrfs deployments, but the headline 9.8 is not a reliable indicator of exposure here.

Exploit ScenarioDerived

A local user with a file on a mounted btrfs filesystem sets two extended attributes whose names collide under crc32c (so the kernel packs them into one btrfs_dir_item), then uses setfattr to replace one value with a differently-sized value, producing a partially-uninitialized btrfs_dir_item. A subsequent listxattr reads out of range and the kernel aborts the transaction, losing an xattr and destabilizing the filesystem. A public reproducer script is embedded in the advisory demonstrating this corruption; it is not verified as a working privilege-escalation or code-execution exploit, and exploitation is local-only per the described trigger.

Act Now Prioritize within 24-48h. Why: CRITICAL severity.
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 24, 2026

A metadata-corruption bug in the Linux kernel's btrfs extended-attribute handling lets a local user who can call setxattr(2) on a file stored on a btrfs volume leave a newly inserted btrfs_dir_item partially initialized, which the tree checker later flags at extent-buffer writeback and which ultimately aborts the transaction. Two conditions must line up: two xattr names must share a crc32c hash so they are packed into one btrfs_dir_item, and the value of one of them must be replaced with a value of a different size. The published CVSS 9.8 (AV:N/AC:L/PR:N) does not reflect the mechanism - there is no network-reachable path; the realistic vector is local, low-privileged (AV:L/AC:L/PR:L, C:L/I:L/A:H), so exposure is confined to hosts running btrfs with untrusted local writers. EPSS is low at 0.21% (10th percentile), the issue is not in CISA KEV, and a reproducer script from the fix commit is public; it is not verified as working exploit code. The prioritisation label is act_now and vendor fixes are available.

RemediationAI

Apply the vendor-released Linux kernel updates that carry the fix: 6.6.160, 6.12.113, 6.18.57, 7.2.11 or 7.3, or pick up the individual stable commits 7a53bb4668b319fc6c8a3ce2c21635125c7d2712, 5877d7138cc4359d26fd7b010eedfd1b3162348f, a97114b9b00ed3d05156f3b2ddbf797296260389, c1803697a60f22743aa28ad522f805e92d45e3f0 and 858bee1c77857aabcc2327cd32dd8266332de332 from https://git.kernel.org/stable/c/7a53bb4668b319fc6c8a3ce2c21635125c7d2712 (see also https://nvd.nist.gov/vuln/detail/CVE-2026-98959). The prioritisation label is act_now, so patch btrfs-enabled hosts promptly rather than treating this as a background item. No configuration-level workaround is documented in the available sources - updating is the complete fix - so interim exposure reduction means limiting untrusted local interactive or service accounts that can set user.* xattrs on btrfs mounts, and watching dmesg for 'access to eb bytenr ... out of range', report_eb_range() warnings or btrfs tree-checker/transaction-abort messages, which indicate a volume has already been corrupted and should be scrubbed and restored from backup. Note the real attack surface is local only, so internet-facing perimeter controls have no bearing on this CVE.

Affected VersionsENISA

Linux 5f5bc6b1e2d5a6f827bc860ef2dc5b6f365d1339 <a97114b9b00ed3d05156f3b2ddbf797296260389
Linux 43f2e3615d181a7028ab797114c5960977669b2a
Linux 5f5bc6b1e2d5a6f827bc860ef2dc5b6f365d1339 <7a53bb4668b319fc6c8a3ce2c21635125c7d2712
Linux 5f5bc6b1e2d5a6f827bc860ef2dc5b6f365d1339 <c1803697a60f22743aa28ad522f805e92d45e3f0
Linux patch: 6.6.160
Linux 55e97f654cbbbef70f9714f0e113604dd931e360
Linux patch: 0
Linux patch: 6.18.57
Linux patch: 6.12.113
Linux a873146ce4fb025c0b5c1322af5a6bad042f5363
Linux 5f5bc6b1e2d5a6f827bc860ef2dc5b6f365d1339 <858bee1c77857aabcc2327cd32dd8266332de332
Linux 3.18.19 <3.19
Linux 3.19
Linux 3.12.45 <3.13
Linux patch: 7.2.11
Linux patch: 7.3
Linux 02590fd855d1690568b2fa439c942e933221b57a
Linux 3.14.47 <3.15
Linux 3.10.83 <3.11
Linux 5f5bc6b1e2d5a6f827bc860ef2dc5b6f365d1339 <5877d7138cc4359d26fd7b010eedfd1b3162348f

Affected Packages

euvd linux fix: 3.11, 3.13, 3.15, 3.19

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

btrfs stores directory entries and small extended attributes in btrfs_dir_item structures inside a leaf. Multiple xattrs can be packed into one item, and the lookup key is a crc32c hash of the attribute name, so two distinct names can collide and land in the same packed item. btrfs_setxattr() handles a replace by deleting the matched btrfs_dir_item and inserting a new one; because deletion and insertion shift data within the leaf, and because the new value may have a different length, the freshly placed structure ends up in a leaf region that was never initialised. The code copies only the value payload and sets the value length, leaving the name, name length, key (which must be all zeroes for xattrs), flags (BTRFS_FT_XATTR) and transaction ID unset. The corrupted item is then read back out of range - the advisory's dmesg shows 'access to eb bytenr ... out of range' and a WARN at report_eb_range() from btrfs_listxattr() - and the tree checker detects the corruption during extent-buffer writeback, aborting the transaction. No CWE was supplied, but the root cause is a use of uninitialised / improperly initialised in-memory metadata combined with a size-change on an in-place leaf update. Affected builds are Linux kernels with the btrfs module; the reference CPE strings are cpe:2.3:a:linux:linux:*:*:*:*:*:*:*:*, and the two commits at the base of the affected range are 5f5bc6b1e2d5a6f827bc860ef2dc5b6f365d1339 and related branches listed by EUVD. Only btrfs volumes are affected; ext4 and XFS are not.

Know when the next one hits your stack

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (Linux) PRIMARY 9.8 CRITICAL
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 6.6 MEDIUM

Triggered via local setxattr on a btrfs file by an unprivileged file owner (AV:L, PR:L, UI:N); causes out-of-range read (C:L), metadata corruption (I:L) and transaction abort/data loss (A:H).

3.1 AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:H
4.0 AV:L/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (Linux).

CVSS VectorVendor: Linux

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

4
CVSS changed
Oct 24, 2026 - 14:22 NVD
9.8 (CRITICAL)
Patch available
Oct 23, 2026 - 13:17 EUVD
CVE Published
Oct 23, 2026 - 12:19 cve.org
CRITICAL 9.8
CVE Published
Oct 23, 2026 - 12:19 cve.org
UNKNOWN (no severity yet)

DescriptionCVE.org

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

btrfs: fix xattr replace when multiple xattrs are packed in the same item

If we have a btrfs_dir_item item that packs multiple xattrs and then we replace the value of one of them (with the setxattr(2) family of syscalls) with another value of a different size, we end up not having a fully initialized btrfs_dir_item, resulting in a corruption that the tree checker will detect at extent buffer writeback time.

This is because in btrfs_setxattr() when we find a btrfs_dir_item with multiple xattrs (due to the crc32c hash of their name being the same) we delete one of the xattr items (btrfs_dir_item) and then insert a new one, but the deletion and insertion results in shifting existing data in the leaf and therefore when the new value of a xattr has a different size, the new btrfs_dir_item is placed in a leaf section that was not initialized and we only copy the value's data and set the value's length in the new btrfs_dir_item, without setting the name, the name's length, the key (which must be all zeroes for xattrs), flags (BTRFS_FT_XATTR) and transaction ID.

The following script reproduces the issue:

$ cat test.sh #!/bin/bash

DEV=/dev/sdi MNT=/mnt/sdi

mkfs.btrfs -f $DEV mount $DEV $MNT

touch $MNT/testfile

Add two xattrs that, on btrfs, have the same hash (crc32c) for their

name and therefore are packed into the same btrfs_dir_item.

setfattr -n user.foobar -v 123 $MNT/testfile setfattr -n user.WvG1c1Td -v qwerty $MNT/testfile

Verify the xattrs are present.

echo "xattrs before:" getfattr --absolute-names --dump $MNT/testfile

Now replace the value of the foobar xattr with a significantly larger

value.

setfattr -n user.foobar -v abcdefghijklmnopqrstuvwxyz $MNT/testfile

Check the xattrs have the expected values.

echo "xattrs after:" getfattr --absolute-names --dump $MNT/testfile

umount $MNT

Running it:

$ ./test.sh (...) xattrs before:

file: /mnt/sdi/testfile

user.WvG1c1Td="qwerty" user.foobar="123"

xattrs after:

file: /mnt/sdi/testfile

user.WvG1c1Td="qwerty"

So the "user.foobar" xattr is missing and there was a transaction abort when unmounting the fs with the following traces in dmesg:

$ dmesg [869800.159271] BTRFS warning (device sdi): access to eb bytenr 30474240 len 16384 out of range start 16015 len 25964 [869800.159293] ------------[ cut here ]------------ [869800.159296] WARNING: fs/btrfs/extent_io.c:4408 at report_eb_range+0x44/0x60 [btrfs], CPU#8: getfattr/2605179 [869800.168961] Modules linked in: btrfs dm_thin_pool (...) [869800.190527] CPU: 8 UID: 0 PID: 2605179 Comm: getfattr Tainted: G W 7.3.0-rc3-btrfs-next-244+ #1 PREEMPT(full) [869800.193726] Tainted: [W]=WARN [869800.194502] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.2-0-gea1b7a073390-prebuilt.qemu.org 04/01/2014 [869800.197576] RIP: 0010:report_eb_range+0x44/0x60 [btrfs] [869800.198985] Code: 48 8b 7b 18 (...) [869800.203531] RSP: 0018:ffffce4541937d58 EFLAGS: 00010246 [869800.204609] RAX: 0000000000000000 RBX: ffff8dde054b8738 RCX: 0000000000000000 [869800.206137] RDX: 0000000000000000 RSI: 0000000000000001 RDI: ffffffffc04c92a0 [869800.207645] RBP: 0000000000003e8f R08: 0000000000000000 R09: 3fffffffffefffff [869800.226175] R10: ffffce4541937a88 R11: 0000000000000003 R12: 000000000000656c [869800.227594] R13: ffff8dde14be800f R14: 000000000000656c R15: 0000000000000069 [869800.229097] FS: 00007f59023bb780(0000) GS:ffff8de5788ed000(0000) knlGS:0000000000000000 [869800.231137] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [869800.232321] CR2: 0000558dc45e6a78 CR3: 0000000765b16004 CR4: 0000000000370ef0 [869800.233783] Call Trace: [869800.234330] <TASK> [869800.234791] read_extent_buffer+0x4d/0x100 [btrfs] [869800.235898] btrfs_listxattr+0x199/0x240 [btrfs] [869800.236912] vfs_listxattr+0x51/0 ---truncated---

Executive ViewAI

Why It Matters

A metadata-corruption flaw in Linux kernel btrfs extended-attribute handling requires local access to hosts using btrfs with untrusted writers. While the CVSS 9.8 is misleading, the bug's conditions make it relatively difficult to trigger, but the potential for data corruption and system crashes warrants attention.

Business Impact: Medium
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.2%
Top 90% exploitable
Prevalence
High
btrfs ships in every Linux kernel but is the active filesystem only on some distros
Data Quality
4 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity CRITICAL
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact
Medium

Priority Score

49
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +49
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy