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