In the Linux kernel, the following vulnerability has been resolved:
mm: resolve faulty mmap_region() error path behaviour
The mmap_region() function is somewhat terrifying, with spaghetti-like control flow and numerous means by which issues can arise and incomplete state, memory leaks and other unpleasantness can occur.
A large amount of the complexity arises from trying to handle errors late in the process of mapping a VMA, which forms the basis of recently observed issues with resource leaks and observable inconsistent state.
Taking advantage of previous patches in this series we move a number of checks earlier in the code, simplifying things by moving the core of the logic into a static internal function __mmap_region().
Doing this allows us to perform a number of checks up front before we do any real work, and allows us to unwind the writable unmap check unconditionally as required and to perform a CONFIG_DEBUG_VM_MAPLE_TREE validation unconditionally also.
We move a number of things here:
1. We preallocate memory for the iterator before we call the file-backed memory hook, allowing us to exit early and avoid having to perform complicated and error-prone close/free logic. We carefully free iterator state on both success and error paths.
2. The enclosing mmap_region() function handles the mapping_map_writable() logic early. Previously the logic had the mapping_map_writable() at the point of mapping a newly allocated file-backed VMA, and a matching mapping_unmap_writable() on success and error paths.
We now do this unconditionally if this is a file-backed, shared writable mapping. If a driver changes the flags to eliminate VM_MAYWRITE, however doing so does not invalidate the seal check we just performed, and we in any case always decrement the counter in the wrapper.
We perform a debug assert to ensure a driver does not attempt to do the opposite.
3. We also move arch_validate_flags() up into the mmap_region() function. This is only relevant on arm64 and sparc64, and the check is only meaningful for SPARC with ADI enabled. We explicitly add a warning for this arch if a driver invalidates this check, though the code ought eventually to be fixed to eliminate the need for this.
With all of these measures in place, we no longer need to explicitly close the VMA on error paths, as we place all checks which might fail prior to a call to any driver mmap hook.
This eliminates an entire class of errors, makes the code easier to reason about and more robust.
CVSS Details
- CVSS 3.1 Base Score: 7.8
- CVSS 3.1 Vector: (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Amazon Linux Ami 2 | — | Upgrade kernel-tools-debuginfoUpgrade kernelUpgrade kernel-develUpgrade python-perf-debuginfoUpgrade perf-debuginfoUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-tools-develUpgrade kernel-headersUpgrade kernel-debuginfoUpgrade kernel-livepatch-5.15.176-118.170Upgrade perfUpgrade kernel-debuginfo-common-aarch64Upgrade kernel-livepatch-5.10.233-223.887Upgrade kernel-toolsUpgrade bpftool-debuginfoUpgrade python-perfUpgrade bpftool | Mar 4, 2025 | Nov 25, 2024 |
| Amazon_linux_2023 | — | Upgrade bpftool-debuginfoUpgrade kernel-modules-extra-commonUpgrade python3-perf-debuginfoUpgrade kernel-headersUpgrade kernel-debuginfo-common-x86_64Upgrade kernelUpgrade bpftoolUpgrade kernel-livepatch-6.1.119-129.201Upgrade kernel-libbpf-staticUpgrade kernel-modules-extraUpgrade kernel-libbpf-develUpgrade kernel-tools-debuginfoUpgrade kernel-libbpfUpgrade python3-perfUpgrade kernel-debuginfo-common-aarch64Upgrade kernel-toolsUpgrade kernel-develUpgrade perf-debuginfoUpgrade kernel-debuginfoUpgrade kernel-tools-develUpgrade perf | Mar 10, 2025 | Nov 25, 2024 |
| Debian | — | Upgrade linux-6.1Upgrade linux | Dec 2, 2024 | Nov 25, 2024 |
| Huawei Euleros 2_0_sp11 | — | Upgrade python3-perfUpgrade kernel-abi-stablelistsUpgrade kernel-toolsUpgrade bpftoolUpgrade kernel-tools-libsUpgrade kernel | Feb 11, 2025 | Nov 25, 2024 |
| Huawei Euleros 2_0_sp12 | — | Upgrade kernel-tools-libsUpgrade bpftoolUpgrade kernelUpgrade kernel-abi-stablelistsUpgrade kernel-toolsUpgrade python3-perf | Feb 11, 2025 | Nov 25, 2024 |
| Oracle_linux | — | Upgrade kernel-uek | Feb 10, 2025 | Nov 25, 2024 |
| Redhat_linux | — | Upgrade kernelNo solution existsUpgrade kernel-rt | May 15, 2025 | Nov 25, 2024 |
| Ubuntu | — | Upgrade linux-image-5.15.0-136-generic-lpaeUpgrade linux-image-5.15.0-1077-intel-iotgUpgrade linux-image-nvidia-hwe-22.04Upgrade linux-image-oracle-lts-24.04Upgrade linux-image-5.15.0-135-genericUpgrade linux-image-6.8.0-1010-gkeopUpgrade linux-image-oem-20.04Upgrade linux-image-oem-22.04bUpgrade linux-image-6.8.0-1024-oracleUpgrade linux-image-5.15.0-1084-azureUpgrade linux-image-intel-iot-realtimeUpgrade linux-image-5.15.0-135-generic-lpaeUpgrade linux-image-generic-64kUpgrade linux-image-5.15.0-1072-ibmUpgrade linux-image-aws-lts-24.04Upgrade linux-image-realtimeUpgrade linux-image-5.15.0-1086-azure-fdeUpgrade linux-image-virtualUpgrade linux-image-5.15.0-1077-gkeUpgrade linux-image-oem-24.04aUpgrade linux-image-generic-64k-hwe-20.04Upgrade linux-image-nvidia-tegraUpgrade linux-image-5.15.0-1076-kvmUpgrade linux-image-6.8.0-1026-nvidiaUpgrade linux-image-5.15.0-1083-azure-fipsUpgrade linux-image-6.8.0-1027-azureUpgrade linux-image-5.15.0-1080-awsUpgrade linux-image-6.8.0-58-lowlatencyUpgrade linux-image-6.8.0-58-lowlatency-64kUpgrade linux-image-genericUpgrade linux-image-5.15.0-1075-intel-iotgUpgrade linux-image-5.15.0-1074-nvidiaUpgrade linux-image-azure-lts-22.04Upgrade linux-image-oem-20.04dUpgrade linux-image-nvidiaUpgrade linux-image-5.15.0-1079-gcpUpgrade linux-image-6.8.0-1027-awsUpgrade linux-image-oem-22.04Upgrade linux-image-5.15.0-1074-raspiUpgrade linux-image-lowlatency-64kUpgrade linux-image-generic-64k-hwe-22.04Upgrade linux-image-6.8.0-1026-nvidia-lowlatency-64kUpgrade linux-image-5.15.0-1033-nvidia-tegra-rtUpgrade linux-image-oracleUpgrade linux-image-intelUpgrade linux-image-oracle-lts-22.04Upgrade linux-image-5.15.0-1021-nvidia-tegra-igxUpgrade linux-image-oem-20.04cUpgrade linux-image-6.8.0-1026-oemUpgrade linux-image-6.8.0-1023-gkeUpgrade linux-image-oem-24.04Upgrade linux-image-gcpUpgrade linux-image-5.15.0-1081-gcpUpgrade linux-image-5.15.0-136-genericUpgrade linux-image-5.15.0-135-lowlatency-64kUpgrade linux-image-oracle-64kUpgrade linux-image-raspi-realtimeUpgrade linux-image-generic-lpae-hwe-20.04Upgrade linux-image-generic-hwe-22.04Upgrade linux-image-5.15.0-1077-oracleUpgrade linux-image-nvidia-tegra-igx-rtUpgrade linux-image-lowlatency-64k-hwe-22.04Upgrade linux-image-oem-22.04cUpgrade linux-image-gkeopUpgrade linux-image-gkeUpgrade linux-image-gkeop-5.15Upgrade linux-image-virtual-hwe-22.04Upgrade linux-image-6.8.0-1026-nvidia-64kUpgrade linux-image-5.15.0-1044-xilinx-zynqmpUpgrade linux-image-6.8.0-1028-gcpUpgrade linux-image-xilinx-zynqmpUpgrade linux-image-nvidia-64kUpgrade linux-image-intel-iotgUpgrade linux-image-5.15.0-136-generic-64kUpgrade linux-image-5.15.0-1074-ibmUpgrade linux-image-5.15.0-1073-intel-iot-realtimeUpgrade linux-image-5.15.0-1074-nvidia-lowlatencyUpgrade linux-image-raspiUpgrade linux-image-5.15.0-1021-nvidia-tegra-igx-rtUpgrade linux-image-5.15.0-1033-nvidia-tegraUpgrade linux-image-aws-lts-22.04Upgrade linux-image-gcp-lts-24.04Upgrade linux-image-oem-20.04bUpgrade linux-image-awsUpgrade linux-image-ibm-classicUpgrade linux-image-lowlatency-hwe-22.04Upgrade linux-image-oracle-64k-lts-24.04Upgrade linux-image-nvidia-64k-hwe-22.04Upgrade linux-image-gke-5.15Upgrade linux-image-6.8.0-58-genericUpgrade linux-image-kvmUpgrade linux-image-gcp-64k-lts-24.04Upgrade linux-image-5.15.0-135-lowlatencyUpgrade linux-image-5.15.0-135-fipsUpgrade linux-image-5.15.0-1086-azureUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-5.15.0-1080-aws-fipsUpgrade linux-image-virtual-hwe-20.04Upgrade linux-image-fipsUpgrade linux-image-azureUpgrade linux-image-6.8.0-1024-ibmUpgrade linux-image-azure-fde-lts-24.04Upgrade linux-image-gcp-lts-22.04Upgrade linux-image-generic-hwe-20.04Upgrade linux-image-6.8.0-1014-azure-nvidiaUpgrade linux-image-gcp-64kUpgrade linux-image-5.15.0-135-generic-64kUpgrade linux-image-5.15.0-1079-gcp-fipsUpgrade linux-image-realtime-hwe-24.04Upgrade linux-image-azure-lts-24.04Upgrade linux-image-nvidia-64k-6.8Upgrade linux-image-raspi-nolpaeUpgrade linux-image-oem-22.04aUpgrade linux-image-gcp-fipsUpgrade linux-image-6.8.0-2023-raspi-realtimeUpgrade linux-image-6.8.0-1024-oracle-64kUpgrade linux-image-nvidia-tegra-rtUpgrade linux-image-6.8.0-1028-raspiUpgrade linux-image-nvidia-6.8Upgrade linux-image-6.8.1-1020-realtimeUpgrade linux-image-ibmUpgrade linux-image-azure-cvmUpgrade linux-image-nvidia-lowlatencyUpgrade linux-image-oem-22.04dUpgrade linux-image-azure-fipsUpgrade linux-image-6.8.0-1028-gcp-64kUpgrade linux-image-5.15.0-1080-realtimeUpgrade linux-image-lowlatencyUpgrade linux-image-lowlatency-64k-hwe-20.04Upgrade linux-image-6.8.0-1026-nvidia-lowlatencyUpgrade linux-image-azure-nvidiaUpgrade linux-image-azure-fdeUpgrade linux-image-5.15.0-1062-gkeopUpgrade linux-image-6.8.0-58-generic-64kUpgrade linux-image-nvidia-lowlatency-64kUpgrade linux-image-nvidia-tegra-igxUpgrade linux-image-gkeop-6.8Upgrade linux-image-lowlatency-hwe-20.04Upgrade linux-image-generic-lpaeUpgrade linux-image-6.8.0-1027-azure-fdeUpgrade linux-image-aws-fips | Mar 28, 2025 | Nov 25, 2024 |
| Vmware Photon_os | — | Use 'tdnf update' to upgrade all packages to the latest version. | Jan 20, 2025 | Nov 25, 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