CVE-2026-46268 Overview
CVE-2026-46268 is a Linux kernel issue in the PCI Peer-to-Peer DMA (P2PDMA) subsystem. The flaw resides in the p2pmem_alloc_mmap() function inside drivers/pci/p2pdma.c. A prior commit (b7e282378773) changed the initial page refcount of p2pdma pages from one to zero, but the p2pmem_alloc_mmap() assertion still expected a non-zero refcount. When CONFIG_DEBUG_VM is enabled, the kernel triggers a VM_WARN_ON_ONCE_PAGE warning at runtime. The condition does not represent memory corruption but a stale invariant in a debug assertion.
Critical Impact
The mismatched assertion produces kernel warnings on systems with CONFIG_DEBUG_VM enabled, polluting logs and potentially masking real issues during P2PDMA memory mapping.
Affected Products
- Linux kernel versions containing commit b7e282378773 prior to the fix
- Builds with CONFIG_DEBUG_VM enabled using PCI P2PDMA
- Systems leveraging p2pmem_alloc_mmap() for peer-to-peer DMA memory mapping
Discovery Timeline
- 2026-06-03 - CVE-2026-46268 published to NVD
- 2026-06-03 - Last updated in NVD database
Technical Details for CVE-2026-46268
Vulnerability Analysis
The defect lives in drivers/pci/p2pdma.c at the p2pmem_alloc_mmap() function, specifically around line 240. The function uses the assertion VM_WARN_ON_ONCE_PAGE(!page_ref_count(page)) to validate that an allocated page holds a non-zero reference count. Earlier refactoring through commit b7e282378773 intentionally changed p2pdma page initialization so the initial reference count is zero rather than one. The assertion was not updated to reflect this new invariant, causing the warning to fire on every mmap allocation when debug instrumentation is enabled. The kernel dump reports refcount:0 mapcount:0 with reserved flags, confirming the page state is valid but the check is stale.
Root Cause
The root cause is an inconsistent invariant between two parts of the P2PDMA subsystem. Commit b7e282378773 modified the page lifecycle for p2pdma pages so newly allocated pages begin with a refcount of zero. The matching assertion inside p2pmem_alloc_mmap() continued to enforce the legacy contract that the refcount must be non-zero. The fix replaces the negation with page_ref_count(page) as the assertion condition, aligning the check with the new initialization semantics.
Attack Vector
This issue is a kernel logic defect surfaced only when CONFIG_DEBUG_VM is set. It does not expose a remote or local privilege escalation path and there is no public exploit. Impact is limited to noisy WARNING messages in dmesg and kernel logs, which can complicate triage of unrelated kernel issues. No CWE has been assigned and no CVSS score is available. The vulnerability manifests during normal P2PDMA mmap operations on affected debug builds. Refer to the upstream patches for code-level details.
Detection Methods for CVE-2026-46268
Indicators of Compromise
- Kernel log entries containing VM_WARN_ON_ONCE_PAGE(!page_ref_count(page)) originating from drivers/pci/p2pdma.c
- Warning traces referencing p2pmem_alloc_mmap+0x83a/0xa60
- Page dumps showing refcount:0 mapcount:0 with the reserved flag during P2PDMA usage
Detection Strategies
- Inspect dmesg and /var/log/kern.log for the WARNING: CPU: ... at drivers/pci/p2pdma.c:240 signature
- Compare running kernel version and commit history against the upstream fix commits 9b69243983fb, cb500023a752, and eb9aa9f80104
- Check kernel build configuration for CONFIG_DEBUG_VM=y combined with active P2PDMA workloads
Monitoring Recommendations
- Aggregate kernel warnings into a centralized log pipeline and alert on p2pdma source references
- Track kernel version drift across fleet hosts that use NVMe-oF, GPUDirect, or other P2PDMA-dependent workloads
- Correlate warning bursts with workload changes to distinguish this issue from genuine memory faults
How to Mitigate CVE-2026-46268
Immediate Actions Required
- Apply the upstream stable kernel patches referenced by commits 9b69243983fb, cb500023a752, and eb9aa9f80104
- On non-debug production kernels, confirm CONFIG_DEBUG_VM is disabled to avoid spurious warnings until patching completes
- Audit kernel versions across systems using PCI P2PDMA features and prioritize patching where the warning is observed
Patch Information
The fix replaces the inverted assertion in p2pmem_alloc_mmap() so it uses page_ref_count(page) directly, aligning with the zero-initial-refcount semantics introduced by commit b7e282378773. The patches are available through the upstream kernel stable tree:
Distribution vendors typically backport these stable-tree changes; verify availability for your specific kernel branch.
Workarounds
- Disable CONFIG_DEBUG_VM in custom kernel builds where the warning is disruptive and debug instrumentation is not required
- Avoid relying on P2PDMA mmap allocations on debug kernels until the fix is applied
- Suppress or filter the specific warning string in log monitoring rules as a temporary measure, while ensuring genuine VM warnings remain visible
# Verify whether the running kernel contains the fix
zgrep -E 'p2pmem_alloc_mmap|page_ref_count' /proc/config.gz
grep CONFIG_DEBUG_VM /boot/config-$(uname -r)
dmesg | grep -i 'p2pdma'
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.


