Vulnerability · Published Jul 29, 2024 · Assigned by Linux

CVE-2024-41045bpf: Defer work in bpf_timer_cancel_and_free

High 7.8

In plain English

A high-severity security flaw in Linux from Linux. There are no confirmed reports of exploitation so far. The chance it is exploited in the next 30 days is estimated at 0.3% (higher than 21% of all known vulnerabilities). Fixed versions are available - upgrade the affected package.

Severity (CVSS 3.1)7.8High
Exploit odds (30 days)0.3%top 78.9% of all CVEs
Exploited in the wildNo reportsCISA SSVC: none
Attack toolingNoneno public tooling known

Official description

In the Linux kernel, the following vulnerability has been resolved: bpf: Defer work in bpf_timer_cancel_and_free Currently, the same case as previous patch (two timer callbacks trying to cancel each other) can be invoked through bpf_map_update_elem as well, or more precisely, freeing map elements containing timers. Since this relies on hrtimer_cancel as well, it is prone to the same deadlock situation as the previous patch. It would be sufficient to use hrtimer_try_to_cancel to fix this problem, as the timer cannot be enqueued after async_cancel_and_free. Once async_cancel_and_free has been done, the timer must be reinitialized before it can be armed again. The callback running in parallel trying to arm the timer will fail, and freeing bpf_hrtimer without waiting is sufficient (given kfree_rcu), and bpf_timer_cb will return HRTIMER_NORESTART, preventing the timer from being rearmed again. However, there exists a UAF scenario where the callback arms the timer before entering this function, such that if cancellation fails (due to timer callback invoking this routine, or the target timer callback running concurrently). In such a case, if the timer expiration is significantly far in the future, the RCU grace period expiration happening before it will free the bpf_hrtimer state and along with it the struct hrtimer, that is enqueued. Hence, it is clear cancellation needs to occur after async_cancel_and_free, and yet it cannot be done inline due to deadlock issues. We thus modify bpf_timer_cancel_and_free to defer work to the global workqueue, adding a work_struct alongside rcu_head (both used at _different_ points of time, so can share space). Update existing code comments to reflect the new state of affairs.

Affected packages & fixed versions

EcosystemPackageFixed inAdvisory
Debian:12linuxno fix listedDEBIAN-CVE-2024-41045
Debian:13linux6.9.10-1DEBIAN-CVE-2024-41045
Debian:14linux6.9.10-1DEBIAN-CVE-2024-41045
Ubuntu:22.04:LTSlinuxno fix listedUBUNTU-CVE-2024-41045
Ubuntu:24.04:LTSlinux6.8.0-48.48UBUNTU-CVE-2024-41045
Ubuntu:24.04:LTSlinux6.8.0-48.48USN-7089-1
Ubuntu:22.04:LTSlinux-allwinner-5.19no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-awsno fix listedUBUNTU-CVE-2024-41045
Ubuntu:24.04:LTSlinux-aws6.8.0-1018.20USN-7089-3
Ubuntu:24.04:LTSlinux-aws6.8.0-1018.20UBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-aws-5.19no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-aws-6.2no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-aws-6.5no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-aws-6.86.8.0-1018.19~22.04.1UBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-aws-6.86.8.0-1018.19~22.04.1USN-7089-3
Ubuntu:22.04:LTSlinux-azureno fix listedUBUNTU-CVE-2024-41045
Ubuntu:24.04:LTSlinux-azure6.8.0-1017.20USN-7089-2
Ubuntu:24.04:LTSlinux-azure6.8.0-1017.20UBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-azure-5.19no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-azure-6.2no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-azure-6.5no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-azure-6.86.8.0-1017.20~22.04.1USN-7090-1
Ubuntu:22.04:LTSlinux-azure-6.86.8.0-1017.20~22.04.1UBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-azure-fdeno fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-azure-fde-5.19no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-azure-fde-6.2no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-gcpno fix listedUBUNTU-CVE-2024-41045
Ubuntu:24.04:LTSlinux-gcp6.8.0-1017.19UBUNTU-CVE-2024-41045
Ubuntu:24.04:LTSlinux-gcp6.8.0-1017.19USN-7089-2
Ubuntu:22.04:LTSlinux-gcp-5.19no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-gcp-6.2no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-gcp-6.5no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-gcp-6.86.8.0-1017.19~22.04.1UBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-gcp-6.86.8.0-1017.19~22.04.1USN-7089-1
Ubuntu:22.04:LTSlinux-gkeno fix listedUBUNTU-CVE-2024-41045
Ubuntu:24.04:LTSlinux-gke6.8.0-1013.17USN-7089-6
Ubuntu:24.04:LTSlinux-gke6.8.0-1013.17UBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-gkeopno fix listedUBUNTU-CVE-2024-41045
Ubuntu:24.04:LTSlinux-gkeop6.8.0-1002.4UBUNTU-CVE-2024-41045
Ubuntu:24.04:LTSlinux-gkeop6.8.0-1002.4USN-7156-1
Ubuntu:22.04:LTSlinux-hwe-5.19no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-hwe-6.2no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-hwe-6.5no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-hwe-6.86.8.0-48.48~22.04.1UBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-hwe-6.86.8.0-48.48~22.04.1USN-7089-1
Ubuntu:22.04:LTSlinux-ibmno fix listedUBUNTU-CVE-2024-41045
Ubuntu:24.04:LTSlinux-ibm6.8.0-1015.15USN-7089-2
Ubuntu:24.04:LTSlinux-ibm6.8.0-1015.15UBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-ibm-6.86.8.0-1015.15~22.04.1UBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-intel-iot-realtimeno fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-intel-iotgno fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-kvmno fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-lowlatencyno fix listedUBUNTU-CVE-2024-41045
Ubuntu:24.04:LTSlinux-lowlatency6.8.0-48.48.3UBUNTU-CVE-2024-41045
Ubuntu:24.04:LTSlinux-lowlatency6.8.0-48.48.3USN-7089-7
Ubuntu:22.04:LTSlinux-lowlatency-hwe-5.19no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-lowlatency-hwe-6.2no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-lowlatency-hwe-6.5no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-lowlatency-hwe-6.86.8.0-48.48.3~22.04.1USN-7089-7
Ubuntu:22.04:LTSlinux-lowlatency-hwe-6.86.8.0-48.48.3~22.04.1UBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-nvidiano fix listedUBUNTU-CVE-2024-41045
Ubuntu:24.04:LTSlinux-nvidia6.8.0-1017.19USN-7095-1
Ubuntu:24.04:LTSlinux-nvidia6.8.0-1017.19UBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-nvidia-6.2no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-nvidia-6.5no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-nvidia-6.86.8.0-1017.19~22.04.1UBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-nvidia-6.86.8.0-1017.19~22.04.1USN-7095-1
Ubuntu:24.04:LTSlinux-nvidia-lowlatency6.8.0-1017.19.1USN-7095-1
Ubuntu:24.04:LTSlinux-nvidia-lowlatency6.8.0-1017.19.1UBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-nvidia-tegrano fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-nvidia-tegra-igxno fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-oem-5.17no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-oem-6.0no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-oem-6.1no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-oem-6.5no fix listedUBUNTU-CVE-2024-41045
Ubuntu:24.04:LTSlinux-oem-6.86.8.0-1016.16USN-7089-4
Ubuntu:24.04:LTSlinux-oem-6.86.8.0-1016.16UBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-oracleno fix listedUBUNTU-CVE-2024-41045
Ubuntu:24.04:LTSlinux-oracle6.8.0-1015.16USN-7089-3
Ubuntu:24.04:LTSlinux-oracle6.8.0-1015.16UBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-oracle-6.5no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-oracle-6.86.8.0-1015.15~22.04.1UBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-oracle-6.86.8.0-1015.15~22.04.1USN-7089-3
Ubuntu:22.04:LTSlinux-raspino fix listedUBUNTU-CVE-2024-41045
Ubuntu:24.04:LTSlinux-raspi6.8.0-1014.16UBUNTU-CVE-2024-41045
Ubuntu:24.04:LTSlinux-raspi6.8.0-1014.16USN-7089-5
Ubuntu:22.04:LTSlinux-realtimeno fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-riscvno fix listedUBUNTU-CVE-2024-41045
Ubuntu:24.04:LTSlinux-riscv6.8.0-48.48.1UBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-riscv-5.19no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-riscv-6.5no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-riscv-6.86.8.0-48.48.1~22.04.2UBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-starfive-5.19no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-starfive-6.2no fix listedUBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-starfive-6.5no fix listedUBUNTU-CVE-2024-41045
Ubuntu:24.04:LTSlinux-xilinx6.8.0-1009.10UBUNTU-CVE-2024-41045
Ubuntu:22.04:LTSlinux-xilinx-zynqmpno fix listedUBUNTU-CVE-2024-41045

Affected products (as reported)

VendorProductVersions
Linux Linux b00628b1c7d595ae5b544e059c27b1f5828314b4 – before 7b27f15cab4c7d4f28c25b94a5284ad6d9d3695db00628b1c7d595ae5b544e059c27b1f5828314b4 – before 5eaa11c500ed07f505f86cec07d5593a71927e26b00628b1c7d595ae5b544e059c27b1f5828314b4 – before 7aa5a19279c3639ae8b758b63f05d0c616a39fa1b00628b1c7d595ae5b544e059c27b1f5828314b4 – before a6fcd19d7eac1335eb76bc16b6a66b7f574d1d69
Linux Linux 5.15

References