In the Linux kernel, the following vulnerability has been resolved:
x86/mm/pat: fix VM_PAT handling in COW mappings
PAT handling won't do the right thing in COW mappings: the first PTE (or, in fact, all PTEs) can be replaced during write faults to point at anon folios. Reliably recovering the correct PFN and cachemode using follow_phys() from PTEs will not work in COW mappings.
Using follow_phys(), we might just get the address+protection of the anon folio (which is very wrong), or fail on swap/nonswap entries, failing follow_phys() and triggering a WARN_ON_ONCE() in untrack_pfn() and track_pfn_copy(), not properly calling free_pfn_range().
In free_pfn_range(), we either wouldn't call memtype_free() or would call it with the wrong range, possibly leaking memory.
To fix that, let's update follow_phys() to refuse returning anon folios, and fallback to using the stored PFN inside vma->vm_pgoff for COW mappings if we run into that.
We will now properly handle untrack_pfn() with COW mappings, where we don't need the cachemode. We'll have to fail fork()->track_pfn_copy() if the first page was replaced by an anon folio, though: we'd have to store the cachemode in the VMA to make this work, likely growing the VMA size.
For now, lets keep it simple and let track_pfn_copy() just fail in that case: it would have failed in the past with swap/nonswap entries already, and it would have done the wrong thing with anon folios.
Simple reproducer to trigger the WARN_ON_ONCE() in untrack_pfn():
<--- C reproducer ---> #include <stdio.h> #include <sys/mman.h> #include <unistd.h> #include <liburing.h>
int main(void) { struct io_uring_params p = {}; int ring_fd; size_t size; char *map;
ring_fd = io_uring_setup(1, &p); if (ring_fd < 0) { perror("io_uring_setup"); return 1; } size = p.sq_off.array + p.sq_entries * sizeof(unsigned);
/* Map the submission queue ring MAP_PRIVATE */ map = mmap(0, size, PROT_READ | PROT_WRITE, MAP_PRIVATE, ring_fd, IORING_OFF_SQ_RING); if (map == MAP_FAILED) { perror("mmap"); return 1; }
/* We have at least one page. Let's COW it. */ *map = 0; pause(); return 0; } <--- C reproducer --->
On a system with 16 GiB RAM and swap configured: # ./iouring & # memhog 16G # killall iouring [ 301.552930] ------------[ cut here ]------------ [ 301.553285] WARNING: CPU: 7 PID: 1402 at arch/x86/mm/pat/memtype.c:1060 untrack_pfn+0xf4/0x100 [ 301.553989] Modules linked in: binfmt_misc nft_fib_inet nft_fib_ipv4 nft_fib_ipv6 nft_fib nft_reject_g [ 301.558232] CPU: 7 PID: 1402 Comm: iouring Not tainted 6.7.5-100.fc38.x86_64 #1 [ 301.558772] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.16.3-0-ga6ed6b701f0a-prebu4 [ 301.559569] RIP: 0010:untrack_pfn+0xf4/0x100 [ 301.559893] Code: 75 c4 eb cf 48 8b 43 10 8b a8 e8 00 00 00 3b 6b 28 74 b8 48 8b 7b 30 e8 ea 1a f7 000 [ 301.561189] RSP: 0018:ffffba2c0377fab8 EFLAGS: 00010282 [ 301.561590] RAX: 00000000ffffffea RBX: ffff9208c8ce9cc0 RCX: 000000010455e047 [ 301.562105] RDX: 07fffffff0eb1e0a RSI: 0000000000000000 RDI: ffff9208c391d200 [ 301.562628] RBP: 0000000000000000 R08: ffffba2c0377fab8 R09: 0000000000000000 [ 301.563145] R10: ffff9208d2292d50 R11: 0000000000000002 R12: 00007fea890e0000 [ 301.563669] R13: 0000000000000000 R14: ffffba2c0377fc08 R15: 0000000000000000 [ 301.564186] FS: 0000000000000000(0000) GS:ffff920c2fbc0000(0000) knlGS:0000000000000000 [ 301.564773] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 301.565197] CR2: 00007fea88ee8a20 CR3: 00000001033a8000 CR4: 0000000000750ef0 [ 301.565725] PKRU: 55555554 [ 301.565944] Call Trace: [ 301.566148] <TASK> [ 301.566325] ? untrack_pfn+0xf4/0x100 [ 301.566618] ? __warn+0x81/0x130 [ 301.566876] ? untrack_pfn+0xf4/0x100 [ 3 ---truncated---
CVSS Details
- CVSS 3.1 Base Score: 5.5
- CVSS 3.1 Vector: (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Alma_linux | — | Upgrade kernel-debug-modulesUpgrade kernel-docUpgrade kernel-modulesUpgrade kernel-debug-develUpgrade kernel-modules-extraUpgrade kernel-rt-debug-modules-extraUpgrade kernel-headersUpgrade kernel-rtUpgrade kernel-debug-modules-extraUpgrade kernel-rt-debug-modulesUpgrade kernel-zfcpdump-develUpgrade kernel-zfcpdumpUpgrade kernel-zfcpdump-modulesUpgrade kernel-rt-modulesUpgrade kernel-rt-debug-kvmUpgrade kernel-rt-debug-develUpgrade kernel-rt-debugUpgrade kernel-debug-coreUpgrade kernel-coreUpgrade kernel-zfcpdump-modules-extraUpgrade kernel-tools-libsUpgrade kernel-rt-develUpgrade kernel-toolsUpgrade kernel-debugUpgrade kernel-tools-libs-develUpgrade kernel-rt-debug-coreUpgrade kernelUpgrade kernel-zfcpdump-coreUpgrade kernel-develUpgrade kernel-rt-modules-extraUpgrade kernel-rt-coreUpgrade bpftoolUpgrade perfUpgrade python3-perfUpgrade kernel-abi-stablelistsUpgrade kernel-rt-kvmUpgrade kernel-cross-headers | Sep 26, 2024 | May 19, 2024 |
| Debian | — | Upgrade linux | Jun 27, 2024 | May 19, 2024 |
| Huawei Euleros 2_0_sp10 | — | Upgrade kernelUpgrade kernel-tools-libsUpgrade kernel-toolsUpgrade kernel-abi-stablelistsUpgrade python3-perf | Oct 8, 2024 | May 19, 2024 |
| Huawei Euleros 2_0_sp11 | — | Upgrade kernel-tools-libsUpgrade bpftoolUpgrade python3-perfUpgrade kernel-toolsUpgrade kernel-abi-stablelistsUpgrade kernel | Oct 8, 2024 | May 19, 2024 |
| Huawei Euleros 2_0_sp12 | — | Upgrade bpftoolUpgrade kernelUpgrade kernel-tools-libsUpgrade kernel-toolsUpgrade kernel-abi-stablelistsUpgrade python3-perf | Oct 9, 2024 | May 19, 2024 |
| Huawei Euleros 2_0_sp9 | — | Upgrade kernel-toolsUpgrade kernel-tools-libsUpgrade kernelUpgrade python3-perf | Oct 8, 2024 | May 19, 2024 |
| Oracle_linux | — | Upgrade kernelUpgrade kernel-uek | Oct 16, 2024 | May 19, 2024 |
| Redhat_linux | — | No solution existsUpgrade kernel-rtUpgrade kernel | Sep 25, 2024 | May 19, 2024 |
| Rocky_linux | — | Upgrade python3-perfUpgrade perfUpgrade bpftoolUpgrade kernel-headersUpgrade kernel-tools-debuginfoUpgrade kernel-rt-develUpgrade kernelUpgrade kernel-modulesUpgrade kernel-rt-debugUpgrade kernel-rt-kvmUpgrade kernel-rt-debug-kvmUpgrade kernel-debuginfoUpgrade kernel-develUpgrade python3-perf-debuginfoUpgrade perf-debuginfoUpgrade kernel-rt-debug-develUpgrade kernel-debug-coreUpgrade kernel-debug-develUpgrade kernel-modules-extraUpgrade kernel-rt-coreUpgrade kernel-debugUpgrade kernel-rt-modules-extraUpgrade kernel-coreUpgrade kernel-cross-headersUpgrade kernel-rt-debuginfo-common-x86_64Upgrade kernel-rt-debuginfoUpgrade kernel-rt-modulesUpgrade kernel-rt-debug-modulesUpgrade kernel-rt-debug-coreUpgrade kernel-toolsUpgrade bpftool-debuginfoUpgrade kernel-debug-modulesUpgrade kernel-tools-libs-develUpgrade kernel-tools-libsUpgrade kernel-rt-debug-modules-extraUpgrade kernel-rt-debug-debuginfoUpgrade kernel-rtUpgrade kernel-debug-debuginfoUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-debug-modules-extra | Oct 2, 2024 | May 19, 2024 |
| Suse | — | Upgrade dtb-mediatekUpgrade kernel-docsUpgrade kernel-default-base-rebuildUpgrade kselftests-kmp-defaultUpgrade dtb-sprdUpgrade reiserfs-kmp-azureUpgrade ocfs2-kmp-azureUpgrade kernel-rtUpgrade kernel-devel-rtUpgrade dlm-kmp-azureUpgrade dlm-kmp-rtUpgrade dtb-nvidiaUpgrade dtb-xilinxUpgrade kernel-develUpgrade kernel-rt-develUpgrade kernel-rt-extraUpgrade kernel-defaultUpgrade ocfs2-kmp-defaultUpgrade cluster-md-kmp-rtUpgrade dtb-allwinnerUpgrade kernel-default-optionalUpgrade dtb-caviumUpgrade kernel-syms-azureUpgrade dtb-exynosUpgrade kernel-devel-azureUpgrade dtb-rockchipUpgrade kernel-64kb-extraUpgrade kernel-64kb-develUpgrade kernel-default-extraUpgrade kernel-azure-develUpgrade kernel-obs-qaUpgrade kernel-obs-buildUpgrade kernel-symsUpgrade kernel-rt-livepatchUpgrade kernel-default-vdsoUpgrade kernel-kvmsmallUpgrade kernel-azure-livepatch-develUpgrade cluster-md-kmp-64kbUpgrade kernel-sourceUpgrade dtb-apmUpgrade dtb-qcomUpgrade dtb-armUpgrade kernel-rt_debug-develUpgrade dtb-lgUpgrade dtb-amdUpgrade reiserfs-kmp-64kbUpgrade kernel-default-baseUpgrade kernel-rt-vdsoUpgrade kernel-azure-optionalUpgrade dtb-hisiliconUpgrade kernel-default-manUpgrade dlm-kmp-defaultUpgrade cluster-md-kmp-defaultUpgrade ocfs2-kmp-64kbUpgrade kernel-rt-livepatch-develUpgrade kernel-kvmsmall-develUpgrade dlm-kmp-64kbUpgrade reiserfs-kmp-rtUpgrade kernel-kvmsmall-vdsoUpgrade kernel-docs-htmlUpgrade kernel-azure-vdsoUpgrade kernel-azureUpgrade kernel-64kb-optionalUpgrade kselftests-kmp-64kbUpgrade kernel-azure-baseUpgrade kernel-64kbUpgrade kernel-source-rtUpgrade kernel-rt_debugUpgrade kernel-default-livepatch-develUpgrade gfs2-kmp-rtUpgrade dtb-amlogicUpgrade dtb-alteraUpgrade kernel-azure-extraUpgrade kernel-rt_debug-vdsoUpgrade dtb-renesasUpgrade kernel-debug-vdsoUpgrade kernel-debug-develUpgrade kselftests-kmp-rtUpgrade dtb-amazonUpgrade gfs2-kmp-64kbUpgrade kernel-default-livepatchUpgrade dtb-socionextUpgrade kernel-zfcpdumpUpgrade kernel-default-develUpgrade dtb-broadcomUpgrade kernel-source-azureUpgrade kselftests-kmp-azureUpgrade gfs2-kmp-azureUpgrade cluster-md-kmp-azureUpgrade kernel-rt_debug-livepatch-develUpgrade kernel-syms-rtUpgrade kernel-debugUpgrade reiserfs-kmp-defaultUpgrade ocfs2-kmp-rtUpgrade kernel-kvmsmall-livepatch-develUpgrade kernel-source-vanillaUpgrade dtb-marvellUpgrade gfs2-kmp-defaultUpgrade dtb-freescaleUpgrade kernel-rt-optionalUpgrade kernel-macrosUpgrade kernel-64kb-livepatch-develUpgrade kernel-debug-livepatch-develUpgrade dtb-apple | Jun 12, 2024 | May 19, 2024 |
| Ubuntu | — | Upgrade linux-image-kvmUpgrade linux-image-oracle-lts-18.04Upgrade linux-image-lowlatency-lts-xenialUpgrade linux-image-5.15.0-1060-nvidiaUpgrade linux-image-bluefieldUpgrade linux-image-4.15.0-1175-awsUpgrade linux-image-awsUpgrade linux-image-lowlatency-hwe-16.04Upgrade linux-image-ibm-lts-24.04Upgrade linux-image-4.15.0-1168-gcpUpgrade linux-image-6.8.0-1008-oracle-64kUpgrade linux-image-oracleUpgrade linux-image-5.15.0-1035-xilinx-zynqmpUpgrade linux-image-5.4.0-1040-iotUpgrade linux-image-5.4.0-1088-bluefieldUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-virtual-lts-xenialUpgrade linux-image-lowlatency-64k-hwe-20.04Upgrade linux-image-5.4.0-1112-raspiUpgrade linux-image-4.15.0-231-genericUpgrade linux-image-raspi-nolpaeUpgrade linux-image-generic-hwe-18.04Upgrade linux-image-5.15.0-1060-nvidia-lowlatencyUpgrade linux-image-5.4.0-1075-ibmUpgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-5.4.0-1047-xilinx-zynqmpUpgrade linux-image-4.15.0-1158-kvmUpgrade linux-image-generic-lpae-hwe-20.04Upgrade linux-image-generic-hwe-20.04Upgrade linux-image-5.15.0-1062-gkeUpgrade linux-image-5.15.0-116-generic-64kUpgrade linux-image-gcp-lts-20.04Upgrade linux-image-4.4.0-1138-awsUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-6.8.0-1010-azureUpgrade linux-image-azure-cvmUpgrade linux-image-6.8.0-1010-azure-fdeUpgrade linux-image-6.8.0-38-lowlatency-64kUpgrade linux-image-5.15.0-1065-gcpUpgrade linux-image-5.4.0-1133-azureUpgrade linux-image-gkeop-5.15Upgrade linux-image-6.8.0-1009-nvidiaUpgrade linux-image-5.4.0-189-genericUpgrade linux-image-oem-20.04dUpgrade linux-image-gcp-lts-22.04Upgrade linux-image-5.4.0-1095-gkeopUpgrade linux-image-gcp-lts-18.04Upgrade linux-image-virtualUpgrade linux-image-5.15.0-116-genericUpgrade linux-image-gkeUpgrade linux-image-5.15.0-1058-ibmUpgrade linux-image-6.8.0-38-genericUpgrade linux-image-generic-hwe-16.04Upgrade linux-image-aws-lts-18.04Upgrade linux-image-oem-20.04Upgrade linux-image-4.4.0-1176-awsUpgrade linux-image-6.8.0-1007-intelUpgrade linux-image-5.15.0-1058-raspiUpgrade linux-image-4.15.0-1137-oracleUpgrade linux-image-5.4.0-1128-awsUpgrade linux-image-lowlatency-hwe-18.04Upgrade linux-image-5.15.0-1064-gcpUpgrade linux-image-6.8.0-1007-raspiUpgrade linux-image-6.8.0-38-lowlatencyUpgrade linux-image-4.15.0-1183-azureUpgrade linux-image-oracle-lts-22.04Upgrade linux-image-virtual-hwe-18.04Upgrade linux-image-6.8.0-1011-awsUpgrade linux-image-6.8.0-1008-oracleUpgrade linux-image-raspi-hwe-18.04Upgrade linux-image-xilinx-zynqmpUpgrade linux-image-azure-fde-lts-22.04Upgrade linux-image-azure-lts-22.04Upgrade linux-image-nvidia-lowlatencyUpgrade linux-image-ibm-classicUpgrade linux-image-ibmUpgrade linux-image-5.4.0-1127-oracleUpgrade linux-image-oem-24.04Upgrade linux-image-5.15.0-1068-azure-fdeUpgrade linux-image-oemUpgrade linux-image-5.15.0-1048-gkeopUpgrade linux-image-oem-20.04cUpgrade linux-image-5.15.0-1060-intel-iotgUpgrade linux-image-intel-iotgUpgrade linux-image-6.8.0-1010-gcpUpgrade linux-image-oem-24.04aUpgrade linux-image-aws-lts-20.04Upgrade linux-image-5.15.0-1068-azureUpgrade linux-image-azure-fdeUpgrade linux-image-oracle-lts-20.04Upgrade linux-image-raspiUpgrade linux-image-oem-20.04bUpgrade linux-image-lowlatencyUpgrade linux-image-gcpUpgrade linux-image-intelUpgrade linux-image-generic-lpaeUpgrade linux-image-6.8.0-1009-nvidia-64kUpgrade linux-image-oem-osp1Upgrade linux-image-aws-hweUpgrade linux-image-azureUpgrade linux-image-4.4.0-1139-kvmUpgrade linux-image-lowlatency-hwe-20.04Upgrade linux-image-6.8.0-1008-oemUpgrade linux-image-virtual-hwe-20.04Upgrade linux-image-oracle-64kUpgrade linux-image-nvidiaUpgrade linux-image-gkeopUpgrade linux-image-5.4.0-189-lowlatencyUpgrade linux-image-lowlatency-64kUpgrade linux-image-4.4.0-261-lowlatencyUpgrade linux-image-5.15.0-1062-kvmUpgrade linux-image-5.15.0-116-generic-lpaeUpgrade linux-image-5.15.0-1063-oracleUpgrade linux-image-ibm-lts-20.04Upgrade linux-image-generic-64kUpgrade linux-image-5.15.0-116-lowlatency-64kUpgrade linux-image-5.4.0-1116-kvmUpgrade linux-image-6.8.0-1006-gkeUpgrade linux-image-aws-lts-22.04Upgrade linux-image-gkeop-5.4Upgrade linux-image-5.15.0-116-lowlatencyUpgrade linux-image-gke-5.15Upgrade linux-image-6.8.0-1008-ibmUpgrade linux-image-5.4.0-1132-gcpUpgrade linux-image-5.15.0-1065-awsUpgrade linux-image-6.8.0-38-generic-64kUpgrade linux-image-azure-lts-18.04Upgrade linux-image-generic-64k-hwe-20.04Upgrade linux-image-5.4.0-189-generic-lpaeUpgrade linux-image-nvidia-64kUpgrade linux-image-4.15.0-231-lowlatencyUpgrade linux-image-azure-lts-20.04Upgrade linux-image-4.4.0-261-genericUpgrade linux-image-snapdragon-hwe-18.04Upgrade linux-image-raspi2Upgrade linux-image-genericUpgrade linux-image-generic-lts-xenialUpgrade linux-image-virtual-hwe-16.04 | Jul 12, 2024 | May 19, 2024 |
| Vmware Photon_os | — | Use 'tdnf update' to upgrade all packages to the latest version. | Jan 20, 2025 | May 19, 2024 |
Prioritise with Active Threat Intelligence
With curated Threat Intelligence, you can see which vulnerabilities truly put you at risk, prioritize what matters most, and act before attackers do.
Explore Intelligence Hub