CVE-2026-97415 (GCVE-0-2026-97415)
Vulnerability from cvelistv5 – Published: 2026-09-24 16:03 – Updated: 2026-10-03 10:58| Vendor | Product | Version | CPE status | |
|---|---|---|---|---|
| Linux | Linux |
Affected:
b64ec075bded2b30bcd90af5aa5256d2237c885d , < 1370badf6b823ce3cde39a65f46f9e5dc7b4bf43
(git)
Affected: b64ec075bded2b30bcd90af5aa5256d2237c885d , < ba6c4fc662853f6662e4db060cf88ee994053e21 (git) Affected: b64ec075bded2b30bcd90af5aa5256d2237c885d , < 9154542070ca7eadb3c764a882f39a127677854b (git) Affected: b64ec075bded2b30bcd90af5aa5256d2237c885d , < 74f577c722c99248d804eca18e7de7c5e47549d7 (git) Affected: b64ec075bded2b30bcd90af5aa5256d2237c885d , < 0af37c217edf15fa21dac1c40822086df356c6bb (git) |
guessed | |
| Linux | Linux |
Affected:
4.18
Unaffected: 0 , < 4.18 (semver) Unaffected: 6.1.189 , ≤ 6.1.* (semver) Unaffected: 6.6.158 , ≤ 6.6.* (semver) Unaffected: 6.12.111 , ≤ 6.12.* (semver) Unaffected: 6.18.53 , ≤ 6.18.* (semver) Unaffected: 7.2 , ≤ * (original_commit_for_fix) |
guessed |
{
"containers": {
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"fs/btrfs/ioctl.c",
"fs/btrfs/tree-checker.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "1370badf6b823ce3cde39a65f46f9e5dc7b4bf43",
"status": "affected",
"version": "b64ec075bded2b30bcd90af5aa5256d2237c885d",
"versionType": "git"
},
{
"lessThan": "ba6c4fc662853f6662e4db060cf88ee994053e21",
"status": "affected",
"version": "b64ec075bded2b30bcd90af5aa5256d2237c885d",
"versionType": "git"
},
{
"lessThan": "9154542070ca7eadb3c764a882f39a127677854b",
"status": "affected",
"version": "b64ec075bded2b30bcd90af5aa5256d2237c885d",
"versionType": "git"
},
{
"lessThan": "74f577c722c99248d804eca18e7de7c5e47549d7",
"status": "affected",
"version": "b64ec075bded2b30bcd90af5aa5256d2237c885d",
"versionType": "git"
},
{
"lessThan": "0af37c217edf15fa21dac1c40822086df356c6bb",
"status": "affected",
"version": "b64ec075bded2b30bcd90af5aa5256d2237c885d",
"versionType": "git"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"fs/btrfs/ioctl.c",
"fs/btrfs/tree-checker.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "4.18"
},
{
"lessThan": "4.18",
"status": "unaffected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.1.*",
"status": "unaffected",
"version": "6.1.189",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.6.*",
"status": "unaffected",
"version": "6.6.158",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.12.*",
"status": "unaffected",
"version": "6.12.111",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.18.*",
"status": "unaffected",
"version": "6.18.53",
"versionType": "semver"
},
{
"lessThanOrEqual": "*",
"status": "unaffected",
"version": "7.2",
"versionType": "original_commit_for_fix"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.1.189",
"versionStartIncluding": "4.18",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.6.158",
"versionStartIncluding": "4.18",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.12.111",
"versionStartIncluding": "4.18",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.18.53",
"versionStartIncluding": "4.18",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.2",
"versionStartIncluding": "4.18",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nbtrfs: tree-checker: validate names in ROOT_REF and ROOT_BACKREF\n\nROOT_REF and ROOT_BACKREF items contain a struct btrfs_root_ref followed\nby the subvolume name. Several readers assume that this layout is already\nvalid and then use the on-disk name length directly. A corrupted item can\ntherefore make those readers address bytes outside the item, and\nBTRFS_IOC_GET_SUBVOL_INFO can copy too many bytes into its fixed-size UAPI\nname buffer.\n\nValidate ROOT_REF and ROOT_BACKREF items in tree-checker before any reader\nuses them. Reject records that do not contain a non-empty name, whose\nname_len does not exactly describe the remaining item payload, or whose\nname exceeds BTRFS_NAME_LEN.\n\nFor BTRFS_IOC_GET_SUBVOL_INFO, copy only the validated on-disk name_len\ninstead of deriving the copy length from the item size. The ioctl result is\nzeroed when allocated. That leaves the existing trailing zero byte\nuntouched."
}
],
"metrics": [
{
"cvssV3_1": {
"baseScore": 7.8,
"baseSeverity": "HIGH",
"vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
"version": "3.1"
},
"scenarios": [
{
"lang": "en",
"value": "AV:L - The attacker-controlled bytes are the on-disk BTRFS_ROOT_BACKREF_KEY item (struct btrfs_root_ref plus the following name) in the tree of tree roots. After that image is mounted, ioctl(BTRFS_IOC_GET_SUBVOL_INFO) reaches _btrfs_ioctl_get_subvol_info() via btrfs_ioctl() and read_extent_buffer()s the item; no SMB/NFS/packet field carries that payload.\nAC:L - check_leaf_item() had no BTRFS_ROOT_REF_KEY/BTRFS_ROOT_BACKREF_KEY case, so btrfs_check_leaf() accepted a ROOT_BACKREF whose item_size filled the leaf (~BTRFS_LEAF_DATA_SIZE). _btrfs_ioctl_get_subvol_info() then copied item_size-sizeof(struct btrfs_root_ref) into name[256] on every ioctl; the attacker fully controls that image.\nPR:L - btrfs_ioctl() dispatches BTRFS_IOC_GET_SUBVOL_INFO and BTRFS_IOC_INO_LOOKUP_USER with no capable() check. btrfs_fs_type has no FS_USERNS_MOUNT, so the severe case is an unprivileged session user whose USB/loop btrfs image is mounted by udisks2/polkit, then opens any fd in that subvolume and issues the ioctl.\nUI:N - The attacker crafts the ROOT_BACKREF, has that local image mounted, and themselves calls BTRFS_IOC_GET_SUBVOL_INFO (or BTRFS_IOC_INO_LOOKUP_USER, which copies the same item via btrfs_search_path_in_tree_user()) on their own fd. Automount of that local/removable image is not a separate victim action once AV is Local.\nS:U - The overflow is in the host kernel\u0027s kzalloc\u0027d btrfs_ioctl_get_subvol_info_args (and ino_lookup_user args) while parsing tree_root ROOT_BACKREF/ROOT_REF items. No KVM/Xen guest-to-host, IOMMU, or sandbox boundary is crossed.\nC:H - _btrfs_ioctl_get_subvol_info() and btrfs_search_path_in_tree_user() call read_extent_buffer() with a length taken from the on-disk item_size into name[BTRFS_VOL_NAME_MAX+1] (256 bytes). That out-of-bounds write of attacker-chosen leaf bytes into adjacent slab is a kernel-memory disclosure primitive.\nI:H - The same unbounded read_extent_buffer() into the 256-byte name[] of the kzalloc\u0027d ioctl args overwrites neighboring heap objects with attacker-controlled ROOT_BACKREF payload, which is sufficient for an arbitrary kernel write and control-flow hijacking.\nA:H - Copying a leaf-sized ROOT_BACKREF past btrfs_ioctl_get_subvol_info_args.name[256], or writing args-\u003ename[item_len]=\u0027\\0\u0027 in btrfs_search_path_in_tree_user() with that huge item_len, oopses or panics the kernel on the slab out-of-bounds access."
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-10-03T10:58:06.771Z",
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux"
},
"references": [
{
"url": "https://git.kernel.org/stable/c/1370badf6b823ce3cde39a65f46f9e5dc7b4bf43"
},
{
"url": "https://git.kernel.org/stable/c/ba6c4fc662853f6662e4db060cf88ee994053e21"
},
{
"url": "https://git.kernel.org/stable/c/9154542070ca7eadb3c764a882f39a127677854b"
},
{
"url": "https://git.kernel.org/stable/c/74f577c722c99248d804eca18e7de7c5e47549d7"
},
{
"url": "https://git.kernel.org/stable/c/0af37c217edf15fa21dac1c40822086df356c6bb"
}
],
"title": "btrfs: tree-checker: validate names in ROOT_REF and ROOT_BACKREF",
"x_generator": {
"engine": "bippy-1.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"assignerShortName": "Linux",
"cveId": "CVE-2026-97415",
"datePublished": "2026-09-24T16:03:22.780Z",
"dateReserved": "2026-09-24T14:53:16.867Z",
"dateUpdated": "2026-10-03T10:58:06.771Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"vulnerability-lookup:meta": {
"epss": {
"cve": "CVE-2026-97415",
"date": "2026-11-11",
"epss": "0.00131",
"percentile": "0.02777"
},
"microsoft_vex": {
"current_release_date": "2026-10-22T01:11:40.000Z",
"cve": "CVE-2026-97415",
"id": "msrc_CVE-2026-97415",
"initial_release_date": "2026-09-28T00:30:52.000Z",
"product_status:fixed": "1",
"product_status:known_affected": "1",
"product_status:under_investigation": "1",
"source": "Microsoft CSAF VEX",
"status": "final",
"title": "btrfs: tree-checker: validate names in ROOT_REF and ROOT_BACKREF",
"url": "https://msrc.microsoft.com/csaf/vex/2026/msrc_cve-2026-97415.json",
"version": "4"
},
"nvd": {
"cve": {
"affected": [
{
"affectedData": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"fs/btrfs/ioctl.c",
"fs/btrfs/tree-checker.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "1370badf6b823ce3cde39a65f46f9e5dc7b4bf43",
"status": "affected",
"version": "b64ec075bded2b30bcd90af5aa5256d2237c885d",
"versionType": "git"
},
{
"lessThan": "ba6c4fc662853f6662e4db060cf88ee994053e21",
"status": "affected",
"version": "b64ec075bded2b30bcd90af5aa5256d2237c885d",
"versionType": "git"
},
{
"lessThan": "9154542070ca7eadb3c764a882f39a127677854b",
"status": "affected",
"version": "b64ec075bded2b30bcd90af5aa5256d2237c885d",
"versionType": "git"
},
{
"lessThan": "74f577c722c99248d804eca18e7de7c5e47549d7",
"status": "affected",
"version": "b64ec075bded2b30bcd90af5aa5256d2237c885d",
"versionType": "git"
},
{
"lessThan": "0af37c217edf15fa21dac1c40822086df356c6bb",
"status": "affected",
"version": "b64ec075bded2b30bcd90af5aa5256d2237c885d",
"versionType": "git"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"fs/btrfs/ioctl.c",
"fs/btrfs/tree-checker.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "4.18"
},
{
"lessThan": "4.18",
"status": "unaffected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.1.*",
"status": "unaffected",
"version": "6.1.189",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.6.*",
"status": "unaffected",
"version": "6.6.158",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.12.*",
"status": "unaffected",
"version": "6.12.111",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.18.*",
"status": "unaffected",
"version": "6.18.53",
"versionType": "semver"
},
{
"lessThanOrEqual": "*",
"status": "unaffected",
"version": "7.2",
"versionType": "original_commit_for_fix"
}
]
}
],
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
}
],
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nbtrfs: tree-checker: validate names in ROOT_REF and ROOT_BACKREF\n\nROOT_REF and ROOT_BACKREF items contain a struct btrfs_root_ref followed\nby the subvolume name. Several readers assume that this layout is already\nvalid and then use the on-disk name length directly. A corrupted item can\ntherefore make those readers address bytes outside the item, and\nBTRFS_IOC_GET_SUBVOL_INFO can copy too many bytes into its fixed-size UAPI\nname buffer.\n\nValidate ROOT_REF and ROOT_BACKREF items in tree-checker before any reader\nuses them. Reject records that do not contain a non-empty name, whose\nname_len does not exactly describe the remaining item payload, or whose\nname exceeds BTRFS_NAME_LEN.\n\nFor BTRFS_IOC_GET_SUBVOL_INFO, copy only the validated on-disk name_len\ninstead of deriving the copy length from the item size. The ioctl result is\nzeroed when allocated. That leaves the existing trailing zero byte\nuntouched."
}
],
"id": "CVE-2026-97415",
"lastModified": "2026-10-03T11:17:53.457",
"metrics": {
"cvssMetricV31": [
{
"cvssData": {
"attackComplexity": "LOW",
"attackVector": "LOCAL",
"availabilityImpact": "HIGH",
"baseScore": 7.8,
"baseSeverity": "HIGH",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "LOW",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
"version": "3.1"
},
"exploitabilityScore": 1.8,
"impactScore": 5.9,
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"type": "Secondary"
}
]
},
"published": "2026-09-24T17:17:19.223",
"references": [
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/0af37c217edf15fa21dac1c40822086df356c6bb"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/1370badf6b823ce3cde39a65f46f9e5dc7b4bf43"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/74f577c722c99248d804eca18e7de7c5e47549d7"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/9154542070ca7eadb3c764a882f39a127677854b"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/ba6c4fc662853f6662e4db060cf88ee994053e21"
}
],
"sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"vulnStatus": "Received"
}
},
"redhat_vex": {
"aggregate_severity": "Moderate",
"current_release_date": "2026-11-06T02:18:21+00:00",
"cve": "CVE-2026-97415",
"id": "CVE-2026-97415",
"initial_release_date": "2026-09-24T00:00:00+00:00",
"product_status:known_affected": "43",
"product_status:known_not_affected": "157",
"source": "Red Hat CSAF VEX",
"status": "final",
"title": "kernel: btrfs: tree-checker: validate names in ROOT_REF and ROOT_BACKREF",
"url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-97415.json",
"version": "3"
}
}
}
Drag nodes to arrange them. Double-click a related vulnerability to open it, or a source to visit its link. The Physics button on the left tunes the layout and the simulation; the legend at the bottom left hides or shows nodes by kind and by sighting type.
Sightings
| Author | Source | Type | Date | Other |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
Vulnerability timeline
Sightings and recorded dates, grouped by day · UTC
How durations are calculated
Following the VTEM framework (Black Hat USA 2015), time to patch starts when the vendor or a coordinator was informed, total time to patch at discovery, and disclosure to patch at public disclosure; vendor response time runs from the report to its acknowledgement. Time to exploit and time unpatched start at the earliest discovery or report, falling back to public disclosure. Unpatched time ends at the first recorded patch, or the calculation time when no patch is recorded. Exploitation to patch shows the interval between those two events; a published proof of concept is a public exploit, not exploitation.
Each result shows its source dates. A negative interval means the end event came first; when date-only inputs leave the order open, the result says so. Date-only inputs are approximate. The earliest evidence wins: KEV report dates and sightings are labelled as such. Records describing another vulnerability are listed but never calculated from, and a PoC alone does not establish exploitation. Missing patch evidence does not prove that no patch exists. Filters below change the event list only.
Loading timeline…
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.
Browse all ATT&CK techniques and the vulnerabilities related to each.
Related by attack behaviour
Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.