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