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-cross-headersUpgrade perfUpgrade kernel-zfcpdump-coreUpgrade kernel-rt-coreUpgrade kernelUpgrade bpftoolUpgrade python3-perfUpgrade kernel-tools-libs-develUpgrade kernel-develUpgrade kernel-rt-kvmUpgrade kernel-abi-stablelistsUpgrade kernel-rt-debug-coreUpgrade kernel-rt-modules-extraUpgrade kernel-rt-debugUpgrade kernel-rt-develUpgrade kernel-toolsUpgrade kernel-coreUpgrade kernel-rt-debug-kvmUpgrade kernel-rt-debug-develUpgrade kernel-debugUpgrade kernel-debug-develUpgrade kernel-headersUpgrade kernel-rt-debug-modules-extraUpgrade kernel-debug-coreUpgrade kernel-zfcpdump-develUpgrade kernel-rtUpgrade kernel-zfcpdump-modules-extraUpgrade kernel-modulesUpgrade kernel-docUpgrade kernel-zfcpdumpUpgrade kernel-rt-modulesUpgrade kernel-tools-libsUpgrade kernel-zfcpdump-modulesUpgrade kernel-debug-modules-extraUpgrade kernel-rt-debug-modulesUpgrade kernel-debug-modulesUpgrade kernel-modules-extra | Sep 26, 2024 | May 19, 2024 |
| Debian | — | Upgrade linux | Jun 27, 2024 | May 19, 2024 |
| Huawei Euleros 2_0_sp10 | — | Upgrade kernel-abi-stablelistsUpgrade python3-perfUpgrade kernel-toolsUpgrade kernelUpgrade kernel-tools-libs | Oct 8, 2024 | May 19, 2024 |
| Huawei Euleros 2_0_sp11 | — | Upgrade python3-perfUpgrade kernelUpgrade kernel-toolsUpgrade kernel-abi-stablelistsUpgrade kernel-tools-libsUpgrade bpftool | Oct 8, 2024 | May 19, 2024 |
| Huawei Euleros 2_0_sp12 | — | Upgrade kernel-abi-stablelistsUpgrade python3-perfUpgrade bpftoolUpgrade kernelUpgrade kernel-tools-libsUpgrade kernel-tools | Oct 9, 2024 | May 19, 2024 |
| Huawei Euleros 2_0_sp9 | — | Upgrade kernel-tools-libsUpgrade kernel-toolsUpgrade python3-perfUpgrade kernel | Oct 8, 2024 | May 19, 2024 |
| Oracle_linux | — | Upgrade kernelUpgrade kernel-uek | Oct 16, 2024 | May 19, 2024 |
| Redhat_linux | — | Upgrade kernel-rtUpgrade kernelNo solution exists | Sep 25, 2024 | May 19, 2024 |
| Rocky_linux | — | Upgrade kernel-debug-debuginfoUpgrade kernel-debug-modules-extraUpgrade kernel-rt-debug-coreUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-toolsUpgrade kernel-rtUpgrade kernel-rt-debug-debuginfoUpgrade bpftool-debuginfoUpgrade kernel-rt-debug-modulesUpgrade kernel-debug-modulesUpgrade kernel-tools-libs-develUpgrade kernel-tools-libsUpgrade kernel-rt-modulesUpgrade kernel-rt-debuginfoUpgrade kernel-rt-debug-modules-extraUpgrade kernel-rt-debuginfo-common-x86_64Upgrade kernel-cross-headersUpgrade perfUpgrade kernel-debuginfoUpgrade kernel-rt-debug-kvmUpgrade kernel-rt-coreUpgrade kernel-debug-coreUpgrade kernelUpgrade kernel-debug-develUpgrade python3-perf-debuginfoUpgrade kernel-rt-debug-develUpgrade kernel-modules-extraUpgrade bpftoolUpgrade kernel-tools-debuginfoUpgrade kernel-rt-develUpgrade kernel-rt-debugUpgrade kernel-headersUpgrade kernel-rt-kvmUpgrade kernel-debugUpgrade kernel-rt-modules-extraUpgrade kernel-modulesUpgrade python3-perfUpgrade kernel-develUpgrade perf-debuginfoUpgrade kernel-core | Oct 2, 2024 | May 19, 2024 |
| Suse | — | Upgrade kernel-defaultUpgrade kernel-kvmsmallUpgrade cluster-md-kmp-64kbUpgrade kernel-64kb-extraUpgrade kernel-azure-livepatch-develUpgrade kernel-rt-livepatchUpgrade kernel-symsUpgrade kernel-obs-qaUpgrade kernel-obs-buildUpgrade kernel-default-vdsoUpgrade dtb-armUpgrade dtb-apmUpgrade dtb-qcomUpgrade kernel-rt-extraUpgrade kernel-default-optionalUpgrade kernel-devel-rtUpgrade kernel-rt-develUpgrade ocfs2-kmp-defaultUpgrade cluster-md-kmp-rtUpgrade dtb-caviumUpgrade dlm-kmp-azureUpgrade dlm-kmp-rtUpgrade dtb-allwinnerUpgrade kernel-azure-develUpgrade kernel-rtUpgrade kernel-syms-azureUpgrade dtb-mediatekUpgrade dtb-exynosUpgrade dtb-rockchipUpgrade kernel-devel-azureUpgrade dtb-nvidiaUpgrade kernel-default-base-rebuildUpgrade ocfs2-kmp-azureUpgrade kselftests-kmp-defaultUpgrade kernel-64kb-develUpgrade kernel-sourceUpgrade kernel-docsUpgrade kernel-default-extraUpgrade dtb-sprdUpgrade dtb-xilinxUpgrade kernel-develUpgrade reiserfs-kmp-azureUpgrade gfs2-kmp-defaultUpgrade kernel-default-manUpgrade ocfs2-kmp-64kbUpgrade kernel-syms-rtUpgrade kernel-rt-livepatch-develUpgrade kernel-default-livepatchUpgrade kernel-azure-optionalUpgrade dtb-socionextUpgrade dtb-hisiliconUpgrade dlm-kmp-defaultUpgrade cluster-md-kmp-defaultUpgrade kernel-kvmsmall-develUpgrade kernel-docs-htmlUpgrade kernel-azure-vdsoUpgrade kernel-azureUpgrade kernel-64kb-optionalUpgrade dtb-alteraUpgrade reiserfs-kmp-rtUpgrade kselftests-kmp-64kbUpgrade kernel-rt_debug-develUpgrade kernel-kvmsmall-vdsoUpgrade gfs2-kmp-azureUpgrade cluster-md-kmp-azureUpgrade dtb-amazonUpgrade dtb-broadcomUpgrade reiserfs-kmp-64kbUpgrade kernel-zfcpdumpUpgrade kernel-source-azureUpgrade dtb-appleUpgrade kernel-default-develUpgrade dlm-kmp-64kbUpgrade kernel-rt_debugUpgrade kernel-azure-extraUpgrade kernel-rt-vdsoUpgrade kernel-macrosUpgrade ocfs2-kmp-rtUpgrade kernel-rt_debug-vdsoUpgrade kernel-kvmsmall-livepatch-develUpgrade kselftests-kmp-rtUpgrade kernel-debug-vdsoUpgrade kernel-debug-livepatch-develUpgrade kernel-debug-develUpgrade kernel-debugUpgrade kernel-64kb-livepatch-develUpgrade dtb-renesasUpgrade dtb-lgUpgrade dtb-amdUpgrade reiserfs-kmp-defaultUpgrade kernel-rt-optionalUpgrade gfs2-kmp-rtUpgrade dtb-amlogicUpgrade kernel-source-rtUpgrade kernel-default-livepatch-develUpgrade kernel-64kbUpgrade kselftests-kmp-azureUpgrade kernel-azure-baseUpgrade kernel-source-vanillaUpgrade kernel-default-baseUpgrade dtb-marvellUpgrade dtb-freescaleUpgrade gfs2-kmp-64kbUpgrade kernel-rt_debug-livepatch-devel | Jun 12, 2024 | May 19, 2024 |
| Ubuntu | — | Upgrade linux-image-lowlatency-64kUpgrade linux-image-azure-fde-lts-22.04Upgrade linux-image-azure-fdeUpgrade linux-image-5.4.0-189-generic-lpaeUpgrade linux-image-azure-lts-18.04Upgrade linux-image-5.4.0-189-lowlatencyUpgrade linux-image-5.4.0-1132-gcpUpgrade linux-image-gkeopUpgrade linux-image-5.15.0-1065-awsUpgrade linux-image-5.4.0-1116-kvmUpgrade linux-image-5.15.0-116-lowlatencyUpgrade linux-image-oracle-64kUpgrade linux-image-gkeop-5.4Upgrade linux-image-6.8.0-38-generic-64kUpgrade linux-image-aws-lts-22.04Upgrade linux-image-generic-64kUpgrade linux-image-lowlatency-hwe-20.04Upgrade linux-image-6.8.0-1010-gcpUpgrade linux-image-5.15.0-116-generic-lpaeUpgrade linux-image-5.15.0-116-lowlatency-64kUpgrade linux-image-nvidiaUpgrade linux-image-ibm-lts-20.04Upgrade linux-image-5.15.0-1062-kvmUpgrade linux-image-generic-lts-xenialUpgrade linux-image-azure-lts-22.04Upgrade linux-image-oem-24.04aUpgrade linux-image-virtual-hwe-16.04Upgrade linux-image-generic-64k-hwe-20.04Upgrade linux-image-5.15.0-1060-intel-iotgUpgrade linux-image-oem-20.04cUpgrade linux-image-oem-24.04Upgrade linux-image-oemUpgrade linux-image-5.15.0-1048-gkeopUpgrade linux-image-6.8.0-1008-ibmUpgrade linux-image-6.8.0-1009-nvidia-64kUpgrade linux-image-generic-lpaeUpgrade linux-image-intelUpgrade linux-image-nvidia-lowlatencyUpgrade linux-image-5.15.0-1068-azure-fdeUpgrade linux-image-lowlatencyUpgrade linux-image-genericUpgrade linux-image-virtual-hwe-20.04Upgrade linux-image-gcpUpgrade linux-image-aws-hweUpgrade linux-image-azureUpgrade linux-image-oracle-lts-20.04Upgrade linux-image-6.8.0-1008-oemUpgrade linux-image-gke-5.15Upgrade linux-image-raspi2Upgrade linux-image-ibmUpgrade linux-image-ibm-classicUpgrade linux-image-aws-lts-20.04Upgrade linux-image-4.4.0-261-lowlatencyUpgrade linux-image-azure-lts-20.04Upgrade linux-image-4.4.0-261-genericUpgrade linux-image-snapdragon-hwe-18.04Upgrade linux-image-5.15.0-1068-azureUpgrade linux-image-4.15.0-231-lowlatencyUpgrade linux-image-intel-iotgUpgrade linux-image-6.8.0-1006-gkeUpgrade linux-image-5.4.0-1127-oracleUpgrade linux-image-xilinx-zynqmpUpgrade linux-image-oem-osp1Upgrade linux-image-raspiUpgrade linux-image-oem-20.04bUpgrade linux-image-5.15.0-1063-oracleUpgrade linux-image-4.4.0-1139-kvmUpgrade linux-image-nvidia-64kUpgrade linux-image-4.4.0-1176-awsUpgrade linux-image-5.4.0-1095-gkeopUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-generic-hwe-16.04Upgrade linux-image-5.4.0-1088-bluefieldUpgrade linux-image-lowlatency-hwe-16.04Upgrade linux-image-gcp-lts-22.04Upgrade linux-image-4.15.0-1175-awsUpgrade linux-image-awsUpgrade linux-image-5.4.0-1075-ibmUpgrade linux-image-5.15.0-1060-nvidiaUpgrade linux-image-5.15.0-1058-raspiUpgrade linux-image-6.8.0-1007-raspiUpgrade linux-image-bluefieldUpgrade linux-image-4.15.0-231-genericUpgrade linux-image-gcp-lts-18.04Upgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-gkeop-5.15Upgrade linux-image-oracle-lts-18.04Upgrade linux-image-aws-lts-18.04Upgrade linux-image-6.8.0-1009-nvidiaUpgrade linux-image-5.4.0-1128-awsUpgrade linux-image-virtualUpgrade linux-image-raspi-hwe-18.04Upgrade linux-image-4.15.0-1137-oracleUpgrade linux-image-oem-20.04Upgrade linux-image-kvmUpgrade linux-image-5.15.0-1062-gkeUpgrade linux-image-5.4.0-1133-azureUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-4.15.0-1183-azureUpgrade linux-image-6.8.0-38-lowlatencyUpgrade linux-image-oem-20.04dUpgrade linux-image-lowlatency-lts-xenialUpgrade linux-image-6.8.0-1011-awsUpgrade linux-image-6.8.0-1010-azureUpgrade linux-image-gcp-lts-20.04Upgrade linux-image-6.8.0-38-lowlatency-64kUpgrade linux-image-5.15.0-116-genericUpgrade linux-image-5.4.0-189-genericUpgrade linux-image-5.15.0-116-generic-64kUpgrade linux-image-5.4.0-1112-raspiUpgrade linux-image-6.8.0-1010-azure-fdeUpgrade linux-image-6.8.0-38-genericUpgrade linux-image-generic-hwe-20.04Upgrade linux-image-4.4.0-1138-awsUpgrade linux-image-oracle-lts-22.04Upgrade linux-image-virtual-hwe-18.04Upgrade linux-image-5.15.0-1064-gcpUpgrade linux-image-6.8.0-1008-oracleUpgrade linux-image-5.15.0-1058-ibmUpgrade linux-image-lowlatency-hwe-18.04Upgrade linux-image-6.8.0-1007-intelUpgrade linux-image-azure-cvmUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-generic-lpae-hwe-20.04Upgrade linux-image-5.4.0-1040-iotUpgrade linux-image-gkeUpgrade linux-image-4.15.0-1168-gcpUpgrade linux-image-4.15.0-1158-kvmUpgrade linux-image-raspi-nolpaeUpgrade linux-image-virtual-lts-xenialUpgrade linux-image-oracleUpgrade linux-image-generic-hwe-18.04Upgrade linux-image-6.8.0-1008-oracle-64kUpgrade linux-image-5.15.0-1060-nvidia-lowlatencyUpgrade linux-image-5.4.0-1047-xilinx-zynqmpUpgrade linux-image-5.15.0-1035-xilinx-zynqmpUpgrade linux-image-5.15.0-1065-gcpUpgrade linux-image-lowlatency-64k-hwe-20.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