CVE-2026-89493: ocfs2: validate rl_used against rl_count in refcount block validator
Noroxi assessment
Priority: Monitor (action score 35/100)
- The sources we track (CISA KEV, Exploit-DB, Metasploit, Nuclei, GitHub) show no public exploit code or exploitation in the wild.
- Probability of exploitation in the next 30 days: 0.65% (FIRST EPSS); higher than 51.6% of all records.
- Anyone who can reach it over the internet can trigger it. A low-privileged account is enough. No user action is required. No special conditions are required; it is repeatable.
- Fixed version: Linux Linux 04ead708e13ddcb9c39319cbe02a18cef99cb823, 0761d2c9494424469a0d30a9da3496ca010b0b2d, 4ca62df6bc0708947b48da3f6a712ecb8e73929c.
- Mentioned 1 time in Turkish national cyber security advisories (siberguvenlik.gov.tr).
Low priority for now. Upgrade to Linux Linux 04ead708e13ddcb9c39319cbe02a18cef99cb823, 0761d2c9494424469a0d30a9da3496ca010b0b2d, 4ca62df6bc0708947b48da3f6a712ecb8e73929c or later.
Generated automatically from the record's data: CVSS (NVD and CNA), CISA KEV and SSVC, FIRST EPSS, exploit sources, fixed versions. How we calculate it
Primary sources: NVD · CVE.org · FIRST EPSS
In the Linux kernel, the following vulnerability has been resolved: ocfs2: validate rl_used against rl_count in refcount block validator ocfs2_find_refcount_rec_in_rl() walks the on-disk refcount record array with: for (; i < le16_to_cpu(rb->rf_records.rl_used); i++) { rec = &rb->rf_records.rl_recs[i]; ... rl_recs[] lives in a single metadata block (4096 bytes on the common configuration), so its real capacity is fixed by ocfs2_refcount_recs_per_rb(sb) (247 records for a 4K block with the 16-byte ocfs2_refcount_rec). rl_used and rl_count are both read directly off disk by ocfs2_validate_refcount_block() and are never checked against that capacity, nor against each other, before any refcount/reflink/CoW operation walks the array. A crafted (or corrupted) refcount block with rl_used == 0xffff makes the loop above walk far past the end of the block, dereferencing rl_recs[i] for i up to 65534. The resulting index is then handed to the sibling ocfs2_insert_refcount_rec(), whose insert-shift does: if (index < le16_to_cpu(rf_list->rl_used)) memmove(&rf_list->rl_recs[index + 1], &rf_list->rl_recs[index], (le16_to_cpu(rf_list->rl_used) - index) * sizeof(struct ocfs2_refcount_rec)); i.e. a memmove() of up to (0xffff - index) * 16 bytes (~1 MiB) from an offset already past the block. This is reachable from an ordinary reflink (FICLONE) against a crafted/corrupted ocfs2 image: attaching an extent whose cpos sorts past every real record in the leaf forces the lookup to run off the end instead of returning early on a match. The attacker model is local: CAP_SYS_ADMIN mounting a crafted or corrupted ocfs2 image, or a raw write to the block device backing an already-mounted ocfs2 filesystem. ocfs2_validate_refcount_block() already validates the block's ECC, signature, rf_blkno and rf_fs_generation, but never rl_count/rl_used against the block's actual on-disk capacity. This is the same class of gap that ocfs2_validate_extent_block() (fs/ocfs2/alloc.c) already closes for the sibling extent-list header, which checks both the record capacity and the "used" bound before any code walks h_list.l_recs[]: if (le16_to_cpu(eb->h_list.l_count) != ocfs2_extent_recs_per_eb(sb)) { rc = ocfs2_error(...); goto bail; } if (le16_to_cpu(eb->h_list.l_next_free_rec) > le16_to_cpu(eb->h_list.l_count)) { rc = ocfs2_error(...); goto bail; } Add the equivalent pair of checks to ocfs2_validate_refcount_block(): reject a refcount block whose rl_count does not match the fixed per-block capacity returned by ocfs2_refcount_recs_per_rb(), and reject rl_used > rl_count. Both checks are skipped when OCFS2_REFCOUNT_TREE_FL is set, because in that case the same union bytes hold an ocfs2_extent_list (rf_list), not the refcount record list (rf_records) -- that layout is already validated separately by ocfs2_validate_extent_block() when the referenced extent block is read. This mirrors the existing "!(rb->rf_flags & OCFS2_REFCOUNT_TREE_FL)" guard used elsewhere in this file (e.g. ocfs2_get_refcount_rec()) to decide whether rf_records or rf_list is the live member of the union. With this in place, a forged rl_used/rl_count is caught at block validation time (ocfs2_error()), consistent with every other corruption check in this function, instead of driving an out-of-bounds read in ocfs2_find_refcount_rec_in_rl() and a subsequent out-of-bounds memmove() in ocfs2_insert_refcount_rec(). Verified against a crafted image on a v6.19 KASAN (KASAN_GENERIC) build: replaying the same reflink (FICLONE) reliably hit a KASAN report in __ocfs2_increase_refcount()/ocfs2_insert_refcount_rec() before this patch, and triggers no report once ocfs2_validate_refcount_block() rejects the forged rl_used/rl_count.
- Published
- Sep 11, 2026
- Updated
- Oct 19, 2026
- EPSS
- 0.6% · 51th percentile
- CWE
- —
Report tools
Action score
35
Low priority for now.
- CVSS
- 35 / 40 · 8.8 / 10
- CISA KEV
- 0 / 30 · Not listed
- EPSS
- 0 / 30 · 0.6%
CNA vs NVD score
- NVD
- —
- CNA · Linux
- 8.8
- NVD has not scored this yet; the score shown is the CNA’s.
The score given by the assigning authority versus NVD’s independent score. A gap means the severity is contested.
Get told when this record changes
- Not in KEV: no record of exploitation in the wild
- No public exploit code on record
- A fix has been released
If any of these changes, we'll tell you in the daily email digest.
Is your version affected? Check itNoroxi analysis
What does it mean in your environment?
The assessment above is generated automatically from the record's data; it doesn't know your environment. Our team verifies on your systems whether this vulnerability is actually exploitable and which mitigation is enough.
We use this product, ask for helpAffected systems
Is your version affected?
Pick the product and type the version you run. It's compared with this record's version ranges in your browser; the version isn't sent anywhere.
—
Versions reported by the vendor
Affected version ranges reported by the assigning authority (Linux). Independent of NVD's CPE analysis and usually ahead of it.
Linux Linux
- 2.6.32affected
- f2c870e3b12e38da6d9b5b17c4c8ae56a0ed68e4 and later · before f882e9e32d017a6569b2996c63ba3864717788e6affected · git
- f2c870e3b12e38da6d9b5b17c4c8ae56a0ed68e4 and later · before 5593b63028cb43a6cda75a65ce1db95f00ea6857affected · git
- f2c870e3b12e38da6d9b5b17c4c8ae56a0ed68e4 and later · before c8b02f4ee91e757b3fff556c7168b24b7ae55132affected · git
- f2c870e3b12e38da6d9b5b17c4c8ae56a0ed68e4 and later · before 97584e93fc49a2d59252ac60467e9279f11b1b5baffected · git
- f2c870e3b12e38da6d9b5b17c4c8ae56a0ed68e4 and later · before af56e90cb546cb0c47bef059335365283f61d6a4affected · git
- f2c870e3b12e38da6d9b5b17c4c8ae56a0ed68e4 and later · before 0761d2c9494424469a0d30a9da3496ca010b0b2daffected · git
- f2c870e3b12e38da6d9b5b17c4c8ae56a0ed68e4 and later · before 04ead708e13ddcb9c39319cbe02a18cef99cb823affected · git
- f2c870e3b12e38da6d9b5b17c4c8ae56a0ed68e4 and later · before 4ca62df6bc0708947b48da3f6a712ecb8e73929caffected · git
- before 2.6.32not affected · semver
Package-level exposure
OSV and GitHub Advisory data: ecosystem, package and range. SBOM matching uses this table.
| Ecosystem | Package | Affected range | Fix |
|---|---|---|---|
| Debian:12 | linux | before 6.1.190-1 | 6.1.190-1 |
| Debian:12 | linux-6.12 | before 6.12.111-1~deb12u1 | 6.12.111-1~deb12u1 |
| Debian:13 | linux | before 6.12.111-1 | 6.12.111-1 |
| Debian:14 | linux | before 7.2.6-1 | 7.2.6-1 |
Same product
linux: all recordsOther highest-scoring records for the same primary product.
- CVE-2026-74705udp: fix potential use-after-free in tunnel segmentation40Plan
- CVE-2026-74612veth: fix skb length accounting after XDP frag adjustment40Plan
- CVE-2026-74475vxlan: use neigh_ha_snapshot() in route_shortcircuit()40Plan
Published before and after this one in the same product
- ← EarlierCVE-2026-89491Sep 11, 2026 · ocfs2: cluster: don't sleep while holding o2hb_live_lock in o2hb_region_pin()0Monitor
- ← EarlierCVE-2026-89492Sep 11, 2026 · ocfs2: validate directory-index entry counts when reading metadata39Monitor
- Later →CVE-2026-89494Sep 11, 2026 · ocfs2: validate lengths in dlm_mig_lockres_handler39Monitor
Remediation
Which version to upgrade to
Fix versions compiled from the vendor, package registries and Microsoft. Verify the vendor's note before upgrading.
| Product / package | Fixed version | Source |
|---|---|---|
| Linux Linux | 04ead708e13ddcb9c39319cbe02a18cef99cb823 | Vendor (CNA) |
| Linux Linux | 0761d2c9494424469a0d30a9da3496ca010b0b2d | Vendor (CNA) |
| Linux Linux | 4ca62df6bc0708947b48da3f6a712ecb8e73929c | Vendor (CNA) |
| Linux Linux | 5593b63028cb43a6cda75a65ce1db95f00ea6857 | Vendor (CNA) |
| Linux Linux | 97584e93fc49a2d59252ac60467e9279f11b1b5b | Vendor (CNA) |
| Linux Linux | af56e90cb546cb0c47bef059335365283f61d6a4 | Vendor (CNA) |
| Linux Linux | c8b02f4ee91e757b3fff556c7168b24b7ae55132 | Vendor (CNA) |
| Linux Linux | f882e9e32d017a6569b2996c63ba3864717788e6 | Vendor (CNA) |
| debian:linux | 6.1.190-1 · Debian:12 | Package registry (OSV) |
| debian:linux | 6.12.111-1 · Debian:13 | Package registry (OSV) |
| debian:linux-6.12 | 6.12.111-1~deb12u1 · Debian:12 | Package registry (OSV) |
Exploit status
No known public exploit
No public exploit has been observed yet. That doesn't mean you're safe, only that the bar is a little higher.
Research context
For pentesters and researchers: attack profile, score disagreement, timeline, patch commits, credits, variant and chain candidates, bug bounty scope. All derived from existing data; no exploit code.
Timeline
From publication to today: proof of concept, Metasploit module, CISA KEV and fix record. Dates are as reported by the sources.
No dated events beyond publication.
FIRST EPSS daily score; only changes of 0.01 or more are recorded (step chart).
Patch and commit links
Commit, PR and diff links among the references. A starting point for patch-diffing and variant hunting; fixes, not exploits.
No commit or PR link among the references.
Credits
All researchersFinders, reporters and analysts named in the CNA record. Click a name for that researcher’s other records.
No credits in the CNA record.
Variant candidates
Same product, same weakness class, within 18 months. If the patch missed the root cause, the sibling bug is here.
No nightly-computed relations.
Chain candidates
An authentication bypass and a privilege-requiring bug in the same product, published close together: combined they may become an unauthenticated path.
—
Bug bounty scope
No known public program.
Source: bounty-targets-data (public HackerOne, Bugcrowd, Intigriti, YesWeHack listings).
National notice (Türkiye Cybersecurity Directorate / USOM)
Official security notices citing this record; remediation advice is on the agency's page.
- TR-26-1085 · Sep 14, 2026(Linux Kernel Güvenlik Bildirimi)
Technical details
Attack conditions
- Anyone who can reach it over the internet can trigger it.
- A low-privileged account is enough.
- No user action is required.
- No special conditions are required; it is repeatable.
If successful
- Confidentiality
- high · data can be read
- Integrity
- high · data or configuration can be modified
- Availability
- high · the service can be disrupted
- Attack vector
- Network
- Attack complexity
- Low
- Privileges required
- Low
- User interaction
- None
- Scope
- Unchanged
- Confidentiality impact
- High
- Integrity impact
- High
- Availability impact
- High
Weakness class (CWE)
—
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
nvd-secondary
Attack context
MITRE CAPEC attack patterns and ATT&CK techniques for this weakness class (CWE). A starting point for detection rules and threat hunting.
MITRE has no CAPEC/ATT&CK mapping for this CWE.
Change log
- Fix✗ → ✓
For records you follow, these changes also arrive as notifications. →
References
Show all references (7 more)Show less
- git.kernel.org/stable/c/0761d2c9494424469a0d30a9da3496ca010b0b2d
- git.kernel.org/stable/c/4ca62df6bc0708947b48da3f6a712ecb8e73929c
- git.kernel.org/stable/c/5593b63028cb43a6cda75a65ce1db95f00ea6857
- git.kernel.org/stable/c/97584e93fc49a2d59252ac60467e9279f11b1b5b
- git.kernel.org/stable/c/af56e90cb546cb0c47bef059335365283f61d6a4
- git.kernel.org/stable/c/c8b02f4ee91e757b3fff556c7168b24b7ae55132
- git.kernel.org/stable/c/f882e9e32d017a6569b2996c63ba3864717788e6
Vendor advisories and official records. Exploit/PoC links are deliberately left out.