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