CVE-2021-46939 json
tracing: Restructure trace_clock_global() to never block
published 2024-02-27 2 y ago modified 2026-06-17 4 mo ago also EUVD-2021-33587
- cvss
- 5.5
- version 3.1, CNA
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- 0.2%
- EPSS 0.2% chance of exploitation in 30 days, percentile 16%
- public exploits
- 0
- none known
Summary
In the Linux kernel, the following vulnerability has been resolved:
tracing: Restructure trace_clock_global() to never block
It was reported that a fix to the ring buffer recursion detection would cause a hung machine when performing suspend / resume testing. The following backtrace was extracted from debugging that case:
Call Trace: trace_clock_global+0x91/0xa0 __rb_reserve_next+0x237/0x460 ring_buffer_lock_reserve+0x12a/0x3f0 trace_buffer_lock_reserve+0x10/0x50 __trace_graph_return+0x1f/0x80 trace_graph_return+0xb7/0xf0 ? trace_clock_global+0x91/0xa0 ftrace_return_to_handler+0x8b/0xf0 ? pv_hash+0xa0/0xa0 return_to_handler+0x15/0x30 ? ftrace_graph_caller+0xa0/0xa0 ? trace_clock_global+0x91/0xa0 ? __rb_reserve_next+0x237/0x460 ? ring_buffer_lock_reserve+0x12a/0x3f0 ? trace_event_buffer_lock_reserve+0x3c/0x120 ? trace_event_buffer_reserve+0x6b/0xc0 ? trace_event_raw_event_device_pm_callback_start+0x125/0x2d0 ? dpm_run_callback+0x3b/0xc0 ? pm_ops_is_empty+0x50/0x50 ? platform_get_irq_byname_optional+0x90/0x90 ? trace_device_pm_callback_start+0x82/0xd0 ? dpm_run_callback+0x49/0xc0
With the following RIP:
RIP: 0010:native_queued_spin_lock_slowpath+0x69/0x200
Since the fix to the recursion detection would allow a single recursion to happen while tracing, this lead to the trace_clock_global() taking a spin lock and then trying to take it again:
ring_buffer_lock_reserve() { trace_clock_global() { arch_spin_lock() { queued_spin_lock_slowpath() { /* lock taken */ (something else gets traced by function graph tracer) ring_buffer_lock_reserve() { trace_clock_global() { arch_spin_lock() { queued_spin_lock_slowpath() { /* DEAD LOCK! */
Tracing should *never* block, as it can lead to strange lockups like the above.
Restructure the trace_clock_global() code to instead of simply taking a lock to update the recorded "prev_time" simply use it, as two events happening on two different CPUs that calls this at the same time, really doesn't matter which one goes first. Use a trylock to grab the lock for updating the prev_time, and if it fails, simply try again the next time. If it failed to be taken, that means something else is already updating it.
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=212761
Patch / fix
- Linux Linux 4.4.269, 4.9.269, 4.14.233, 4.19.191, 5.4.118, 5.10.36, 5.11.20, 5.12.3, 5.13
- linux Debian 14, Debian 13, Debian 12 5.10.38-1
debian advisories DEBIAN-CVE-2021-46939
- linux Ubuntu 18.04 LTS 4.15.0-151.157
- linux Ubuntu 20.04 LTS 5.4.0-77.86
- linux-aws Ubuntu 18.04 LTS 4.15.0-1109.116
- linux-aws Ubuntu 20.04 LTS 5.4.0-1051.53
- linux-gcp Ubuntu 20.04 LTS 5.4.0-1046.49
- linux-kvm Ubuntu 18.04 LTS 4.15.0-1097.99
- linux-kvm Ubuntu 20.04 LTS 5.4.0-1041.42
- linux-azure Ubuntu 20.04 LTS 5.4.0-1051.53
ubuntu advisories UBUNTU-CVE-2021-46939
Ubuntu security data © Canonical Ltd., from https://github.com/canonical/ubuntu-security-notices via OSV; changed: normalised to fixed package versions per release. CC BY-SA 4.0
- kernel-rt RHEL 8 4.18.0-553.16.1.rt7.357.el8_10
- kernel-rt-kvm RHEL 8 4.18.0-553.16.1.rt7.357.el8_10
- kernel-rt-core RHEL 8 4.18.0-553.16.1.rt7.357.el8_10
- kernel-rt-modules RHEL 8 4.18.0-553.16.1.rt7.357.el8_10
- kernel-rt-debug-kvm RHEL 8 4.18.0-553.16.1.rt7.357.el8_10
- kernel-rt-debug-core RHEL 8 4.18.0-553.16.1.rt7.357.el8_10
- kernel-rt-debug-modules RHEL 8 4.18.0-553.16.1.rt7.357.el8_10
- kernel-rt-modules-extra RHEL 8 4.18.0-553.16.1.rt7.357.el8_10
red hat advisories RHSA-2024:5102RHSA-2024:5101
- kernel-syms SLES for SAP 12 SP5, SLES 12 SP5 4.12.14-122.216.1
- kernel-source SLES for SAP 12 SP5, SLES 12 SP5 4.12.14-122.216.1
- kernel-default SLES for SAP 12 SP5, SLES 12 SP5, SLE Workstation Extension 12 SP5 +2 more 4.12.14-122.216.1
- kernel-obs-build SLE Software Development Kit 12 SP5 4.12.14-122.216.1
- kernel-rt SLE Real Time 12 SP5 4.12.14-10.182.1
- kernel-syms-rt SLE Real Time 12 SP5 4.12.14-10.182.1
- kernel-rt_debug SLE Real Time 12 SP5 4.12.14-10.182.1
- kernel-source-rt SLE Real Time 12 SP5 4.12.14-10.182.1
suse advisories SUSE-SU-2024:1870-1SUSE-SU-2024:1646-1SUSE-SU-2024:1643-1SUSE-SU-2024:1489-1SUSE-SU-2024:1465-1SUSE-SU-2024:1454-1
- kernel AlmaLinux 8 4.18.0-553.16.1.el8_10
- perf AlmaLinux 8 4.18.0-553.16.1.el8_10
- bpftool AlmaLinux 8 4.18.0-553.16.1.el8_10
- kernel-core AlmaLinux 8 4.18.0-553.16.1.el8_10
- kernel-tools AlmaLinux 8 4.18.0-553.16.1.el8_10
- python3-perf AlmaLinux 8 4.18.0-553.16.1.el8_10
- kernel-modules AlmaLinux 8 4.18.0-553.16.1.el8_10
- kernel-zfcpdump AlmaLinux 8 4.18.0-553.16.1.el8_10
almalinux advisories ALSA-2024:5101ALSA-2024:5102
- kernel Rocky Linux 8 4.18.0-553.16.1.el8_10.cloud.0.1
- kernel-rt Rocky Linux 8 4.18.0-553.16.1.rt7.357.el8_10
- kernel Rocky Linux 8 4.18.0-553.16.1.el8_10
rocky linux advisories RXSA-2024:5101RLSA-2024:5102RLSA-2024:5101
- git.kernel.org/stable/c/91ca6f6a91f679c8645d7f3307e03ce86ad518c4 commit
- git.kernel.org/stable/c/859b47a43f5a0e5b9a92b621dc6ceaad39fb5c8b commit
- git.kernel.org/stable/c/1fca00920327be96f3318224f502e4d5460f9545 commit
- git.kernel.org/stable/c/d43d56dbf452ccecc1ec735cd4b6840118005d7c commit
- git.kernel.org/stable/c/c64da3294a7d59a4bf6874c664c13be892f15f44 commit
- git.kernel.org/stable/c/a33614d52e97fc8077eb0b292189ca7d964cc534 commit
- git.kernel.org/stable/c/6e2418576228eeb12e7ba82edb8f9500623942ff commit
- git.kernel.org/stable/c/2a1bd74b8186d7938bf004f5603f25b84785f63e commit
- git.kernel.org/stable/c/aafe104aa9096827a429bc1358f8260ee565b7cc commit
Vendor advisories
What the vendors themselves say about their products: affected, fixed or not affected, and what to do.
red hat product security vex CVE-2021-46939 updated cvss 5.5
kernel: tracing: Restructure trace_clock_global() to never block
-
Red Hat Enterprise Linux 6 perf, kernel, python-perf, kernel-kdump, kernel-firmware, kernel-bootwrapper, +1 more Red Hat Enterprise Linux 7 perf, kernel, bpftool, kernel-rt, python-perf, kernel-kdump, +8 moreaffected: no fix planned “Out of support scope”
-
Red Hat Enterprise Linux BaseOS (v. 8) perf 4.18.0-553.16.1.el8_10, kernel 4.18.0-553.16.1.el8_10, bpftool 4.18.0-553.16.1.el8_10, kernel-core 4.18.0-553.16.1.el8_10, kernel-tools 4.18.0-553.16.1.el8_10, python3-perf 4.18.0-553.16.1.el8_10, +15 more Red Hat Enterprise Linux CRB (v. 8) kernel-debuginfo-common-x86_64 4.18.0-553.16.1.el8_10, kernel-debuginfo-common-aarch64 4.18.0-553.16.1.el8_10, kernel-debuginfo-common-ppc64le 4.18.0-553.16.1.el8_10fixed: vendor fix RHSA-2024:5101
-
Red Hat Enterprise Linux NFV (v. 8) kernel-rt 4.18.0-553.16.1.rt7.357.el8_10, kernel-rt-kvm 4.18.0-553.16.1.rt7.357.el8_10, kernel-rt-core 4.18.0-553.16.1.rt7.357.el8_10, kernel-rt-modules 4.18.0-553.16.1.rt7.357.el8_10, kernel-rt-debug-kvm 4.18.0-553.16.1.rt7.357.el8_10, kernel-rt-debug-core 4.18.0-553.16.1.rt7.357.el8_10, +4 more Red Hat Enterprise Linux RT (v. 8) kernel-rt 4.18.0-553.16.1.rt7.357.el8_10, kernel-rt-core 4.18.0-553.16.1.rt7.357.el8_10, kernel-rt-modules 4.18.0-553.16.1.rt7.357.el8_10, kernel-rt-debug-core 4.18.0-553.16.1.rt7.357.el8_10, kernel-rt-debug-modules 4.18.0-553.16.1.rt7.357.el8_10, kernel-rt-modules-extra 4.18.0-553.16.1.rt7.357.el8_10, +2 morefixed: vendor fix RHSA-2024:5102
-
Red Hat Enterprise Linux 9 rv, perf, rtla, kernel, bpftool, libperf, +83 morenot affected: vulnerable code not present
Red Hat CSAF VEX © Red Hat, Inc., from https://security.access.redhat.com/data/csaf/v2/vex/; changed: reduced to product statuses and remediations. CC BY 4.0 · csaf
CISA SSVC
- Exploitation
- none
- Automatable
- no
- Technical impact
- partial
- Assessed
- 18 mo ago
Exploit prediction
0.25% chance of exploitation in the next 30 days, higher than 16% of all scored CVEs (FIRST EPSS, 2026-11-08).
CVSS scores
| assigned by | version | score | vector |
|---|---|---|---|
| CISA ADP | 3.1 | 5.5 | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H |
| NVD | 3.1 | 5.5 | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H |
| CNA | 3.1 | 5.5 | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H |
Affected products
- Linux Linux
Classification
- Weakness
- Technology feeds
References
-
git.kernel.org
/stable/c/91ca6f6a91f679c8645d7f3307e03ce86ad518c4
patch
-
git.kernel.org
/stable/c/859b47a43f5a0e5b9a92b621dc6ceaad39fb5c8b
patch
-
git.kernel.org
/stable/c/1fca00920327be96f3318224f502e4d5460f9545
patch
-
git.kernel.org
/stable/c/d43d56dbf452ccecc1ec735cd4b6840118005d7c
patch
-
git.kernel.org
/stable/c/c64da3294a7d59a4bf6874c664c13be892f15f44
patch
-
git.kernel.org
/stable/c/a33614d52e97fc8077eb0b292189ca7d964cc534
patch
-
git.kernel.org
/stable/c/6e2418576228eeb12e7ba82edb8f9500623942ff
patch
-
git.kernel.org
/stable/c/2a1bd74b8186d7938bf004f5603f25b84785f63e
patch
-
git.kernel.org
/stable/c/aafe104aa9096827a429bc1358f8260ee565b7cc
patch
Sources
- CVE List CVE-2021-46939
- NVD CVE-2021-46939
Fencer Vulns keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.