CVE-2026-98214
selinux: recheck intermediate backing files on mprotect()
No known exploitation. EPSS puts it in the 11th percentile. Fixed versions are out.
What to do
Find your product and version, then upgrade to the build on the right.
- LinuxAffected: ≥ bc6c380c1159de52a252ed11f19a42c47f60a735, < 4d50ebe5a27724e020747ffd61a051dec67cb8ecUpgrade to: 4d50ebe5a27724e020747ffd61a051dec67cb8ecAffected: ≥ 8bacd09f12c27710228562e4d13163e58c5f4a45, < 89376fbfdcc1a728e1775f98752cdd90b0930a00Upgrade to: 89376fbfdcc1a728e1775f98752cdd90b0930a00Affected: ≥ d844702198395d3f80222777030f69db6be6b709, < d127c7e1f3e1231d8ac8b2738e3f00bea12afe74Upgrade to: d127c7e1f3e1231d8ac8b2738e3f00bea12afe74Affected: ≥ 82544d36b1729153c8aeb179e84750f0c085d3b1, < c2bbb905af2293549651b614a52ad91e0b462b60Upgrade to: c2bbb905af2293549651b614a52ad91e0b462b60 + 6 more branchesStated by: CVE record
Versions as the sources state them. Full version matrix after sign-in
What it is
From the CVE record
In the Linux kernel, the following vulnerability has been resolved: selinux: recheck intermediate backing files on mprotect() mprotect() can be used to bypass the SELinux checks that mmap() performs against the intermediate layers of a stacked filesystem. mmap() checks every backing layer as the request descends through the stack. mprotect() only has the lowest backing file in vma->vm_file, so it rechecks the top-level user and the lowest mounter, but skips the mounters of every layer in between. With two nested overlayfs mounts and a policy denying mounter_t -> middle_file_t:file { execute }, a direct mmap(PROT_EXEC) is denied: avc: denied { execute } for pid=71 comm="nested_exec" path="/payload" dev="overlay" ino=9 scontext=user_u:base_r:mounter_t tcontext=user_u:object_r:middle_file_t tclass=file permissive=0 while mmap(PROT_NONE) followed by mprotect(PROT_EXEC) succeeds. Preserve each intermediate path, mounter SID and file-description SID in the backing-file security blob, copying the saved entries when another backing layer is opened. Allocate the array only for nested backing files, and release it and the path references in the backing_file_free hook. During mprotect(), recheck fd { use } and the requested inode permissions for every saved mounter, and include the intermediate layers in the execmod checks. Policy for nested stacking may then need to grant intermediate mounters what a direct mmap() already requires, and execmod on intermediate labels for binaries using text relocations. Tested on arm64 QEMU with a small BusyBox initramfs and a purpose-built SELinux policy, on a mainline tree containing commit f2381b546e7e ("fs: fix user path of nested backing files"). [PM: subject tweak]
In plain language
No plain-language summary for this CVE yet.
Exploitation
Where each signal puts this CVE on the scale from published to confirmed exploited.
- CISA KEV
Not in the catalog. CISA has not confirmed exploitation.
- Public exploits
No public exploit or proof of concept found in the sources we track.
- EPSS
0.2% chance of exploitation activity in the next 30 days, which ranks it in the 11th percentile of scored CVEs.
Exploit Prediction Scoring System, FIRST.org. A probability, not a confirmation.
Lifecycle
2 events over 0 days, from the signal feeds we watch.
- Publishedrecord updated
Affected products
Sources
References in the record
- git.kernel.org/stable/c/4d50ebe5a27724e020747ffd61a051dec67cb8ec
- git.kernel.org/stable/c/89376fbfdcc1a728e1775f98752cdd90b0930a00
- git.kernel.org/stable/c/d127c7e1f3e1231d8ac8b2738e3f00bea12afe74
And 2 more references. See all after sign-in
In the news
Watch the software you run.
My Stack ranks new CVEs for your products by real-world exploitation, so the next serious one reaches you without reading every advisory.
We'll flag the next CVE, public exploit or patch for Linux, not every advisory.
A free account adds
- The full version matrix and every affected product
- Exploit links, proofs of concept and Metasploit modules
- Email alerts for the products you watch
- The same data over REST API, MCP and CLI