Goal Reached Thanks to every supporter — we hit 100%!

Goal: 1000 CNY · Raised: 1000 CNY

100.0%

CVE-2021-46939— tracing: Restructure trace_clock_global() to never block

EPSS 0.01% · P1
Get alerts for future matching vulnerabilitiesLog in to subscribe

I. Basic Information for CVE-2021-46939

Vulnerability Information

Have questions about the vulnerability? See if Shenlong's analysis helps!
View Shenlong Deep Dive ↗

Although we use advanced large model technology, its output may still contain inaccurate or outdated information.Shenlong tries to ensure data accuracy, but please verify and judge based on the actual situation.

Vulnerability Title
tracing: Restructure trace_clock_global() to never block
Source: NVD (National Vulnerability Database)
Vulnerability Description
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
Source: NVD (National Vulnerability Database)
CVSS Information
N/A
Source: NVD (National Vulnerability Database)
Vulnerability Type
N/A
Source: NVD (National Vulnerability Database)
Vulnerability Title
Linux kernel 安全漏洞
Source: CNNVD (China National Vulnerability Database)
Vulnerability Description
Linux kernel是美国Linux基金会的开源操作系统Linux所使用的内核。 Linux kernel 存在安全漏洞,该漏洞源于重构trace_clock_global()以永不阻塞。
Source: CNNVD (China National Vulnerability Database)
CVSS Information
N/A
Source: CNNVD (China National Vulnerability Database)
Vulnerability Type
N/A
Source: CNNVD (China National Vulnerability Database)

Affected Products

VendorProductAffected VersionsCPESubscribe
LinuxLinux 14131f2f98ac350ee9e73faed916d2238a8b6a0d ~ 91ca6f6a91f679c8645d7f3307e03ce86ad518c4 -
LinuxLinux 2.6.30 -

II. Public POCs for CVE-2021-46939

#POC DescriptionSource LinkShenlong Link
AI-Generated POCPremium

No public POC found.

Login to generate AI POC

III. Intelligence Information for CVE-2021-46939

登录查看更多情报信息。

Same Patch Batch · Linux · 2024-02-27 · 67 CVEs total

CVE-2021-46951tpm: efi: Use local variable for calculating final log size
CVE-2021-46971perf/core: Fix unconditional security_locked_down() call
CVE-2021-46970bus: mhi: pci_generic: Remove WQ_MEM_RECLAIM flag from state workqueue
CVE-2021-46969bus: mhi: core: Fix invalid error returning in mhi_queue
CVE-2021-46957riscv/kprobe: fix kernel panic when invoking sys_read traced by kprobe
CVE-2021-46956virtiofs: fix memory leak in virtio_fs_probe()
CVE-2021-46955openvswitch: fix stack OOB read while fragmenting IPv4 packets
CVE-2021-46954net/sched: sch_frag: fix stack OOB read while fragmenting IPv4 packets
CVE-2021-46953ACPI: GTDT: Don't corrupt interrupt mappings on watchdow probe failure
CVE-2021-46952NFS: fs_context: validate UDP retrans to prevent shift out-of-bounds
CVE-2021-46958btrfs: fix race between transaction aborts and fsyncs leading to use-after-free
CVE-2021-46950md/raid1: properly indicate failure when ending a failed write request
CVE-2021-46949sfc: farch: fix TX queue lookup in TX flush done handling
CVE-2021-46948sfc: farch: fix TX queue lookup in TX event handling
CVE-2021-46947sfc: adjust efx->xdp_tx_queue_count with the real number of initialized queues
CVE-2021-46945ext4: always panic when errors=panic is specified
CVE-2021-46944media: staging/intel-ipu3: Fix memory leak in imu_fmt
CVE-2021-46943media: staging/intel-ipu3: Fix set_fmt error handling
CVE-2021-46942io_uring: fix shared sqpoll cancellation hangs
CVE-2021-46941usb: dwc3: core: Do core softreset when switch mode

Showing top 20 of 67 CVEs. View all on vendor page → →

IV. Related Vulnerabilities

V. Comments for CVE-2021-46939

No comments yet


Leave a comment