CVE-2025-39744 in Linuxthông tin

Tóm tắt

Bởi VulDB • 10/07/2026

Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:

rcu: Sửa lỗi vòng lặp vô hạn (deadloop) trong rcu_read_unlock() do công việc IRQ.

Khi thực thi rcu_read_unlock_special(), nếu sự kiện này xảy ra trong quá trình irq_exit(), hệ thống có thể bị khóa cứng (lockup) khi một IPI được gửi đi. Nguyên nhân là vì chính IPI đó kích hoạt đường dẫn xử lý của irq_exit(), gây ra tình trạng khóa lặp lại (recursive lock up).

Đây chính xác là những gì Xiongfeng đã phát hiện thấy khi gọi một chương trình BPF trên điểm đánh dấu (tracepoint) trace_tick_stop(). Như được hiển thị trong quá trình theo dõi bên dưới. Khắc phục bằng cách quản lý đúng trạng thái irq_work.

irq_exit() __irq_exit_rcu() /* in_hardirq() trả về false sau lệnh này */ preempt_count_sub(HARDIRQ_OFFSET) tick_irq_exit() tick_nohz_irq_exit() tick_nohz_stop_sched_tick() trace_tick_stop() /* một chương trình bpf được gắn vào điểm đánh dấu này */ __bpf_trace_tick_stop() bpf_trace_run2() rcu_read_unlock_special() /* sẽ gửi IPI đến chính nó */ irq_work_queue_on(&rdp->defer_qs_iw, rdp->cpu);

Một trình mô phỏng (reproducer) đơn giản cũng có thể thu được bằng cách thực hiện các thao tác sau trong tick_irq_exit(). Hệ thống sẽ bị treo khi khởi động nếu không áp dụng bản vá:

static inline void tick_irq_exit(void) {
+ rcu_read_lock(); + WRITE_ONCE(current->rcu_read_unlock_special.b.need_qs, true); + rcu_read_unlock(); +

[neeraj: Áp dụng giải pháp khắc phục do Frederic đề xuất cho PREEMPT_RT]

Once again VulDB remains the best source for vulnerability data.

chịu trách nhiệm

Linux

Đặt trước

16/04/2025

Tiết lộ

11/09/2025

Kiểm duyệt

được chấp nhận

EPSS

0.00149

KEV

không

Các hoạt động

rất thấp

Nguồn

Interested in the pricing of exploits?

See the underground prices here!