In the Linux kernel, the following vulnerability has been resolved:
fix bitmap corruption on close_range() with CLOSE_RANGE_UNSHARE
copy_fd_bitmaps(new, old, count) is expected to copy the first count/BITS_PER_LONG bits from old->full_fds_bits[] and fill the rest with zeroes. What it does is copying enough words (BITS_TO_LONGS(count/BITS_PER_LONG)), then memsets the rest. That works fine, *if* all bits past the cutoff point are clear. Otherwise we are risking garbage from the last word we'd copied.
For most of the callers that is true - expand_fdtable() has count equal to old->max_fds, so there's no open descriptors past count, let alone fully occupied words in ->open_fds[], which is what bits in ->full_fds_bits[] correspond to.
The other caller (dup_fd()) passes sane_fdtable_size(old_fdt, max_fds), which is the smallest multiple of BITS_PER_LONG that covers all opened descriptors below max_fds. In the common case (copying on fork()) max_fds is ~0U, so all opened descriptors will be below it and we are fine, by the same reasons why the call in expand_fdtable() is safe.
Unfortunately, there is a case where max_fds is less than that and where we might, indeed, end up with junk in ->full_fds_bits[] - close_range(from, to, CLOSE_RANGE_UNSHARE) with * descriptor table being currently shared * 'to' being above the current capacity of descriptor table * 'from' being just under some chunk of opened descriptors. In that case we end up with observably wrong behaviour - e.g. spawn a child with CLONE_FILES, get all descriptors in range 0..127 open, then close_range(64, ~0U, CLOSE_RANGE_UNSHARE) and watch dup(0) ending up with descriptor #128, despite #64 being observably not open.
The minimally invasive fix would be to deal with that in dup_fd(). If this proves to add measurable overhead, we can go that way, but let's try to fix copy_fd_bitmaps() first.
* new helper: bitmap_copy_and_expand(to, from, bits_to_copy, size). * make copy_fd_bitmaps() take the bitmap size in words, rather than bits; it's 'count' argument is always a multiple of BITS_PER_LONG, so we are not losing any information, and that way we can use the same helper for all three bitmaps - compiler will see that count is a multiple of BITS_PER_LONG for the large ones, so it'll generate plain memcpy()+memset().
Reproducer added to tools/testing/selftests/core/close_range_test.c
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Debian | — | Upgrade linuxUpgrade linux-6.1 | Oct 7, 2024 | Sep 11, 2024 |
| Huawei Euleros 2_0_sp10 | — | Upgrade kernel-tools-libsUpgrade kernelUpgrade python3-perfUpgrade kernel-abi-stablelistsUpgrade kernel-tools | Jan 14, 2025 | Sep 11, 2024 |
| Huawei Euleros 2_0_sp11 | — | Upgrade kernel-toolsUpgrade kernel-tools-libsUpgrade bpftoolUpgrade kernelUpgrade python3-perfUpgrade kernel-abi-stablelists | Dec 12, 2024 | Sep 11, 2024 |
| Huawei Euleros 2_0_sp12 | — | Upgrade kernel-abi-stablelistsUpgrade kernelUpgrade kernel-toolsUpgrade bpftoolUpgrade python3-perfUpgrade kernel-tools-libs | Dec 12, 2024 | Sep 11, 2024 |
| Huawei Euleros 2_0_sp9 | — | Upgrade kernelUpgrade python3-perfUpgrade kernel-toolsUpgrade kernel-tools-libs | Jan 15, 2025 | Sep 11, 2024 |
| Oracle_linux | — | Upgrade kernel-uek | Nov 21, 2024 | Sep 11, 2024 |
| Redhat_linux | — | No solution exists | Jul 9, 2025 | Sep 11, 2024 |
| Suse | — | Upgrade kselftests-kmp-azureUpgrade dtb-sprdUpgrade kernel-default-baseUpgrade reiserfs-kmp-rtUpgrade dtb-allwinnerUpgrade ocfs2-kmp-defaultUpgrade dtb-broadcomUpgrade kernel-source-rtUpgrade kernel-default-vdsoUpgrade kernel-debug-vdsoUpgrade dtb-nvidiaUpgrade kernel-rt_debugUpgrade kselftests-kmp-rtUpgrade kernel-rtUpgrade gfs2-kmp-defaultUpgrade kernel-defaultUpgrade kernel-obs-buildUpgrade kernel-azure-optionalUpgrade kernel-docs-htmlUpgrade kernel-azure-vdsoUpgrade kernel-rt-optionalUpgrade dtb-qcomUpgrade kernel-rt_debug-develUpgrade kernel-rt-vdsoUpgrade cluster-md-kmp-64kbUpgrade gfs2-kmp-azureUpgrade kernel-azureUpgrade kernel-azure-develUpgrade dlm-kmp-defaultUpgrade dtb-alteraUpgrade dtb-marvellUpgrade kernel-rt_debug-livepatch-develUpgrade dtb-caviumUpgrade kernel-64kb-extraUpgrade reiserfs-kmp-64kbUpgrade kernel-rt-extraUpgrade kernel-default-livepatch-develUpgrade kernel-default-livepatchUpgrade dlm-kmp-64kbUpgrade dtb-socionextUpgrade dlm-kmp-rtUpgrade dtb-rockchipUpgrade kernel-source-vanillaUpgrade ocfs2-kmp-64kbUpgrade kernel-default-base-rebuildUpgrade kernel-kvmsmall-vdsoUpgrade kernel-default-optionalUpgrade ocfs2-kmp-rtUpgrade kernel-default-extraUpgrade kernel-obs-qaUpgrade dtb-armUpgrade dlm-kmp-azureUpgrade dtb-exynosUpgrade kernel-64kb-develUpgrade dtb-freescaleUpgrade cluster-md-kmp-azureUpgrade kselftests-kmp-defaultUpgrade kernel-symsUpgrade kernel-rt_debug-vdsoUpgrade kernel-rt-livepatchUpgrade kernel-rt-livepatch-develUpgrade kernel-syms-azureUpgrade kernel-zfcpdumpUpgrade kernel-macrosUpgrade kernel-devel-rtUpgrade kernel-azure-livepatch-develUpgrade kernel-azure-extraUpgrade dtb-renesasUpgrade dtb-amdUpgrade cluster-md-kmp-rtUpgrade ocfs2-kmp-azureUpgrade kernel-sourceUpgrade dtb-apmUpgrade kernel-debugUpgrade dtb-amlogicUpgrade dtb-amazonUpgrade kernel-devel-azureUpgrade kernel-rt-develUpgrade kernel-kvmsmall-develUpgrade cluster-md-kmp-defaultUpgrade dtb-lgUpgrade kernel-kvmsmallUpgrade kernel-docsUpgrade kernel-debug-develUpgrade kernel-64kb-optionalUpgrade dtb-mediatekUpgrade dtb-hisiliconUpgrade reiserfs-kmp-azureUpgrade dtb-appleUpgrade kernel-develUpgrade gfs2-kmp-64kbUpgrade dtb-xilinxUpgrade kernel-syms-rtUpgrade kernel-64kbUpgrade kselftests-kmp-64kbUpgrade kernel-source-azureUpgrade kernel-default-develUpgrade gfs2-kmp-rtUpgrade reiserfs-kmp-default | Dec 5, 2025 | Nov 13, 2024 |
| Ubuntu | — | Upgrade linux-image-generic-64k-hwe-20.04Upgrade linux-image-5.15.0-1070-oracleUpgrade linux-image-oem-22.04bUpgrade linux-image-lowlatency-64k-hwe-24.04Upgrade linux-image-oem-24.04Upgrade linux-image-oem-22.04Upgrade linux-image-5.15.0-1067-nvidia-lowlatencyUpgrade linux-image-oem-22.04aUpgrade linux-image-6.8.0-1019-gcpUpgrade linux-image-5.15.0-1065-raspiUpgrade linux-image-gcp-lts-22.04Upgrade linux-image-5.15.0-1069-gkeUpgrade linux-image-generic-lpaeUpgrade linux-image-5.15.0-125-generic-lpaeUpgrade linux-image-5.15.0-1067-nvidiaUpgrade linux-image-5.4.0-1102-gkeopUpgrade linux-image-nvidia-lowlatency-64kUpgrade linux-image-genericUpgrade linux-image-oracle-lts-20.04Upgrade linux-image-6.8.0-1020-azure-fdeUpgrade linux-image-gkeop-6.8Upgrade linux-image-6.8.0-1020-awsUpgrade linux-image-ibm-lts-20.04Upgrade linux-image-5.4.0-1082-ibmUpgrade linux-image-nvidia-64k-6.8Upgrade linux-image-virtual-hwe-24.04Upgrade linux-image-azure-lts-22.04Upgrade linux-image-5.15.0-1038-xilinx-zynqmpUpgrade linux-image-gkeop-5.4Upgrade linux-image-generic-hwe-18.04Upgrade linux-image-5.15.0-125-lowlatencyUpgrade linux-image-snapdragon-hwe-18.04Upgrade linux-image-5.4.0-1044-iotUpgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-azure-lts-20.04Upgrade linux-image-5.4.0-1140-azureUpgrade linux-image-6.8.0-50-lowlatency-64kUpgrade linux-image-nvidia-64k-hwe-22.04Upgrade linux-image-aws-lts-22.04Upgrade linux-image-bluefieldUpgrade linux-image-raspi-nolpaeUpgrade linux-image-6.8.0-1002-gkeopUpgrade linux-image-gke-5.15Upgrade linux-image-lowlatency-hwe-22.04Upgrade linux-image-5.15.0-1072-awsUpgrade linux-image-5.4.0-1135-awsUpgrade linux-image-5.4.0-200-genericUpgrade linux-image-lowlatency-hwe-20.04Upgrade linux-image-6.8.0-1019-nvidia-64kUpgrade linux-image-raspi2Upgrade linux-image-6.8.0-1015-gkeUpgrade linux-image-oracleUpgrade linux-image-generic-64k-hwe-22.04Upgrade linux-image-gcpUpgrade linux-image-6.8.0-1018-oemUpgrade linux-image-lowlatencyUpgrade linux-image-5.4.0-200-lowlatencyUpgrade linux-image-5.4.0-1123-kvmUpgrade linux-image-lowlatency-hwe-24.04Upgrade linux-image-5.4.0-1054-xilinx-zynqmpUpgrade linux-image-5.15.0-1065-ibmUpgrade linux-image-ibmUpgrade linux-image-5.15.0-1075-azureUpgrade linux-image-5.15.0-1071-gcpUpgrade linux-image-oem-osp1Upgrade linux-image-gkeopUpgrade linux-image-oem-20.04bUpgrade linux-image-virtualUpgrade linux-image-lowlatency-64kUpgrade linux-image-gcp-lts-20.04Upgrade linux-image-ibm-classicUpgrade linux-image-oem-20.04dUpgrade linux-image-6.8.0-1017-ibmUpgrade linux-image-5.15.0-125-lowlatency-64kUpgrade linux-image-nvidiaUpgrade linux-image-gkeUpgrade linux-image-awsUpgrade linux-image-raspi-hwe-18.04Upgrade linux-image-oemUpgrade linux-image-gkeop-5.15Upgrade linux-image-aws-lts-20.04Upgrade linux-image-generic-hwe-22.04Upgrade linux-image-5.15.0-125-generic-64kUpgrade linux-image-generic-hwe-20.04Upgrade linux-image-oem-24.04aUpgrade linux-image-5.15.0-1067-intel-iotgUpgrade linux-image-oracle-64kUpgrade linux-image-nvidia-6.8Upgrade linux-image-intelUpgrade linux-image-virtual-hwe-18.04Upgrade linux-image-oem-20.04Upgrade linux-image-5.15.0-1069-kvmUpgrade linux-image-6.8.0-1017-oracle-64kUpgrade linux-image-azure-cvmUpgrade linux-image-5.15.0-125-genericUpgrade linux-image-virtual-hwe-20.04Upgrade linux-image-5.4.0-1119-raspiUpgrade linux-image-6.8.0-50-genericUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-xilinx-zynqmpUpgrade linux-image-5.15.0-1078-azureUpgrade linux-image-nvidia-64kUpgrade linux-image-6.8.0-1017-oracleUpgrade linux-image-generic-lpae-hwe-20.04Upgrade linux-image-oracle-lts-22.04Upgrade linux-image-5.4.0-1134-oracleUpgrade linux-image-generic-64kUpgrade linux-image-lowlatency-64k-hwe-20.04Upgrade linux-image-lowlatency-64k-hwe-22.04Upgrade linux-image-6.8.0-1019-nvidia-lowlatency-64kUpgrade linux-image-nvidia-lowlatencyUpgrade linux-image-oem-20.04cUpgrade linux-image-5.4.0-1094-bluefieldUpgrade linux-image-kvmUpgrade linux-image-6.8.0-50-lowlatencyUpgrade linux-image-oem-22.04cUpgrade linux-image-azureUpgrade linux-image-6.8.0-1019-nvidia-lowlatencyUpgrade linux-image-6.8.0-1020-azureUpgrade linux-image-5.4.0-200-generic-lpaeUpgrade linux-image-oem-22.04dUpgrade linux-image-raspiUpgrade linux-image-5.4.0-1139-gcpUpgrade linux-image-nvidia-hwe-22.04Upgrade linux-image-lowlatency-hwe-18.04Upgrade linux-image-5.4.0-1139-azureUpgrade linux-image-azure-fdeUpgrade linux-image-6.8.0-1016-raspiUpgrade linux-image-virtual-hwe-22.04Upgrade linux-image-intel-iotgUpgrade linux-image-6.8.0-50-generic-64kUpgrade linux-image-6.8.0-1019-nvidiaUpgrade linux-image-5.15.0-1055-gkeopUpgrade linux-image-generic-hwe-24.04 | Nov 4, 2024 | Sep 11, 2024 |
| Vmware Photon_os | — | Use 'tdnf update' to upgrade all packages to the latest version. | Jan 20, 2025 | Sep 11, 2024 |
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