Description
In the Linux kernel, the following vulnerability has been resolved:
bpf: Cancel the running bpf_timer through kworker for PREEMPT_RT
During the update procedure, when overwrite element in a pre-allocated
htab, the freeing of old_element is protected by the bucket lock. The
reason why the bucket lock is necessary is that the old_element has
already been stashed in htab->extra_elems after alloc_htab_elem()
returns. If freeing the old_element after the bucket lock is unlocked,
the stashed element may be reused by concurrent update procedure and the
freeing of old_element will run concurrently with the reuse of the
old_element. However, the invocation of check_and_free_fields() may
acquire a spin-lock which violates the lockdep rule because its caller
has already held a raw-spin-lock (bucket lock). The following warning
will be reported when such race happens:
BUG: scheduling while atomic: test_progs/676/0x00000003
3 locks held by test_progs/676:
#0: ffffffff864b0240 (rcu_read_lock_trace){....}-{0:0}, at: bpf_prog_test_run_syscall+0x2c0/0x830
#1: ffff88810e961188 (&htab->lockdep_key){....}-{2:2}, at: htab_map_update_elem+0x306/0x1500
#2: ffff8881f4eac1b8 (&base->softirq_expiry_lock){....}-{2:2}, at: hrtimer_cancel_wait_running+0xe9/0x1b0
Modules linked in: bpf_testmod(O)
Preemption disabled at:
[<ffffffff817837a3>] htab_map_update_elem+0x293/0x1500
CPU: 0 UID: 0 PID: 676 Comm: test_progs Tainted: G ... 6.12.0+ #11
Tainted: [W]=WARN, [O]=OOT_MODULE
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996)...
Call Trace:
<TASK>
dump_stack_lvl+0x57/0x70
dump_stack+0x10/0x20
__schedule_bug+0x120/0x170
__schedule+0x300c/0x4800
schedule_rtlock+0x37/0x60
rtlock_slowlock_locked+0x6d9/0x54c0
rt_spin_lock+0x168/0x230
hrtimer_cancel_wait_running+0xe9/0x1b0
hrtimer_cancel+0x24/0x30
bpf_timer_delete_work+0x1d/0x40
bpf_timer_cancel_and_free+0x5e/0x80
bpf_obj_free_fields+0x262/0x4a0
check_and_free_fields+0x1d0/0x280
htab_map_update_elem+0x7fc/0x1500
bpf_prog_9f90bc20768e0cb9_overwrite_cb+0x3f/0x43
bpf_prog_ea601c4649694dbd_overwrite_timer+0x5d/0x7e
bpf_prog_test_run_syscall+0x322/0x830
__sys_bpf+0x135d/0x3ca0
__x64_sys_bpf+0x75/0xb0
x64_sys_call+0x1b5/0xa10
do_syscall_64+0x3b/0xc0
entry_SYSCALL_64_after_hwframe+0x4b/0x53
...
</TASK>
It seems feasible to break the reuse and refill of per-cpu extra_elems
into two independent parts: reuse the per-cpu extra_elems with bucket
lock being held and refill the old_element as per-cpu extra_elems after
the bucket lock is unlocked. However, it will make the concurrent
overwrite procedures on the same CPU return unexpected -E2BIG error when
the map is full.
Therefore, the patch fixes the lock problem by breaking the cancelling
of bpf_timer into two steps for PREEMPT_RT:
1) use hrtimer_try_to_cancel() and check its return value
2) if the timer is running, use hrtimer_cancel() through a kworker to
cancel it again
Considering that the current implementation of hrtimer_cancel() will try
to acquire a being held softirq_expiry_lock when the current timer is
running, these steps above are reasonable. However, it also has
downside. When the timer is running, the cancelling of the timer is
delayed when releasing the last map uref. The delay is also fixable
(e.g., break the cancelling of bpf timer into two parts: one part in
locked scope, another one in unlocked scope), it can be revised later if
necessary.
It is a bit hard to decide the right fix tag. One reason is that the
problem depends on PREEMPT_RT which is enabled in v6.12. Considering the
softirq_expiry_lock lock exists since v5.4 and bpf_timer is introduced
in v5.15, the bpf_timer commit is used in the fixes tag and an extra
depends-on tag is added to state the dependency on PREEMPT_RT.
Depends-on: v6.12+ with PREEMPT_RT enabled
Affected products
| Vendor | Product | Affected | Fixed |
|---|---|---|---|
| Linux | Linux | 5.15 | 6.6.160 |
Fixed in Linux distributions
Distributions backport fixes, so the version that fixes this vulnerability differs per release — upgrade to at least the version shown. From the distributions' security trackers and advisories.
Debian
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Debian 14 | linux | 6.12.13-1 | — |
| Debian 13 | linux | 6.12.13-1 | — |
| Debian 12 | linux | No fix yet | — |
Ubuntu
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Ubuntu Nvidia-BlueField 22.04 LTS | linux-bluefield | No fix yet | — |
| Ubuntu 24.04 LTS | linux | 6.8.0-64.67 | USN-7651-1 |
| Ubuntu 24.04 LTS | linux-aws | 6.8.0-1032.34 | USN-7651-1 |
| Ubuntu 24.04 LTS | linux-azure | 6.8.0-1034.39 | USN-7737-1 |
| Ubuntu 24.04 LTS | linux-azure-nvidia | 6.8.0-1022.23 | USN-7737-1 |
| Ubuntu 24.04 LTS | linux-gcp | 6.8.0-1033.35 | USN-7651-4 |
| Ubuntu 24.04 LTS | linux-gcp-6.11 +1 | 6.11.0-1015.15~24.04.1 | USN-7521-1 |
| Ubuntu 24.04 LTS | linux-gke | 6.8.0-1028.32 | USN-7651-3 |
| Ubuntu 24.04 LTS | linux-gkeop | 6.8.0-1015.17 | USN-7651-3 |
| Ubuntu 24.04 LTS | linux-hwe-6.11 | 6.11.0-26.26~24.04.1 | USN-7521-1 |
| Ubuntu 24.04 LTS | linux-ibm | 6.8.0-1029.29 | USN-7651-2 |
| Ubuntu 24.04 LTS | linux-lowlatency | 6.8.0-64.67.1 | USN-7651-2 |
| Ubuntu 24.04 LTS | linux-lowlatency-hwe-6.11 | 6.11.0-1014.15~24.04.1 | USN-7521-3 |
| Ubuntu 24.04 LTS | linux-nvidia | 6.8.0-1031.34 | USN-7651-3 |
| Ubuntu 24.04 LTS | linux-nvidia-6.11 | 6.11.0-1010.10 | — |
| Ubuntu 24.04 LTS | linux-nvidia-lowlatency | 6.8.0-1031.34.1 | USN-7651-3 |
| Ubuntu 24.04 LTS | linux-nvidia-tegra | 6.8.0-1008.8 | — |
| Ubuntu 24.04 LTS | linux-oem-6.11 | 6.11.0-1022.22 | USN-7521-1 |
| Ubuntu 24.04 LTS | linux-oem-6.8 | 6.8.0-1031.31 | USN-7651-1 |
| Ubuntu 24.04 LTS | linux-oracle | 6.8.0-1029.30 | USN-7651-3 |
| Ubuntu 24.04 LTS | linux-raspi | 6.8.0-1031.35 | USN-7651-6 |
| Ubuntu 24.04 LTS | linux-riscv +2 | No fix yet | — |
| Ubuntu 24.04 LTS | linux-xilinx | 6.8.0-1017.18 | — |
| Ubuntu 22.04 LTS | linux +49 | No fix yet | — |
| Ubuntu 22.04 LTS | linux-aws-6.8 | 6.8.0-1032.34~22.04.1 | USN-7651-3 |
| Ubuntu 22.04 LTS | linux-azure-6.8 | 6.8.0-1034.39~22.04.1 | USN-7737-1 |
| Ubuntu 22.04 LTS | linux-gcp-6.8 | 6.8.0-1033.35~22.04.1 | USN-7651-4 |
| Ubuntu 22.04 LTS | linux-hwe-6.8 +1 | 6.8.0-64.67~22.04.1 | USN-7653-1 |
| Ubuntu 22.04 LTS | linux-ibm-6.8 | 6.8.0-1029.29~22.04.1 | USN-7651-2 |
| Ubuntu 22.04 LTS | linux-lowlatency-hwe-6.8 | 6.8.0-64.67.1~22.04.1 | USN-7651-2 |
| Ubuntu 22.04 LTS | linux-nvidia-6.8 | 6.8.0-1031.34~22.04.1 | USN-7651-3 |
| Ubuntu 22.04 LTS | linux-oracle-6.8 | 6.8.0-1029.30~22.04.1 | USN-7651-3 |
| Ubuntu 20.04 LTS | linux-gke +28 | No fix yet | — |
| Ubuntu 18.04 LTS | linux-gcp +14 | No fix yet | — |
Show 7 more (older releases, extended support, other products)Fewer releases
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Ubuntu 16.04 LTS | linux-hwe-edge | No fix yet | — |
| Ubuntu Pro Realtime 24.04 LTS | linux-raspi-realtime | 6.8.0-2026.27 | USN-7651-5 |
| Ubuntu Pro Realtime 24.04 LTS | linux-realtime | 6.8.1-1025.26 | USN-7652-1 |
| Ubuntu Pro Realtime 22.04 LTS | linux-realtime +1 | No fix yet | — |
| Ubuntu Pro Realtime 22.04 LTS | linux-realtime-6.8 | 6.8.1-1025.26~22.04.1 | — |
| Ubuntu Pro FIPS-updates 24.04 LTS | linux-fips | 6.8.0-78.78+fips1 | — |
| Ubuntu Pro FIPS-updates 22.04 LTS | linux-fips +3 | No fix yet | — |
| Ubuntu Pro FIPS-preview 22.04 LTS | linux-fips +3 | No fix yet | — |
| Ubuntu Pro 20.04 LTS | linux-aws-5.15 +10 | No fix yet | — |
SUSE
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| SLES 15 SP6 | kernel-64kb +3 | 6.4.0-150600.23.47.2 | SUSE-SU-2025:1180-1 |
| SLES 15 SP6 | kernel-azure +1 | 6.4.0-150600.8.34.2 | SUSE-SU-2025:1177-1 |
| SLES 15 SP6 | kernel-coco +3 | 6.4.0-15061.21.coco15sp6.1 | SUSE-SU-2025:01919-1 |
| SLES 15 SP6 | kernel-default-base | 6.4.0-150600.23.47.2.150600.12.20.2 | SUSE-SU-2025:1180-1 |
| SLES 15 SP6 | kernel-docs +2 | 6.4.0-150600.23.47.1 | SUSE-SU-2025:1180-1 |
| SLES 15 SP6 | kernel-syms-azure | 6.4.0-150600.8.34.1 | SUSE-SU-2025:1177-1 |
Show 4 more (older releases, extended support, other products)Fewer releases
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| SLE Micro 6.1 | kernel-default-base | 6.4.0-28.1.21.6 | SUSE-SU-2025:20270-1 |
| SLE Micro 6.1 | kernel-livepatch-MICRO-6-0_Update_6 +1 | 1-3.1 | SUSE-SU-2025:20270-1, SUSE-SU-2025:20260-1 |
| SLE Micro 6.1 | kernel-rt +4 | 6.4.0-28.1 | SUSE-SU-2025:20270-1, SUSE-SU-2025:20260-1 |
| SLE Micro 6.0 | kernel-default-base | 6.4.0-28.1.21.6 | SUSE-SU-2025:20192-1 |
| SLE Micro 6.0 | kernel-livepatch-MICRO-6-0_Update_6 +1 | 1-3.1 | SUSE-SU-2025:20192-1, SUSE-SU-2025:20190-1 |
| SLE Micro 6.0 | kernel-rt +4 | 6.4.0-28.1 | SUSE-SU-2025:20192-1, SUSE-SU-2025:20190-1 |
| SLE Live Patching 15 SP6 | kernel-default | 6.4.0-150600.23.47.2 | SUSE-SU-2025:1180-1 |
| SLE Live Patching 15 SP6 | kernel-livepatch-SLE15-SP6-RT_Update_10 | 1-150600.1.5.1 | SUSE-SU-2025:1178-1 |
| SLE Live Patching 15 SP6 | kernel-livepatch-SLE15-SP6_Update_10 | 1-150600.13.5.1 | SUSE-SU-2025:1180-1 |
| SUSE Real Time Module 15 SP6 | kernel-rt +3 | 6.4.0-150600.10.34.1 | SUSE-SU-2025:1178-1 |
openSUSE
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| openSUSE Leap 15.6 | dtb-aarch64 +4 | 6.4.0-150600.23.47.1 | SUSE-SU-2025:1180-1 |
| openSUSE Leap 15.6 | kernel-64kb +5 | 6.4.0-150600.23.47.2 | SUSE-SU-2025:1180-1 |
| openSUSE Leap 15.6 | kernel-azure +1 | 6.4.0-150600.8.34.2 | SUSE-SU-2025:1177-1 |
| openSUSE Leap 15.6 | kernel-default-base | 6.4.0-150600.23.47.2.150600.12.20.2 | SUSE-SU-2025:1180-1 |
| openSUSE Leap 15.6 | kernel-rt +3 | 6.4.0-150600.10.34.1 | SUSE-SU-2025:1178-1 |
| openSUSE Leap 15.6 | kernel-syms-azure | 6.4.0-150600.8.34.1 | SUSE-SU-2025:1177-1 |
Azure Linux
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Azure Linux 3 | kernel | No fix yet | — |
| Azure Linux 2 (CBL-Mariner) | kernel | No fix yet | — |
Oracle Linux
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Oracle Linux 9 | kernel-uek +34 | 6.12.0-101.33.4.3.el10uek | ELSA-2025-20530, ELSA-2025-20480 |
Advisories 23
- WID-SEC-2025-0499 Linux Kernel: Mehrere Schwachstellen BSI CERT-Bund (WID) · Nov 12, 2026
- USN-7737-1 linux-azure, linux-azure-6.8, linux-azure-nvidia vulnerabilities Ubuntu Security Notices (USN) · Nov 3, 2026
- USN-7653-1 linux-hwe-6.8 vulnerabilities Ubuntu Security Notices (USN) · Nov 3, 2026
- USN-7651-3 linux-aws-6.8, linux-gke, linux-gkeop, linux-nvidia, linux-nvidia-6.8, linux-nvidia-lowlatency, linux-oracle, linux-oracle-6.8 vulnerabilities Ubuntu Security Notices (USN) · Oct 30, 2026
- USN-7651-2 linux-ibm, linux-ibm-6.8, linux-lowlatency, linux-lowlatency-hwe-6.8 vulnerabilities Ubuntu Security Notices (USN) · Oct 30, 2026
- USN-7651-4 linux-gcp, linux-gcp-6.8 vulnerabilities Ubuntu Security Notices (USN) · Oct 30, 2026
- USN-7651-6 linux-raspi vulnerabilities Ubuntu Security Notices (USN) · Oct 30, 2026
- USN-7651-5 linux-raspi-realtime vulnerabilities Ubuntu Security Notices (USN) · Oct 30, 2026
- USN-7652-1 linux-realtime vulnerabilities Ubuntu Security Notices (USN) · Oct 30, 2026
- USN-7521-1 linux, linux-azure, linux-azure-6.11, linux-gcp, linux-gcp-6.11, linux-hwe-6.11, linux-oem-6.11, linux-raspi, linux-realtime vulnerabilities Ubuntu Security Notices (USN) · Oct 30, 2026
- USN-7521-3 linux-lowlatency, linux-lowlatency-hwe-6.11, linux-oracle vulnerabilities Ubuntu Security Notices (USN) · Oct 30, 2026
- USN-7651-1 linux, linux-aws, linux-oem-6.8 vulnerabilities Ubuntu Security Notices (USN) · Oct 30, 2026
- WID-SEC-2025-1439 Dell Secure Connect Gateway: Mehrere Schwachstellen ermöglichen nicht spezifizierten Angriff BSI CERT-Bund (WID) · Oct 11, 2026
- SUSE-SU-2025:20270-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Mar 23, 2026
- SUSE-SU-2025:20192-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Mar 23, 2026
- SUSE-SU-2025:20260-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Mar 23, 2026
- SUSE-SU-2025:20190-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Mar 23, 2026
- SUSE-SU-2025:01919-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Feb 4, 2026
- SUSE-SU-2025:1177-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Feb 4, 2026
- SUSE-SU-2025:1180-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Feb 4, 2026
- SUSE-SU-2025:1178-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Feb 4, 2026
- ELSA-2025-20530 Important: Unbreakable Enterprise kernel security update (Oracle Linux 9) Oracle Linux Security Advisories (ELSA) · Aug 18, 2025
- ELSA-2025-20480 Important: Unbreakable Enterprise kernel security update (Oracle Linux 9) Oracle Linux Security Advisories (ELSA) · Jul 17, 2025