漏洞标题
bpf:解决 rcu_tasks_trace 和 event_mutex 之间的死锁问题。
漏洞描述信息
## 概述
在Linux内核中,解决了一个关于`bpf`的死锁问题。具体来说,解决了一个发生在`rcu_tasks_trace`和`event_mutex`之间的死锁问题。
## 细节
死锁发生在以下两条路径上:
- **CPU A**
- `_free_event()`调用`perf_kprobe_destroy()`,进而调用`mutex_lock(&event_mutex)`并执行`perf_trace_event_unreg()`,最终调用`synchronize_rcu_tasks_trace()`。
- **CPU B**
- `bpf_prog_test_run_syscall()`调用`rcu_read_lock_trace()`,进而进入`bpf_prog_run_pin_on_cpu()`,随后调用`bpf_prog_load()`并执行`bpf_tracing_func_proto()`,最终调用`trace_set_clr_event()`,该函数尝试获取`event_mutex`。
为避免这种锁依赖带来的死锁,将`trace_set_clr_event()`委托给工作队列执行。
## 影响
该修复解决了由`rcu_tasks_trace`和`event_mutex`之间的锁依赖导致的死锁问题,提升了系统的稳定性和可靠性。
## 影响版本
未具体列出受影响的Linux内核版本。
CVSS信息
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
漏洞类别
加锁机制不恰当
漏洞标题
bpf: Fix deadlock between rcu_tasks_trace and event_mutex.
漏洞描述信息
In the Linux kernel, the following vulnerability has been resolved:
bpf: Fix deadlock between rcu_tasks_trace and event_mutex.
Fix the following deadlock:
CPU A
_free_event()
perf_kprobe_destroy()
mutex_lock(&event_mutex)
perf_trace_event_unreg()
synchronize_rcu_tasks_trace()
There are several paths where _free_event() grabs event_mutex
and calls sync_rcu_tasks_trace. Above is one such case.
CPU B
bpf_prog_test_run_syscall()
rcu_read_lock_trace()
bpf_prog_run_pin_on_cpu()
bpf_prog_load()
bpf_tracing_func_proto()
trace_set_clr_event()
mutex_lock(&event_mutex)
Delegate trace_set_clr_event() to workqueue to avoid
such lock dependency.
CVSS信息
N/A
漏洞类别
N/A