Goal Reached Thanks to every supporter — we hit 100%!

Goal: 1000 CNY · Raised: 1000 CNY

100.0%

CVE-2026-23077— mm/vma: fix anon_vma UAF on mremap() faulted, unfaulted merge

CVSS 7.8 · High EPSS 0.02% · P5
Get alerts for future matching vulnerabilitiesLog in to subscribe

I. Basic Information for CVE-2026-23077

Vulnerability Information

Have questions about the vulnerability? See if Shenlong's analysis helps!
View Shenlong Deep Dive ↗

Although we use advanced large model technology, its output may still contain inaccurate or outdated information.Shenlong tries to ensure data accuracy, but please verify and judge based on the actual situation.

Vulnerability Title
mm/vma: fix anon_vma UAF on mremap() faulted, unfaulted merge
Source: NVD (National Vulnerability Database)
Vulnerability Description
In the Linux kernel, the following vulnerability has been resolved: mm/vma: fix anon_vma UAF on mremap() faulted, unfaulted merge Patch series "mm/vma: fix anon_vma UAF on mremap() faulted, unfaulted merge", v2. Commit 879bca0a2c4f ("mm/vma: fix incorrectly disallowed anonymous VMA merges") introduced the ability to merge previously unavailable VMA merge scenarios. However, it is handling merges incorrectly when it comes to mremap() of a faulted VMA adjacent to an unfaulted VMA. The issues arise in three cases: 1. Previous VMA unfaulted: copied -----| v |-----------|.............| | unfaulted |(faulted VMA)| |-----------|.............| prev 2. Next VMA unfaulted: copied -----| v |.............|-----------| |(faulted VMA)| unfaulted | |.............|-----------| next 3. Both adjacent VMAs unfaulted: copied -----| v |-----------|.............|-----------| | unfaulted |(faulted VMA)| unfaulted | |-----------|.............|-----------| prev next This series fixes each of these cases, and introduces self tests to assert that the issues are corrected. I also test a further case which was already handled, to assert that my changes continues to correctly handle it: 4. prev unfaulted, next faulted: copied -----| v |-----------|.............|-----------| | unfaulted |(faulted VMA)| faulted | |-----------|.............|-----------| prev next This bug was discovered via a syzbot report, linked to in the first patch in the series, I confirmed that this series fixes the bug. I also discovered that we are failing to check that the faulted VMA was not forked when merging a copied VMA in cases 1-3 above, an issue this series also addresses. I also added self tests to assert that this is resolved (and confirmed that the tests failed prior to this). I also cleaned up vma_expand() as part of this work, renamed vma_had_uncowed_parents() to vma_is_fork_child() as the previous name was unduly confusing, and simplified the comments around this function. This patch (of 4): Commit 879bca0a2c4f ("mm/vma: fix incorrectly disallowed anonymous VMA merges") introduced the ability to merge previously unavailable VMA merge scenarios. The key piece of logic introduced was the ability to merge a faulted VMA immediately next to an unfaulted VMA, which relies upon dup_anon_vma() to correctly handle anon_vma state. In the case of the merge of an existing VMA (that is changing properties of a VMA and then merging if those properties are shared by adjacent VMAs), dup_anon_vma() is invoked correctly. However in the case of the merge of a new VMA, a corner case peculiar to mremap() was missed. The issue is that vma_expand() only performs dup_anon_vma() if the target (the VMA that will ultimately become the merged VMA): is not the next VMA, i.e. the one that appears after the range in which the new VMA is to be established. A key insight here is that in all other cases other than mremap(), a new VMA merge either expands an existing VMA, meaning that the target VMA will be that VMA, or would have anon_vma be NULL. Specifically: * __mmap_region() - no anon_vma in place, initial mapping. * do_brk_flags() - expanding an existing VMA. * vma_merge_extend() - expanding an existing VMA. * relocate_vma_down() - no anon_vma in place, initial mapping. In addition, we are in the unique situation of needing to duplicate anon_vma state from a VMA that is neither the previous or next VMA being merged with. dup_anon_vma() deals exclusively with the target=unfaulted, src=faulted case. This leaves four possibilities, in each case where the copied VMA is faulted: 1. Previous VMA unfaulted: copied -----| ---truncated---
Source: NVD (National Vulnerability Database)
CVSS Information
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Source: NVD (National Vulnerability Database)
Vulnerability Type
N/A
Source: NVD (National Vulnerability Database)
Vulnerability Title
Linux kernel 安全漏洞
Source: CNNVD (China National Vulnerability Database)
Vulnerability Description
Linux kernel是美国Linux基金会的开源操作系统Linux所使用的内核。 Linux kernel存在安全漏洞,该漏洞源于合并处理不当,可能导致释放后重用。
Source: CNNVD (China National Vulnerability Database)
CVSS Information
N/A
Source: CNNVD (China National Vulnerability Database)
Vulnerability Type
N/A
Source: CNNVD (China National Vulnerability Database)

Affected Products

VendorProductAffected VersionsCPESubscribe
LinuxLinux 879bca0a2c4f40b08d09a95a2a0c3c6513060b5c ~ a4d9dbfc1bab16e25fefd34b5e537a46bed8fc96 -
LinuxLinux 6.16 -

II. Public POCs for CVE-2026-23077

#POC DescriptionSource LinkShenlong Link
AI-Generated POCPremium

No public POC found.

Login to generate AI POC

III. Intelligence Information for CVE-2026-23077

登录查看更多情报信息。

Same Patch Batch · Linux · 2026-02-04 · 79 CVEs total

CVE-2026-230988.8 HIGHnetrom: fix double-free in nr_route_frame()
CVE-2026-230667.8 HIGHrxrpc: Fix recvmsg() unconditional requeue
CVE-2026-231057.8 HIGHnet/sched: qfq: Use cl_is_active to determine whether class is active in qfq_rm_from_ag
CVE-2026-231037.8 HIGHipvlan: Make the addrs_lock be per port
CVE-2026-230747.8 HIGHnet/sched: Enforce that teql can only be used as root qdisc
CVE-2026-230957.5 HIGHgue: Fix skb memleak with inner IP protocol 0.
CVE-2026-23060crypto: authencesn - reject too-short AAD (assoclen<8) to match ESP/ESN spec
CVE-2026-23053NFS: Fix a deadlock involving nfs_release_folio()
CVE-2026-23063uacce: ensure safe queue release with state management
CVE-2026-23064net/sched: act_ife: avoid possible NULL deref
CVE-2026-23065platform/x86/amd: Fix memory leak in wbrf_record()
CVE-2026-23067iommu/io-pgtable-arm: fix size_t signedness bug in unmap path
CVE-2026-23062platform/x86: hp-bioscfg: Fix kernel panic in GET_INSTANCE_ID macro
CVE-2026-23057vsock/virtio: Coalesce only linear skb
CVE-2026-23056uacce: implement mremap in uacce_vm_ops to return -EPERM
CVE-2025-71199iio: adc: at91-sama5d2_adc: Fix potential use-after-free in sama5d2_adc driver
CVE-2025-71198iio: imu: st_lsm6dsx: fix iio_chan_spec for sensors without event detection
CVE-2025-71197w1: therm: Fix off-by-one buffer overflow in alarms_store
CVE-2026-23055i2c: riic: Move suspend handling to NOIRQ phase
CVE-2026-23051drm/amdgpu: fix drm panic null pointer when driver not support atomic

Showing top 20 of 79 CVEs. View all on vendor page &rarr; →

IV. Related Vulnerabilities

V. Comments for CVE-2026-23077

No comments yet


Leave a comment