CVE-2024-46704 in Linux
Tóm tắt
Bởi VulDB • 23/06/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
workqueue: Sửa lỗi race condition dữ liệu giả (spurious data race) trong __flush_work()
Khi làm rỗng một mục công việc để hủy bỏ, hàm __flush_work() biết rằng nó sở hữu độc quyền đối với mục công việc thông qua bit PENDING. Commit 134874e2eee9 ("workqueue: Cho phép cancel_work_sync() và disable_work() từ ngữ cảnh atomic trên các work item BH") đã thêm một lệnh đọc @work->data để xác định xem có nên sử dụng chế độ chờ bận (busy wait) cho các work item BH đang bị hủy bỏ hay không. Mặc dù việc đọc là an toàn khi @from_cancel, nhưng @work->data được đọc trước khi kiểm tra @from_cancel nhằm đơn giản hóa cấu trúc mã:
data = *work_data_bits(work); if (from_cancel && !WARN_ON_ONCE(data & WORK_STRUCT_PWQ) && (data & WORK_OFFQ_BH)) {
Mặc dù dữ liệu đọc không bao giờ được sử dụng nếu !@from_cancel, điều này có thể kích hoạt phát hiện race condition dữ liệu KCSAN một cách giả mạo:
================================================================== BUG: KCSAN: data-race trong __flush_work / __flush_work
ghi vào địa chỉ 0xffff8881223aa3e8 với độ dài 8 bytes bởi task 3998 trên cpu 0: instrument_write include/linux/instrumented.h:41 [inline]
___set_bit include/asm-generic/bitops/instrumented-non-atomic.h:28 [inline]
insert_wq_barrier kernel/workqueue.c:3790 [inline]
start_flush_work kernel/workqueue.c:4142 [inline]
__flush_work+0x30b/0x570 kernel/workqueue.c:4178 flush_work kernel/workqueue.c:4229 [inline]
...
đọc từ địa chỉ 0xffff8881223aa3e8 với độ dài 8 bytes bởi task 50 trên cpu 1: __flush_work+0x42a/0x570 kernel/workqueue.c:4188 flush_work kernel/workqueue.c:4229 [inline]
flush_delayed_work+0x66/0x70 kernel/workqueue.c:4251 ...
giá trị thay đổi: 0x0000000000400000 -> 0xffff88810006c00d
Tái cấu trúc mã sao cho @from_cancel được kiểm tra trước khi truy cập vào @work->data. Vấn đề duy nhất là kích hoạt phát hiện KCSAN một cách giả mạo. Điều này không cần sử dụng READ_ONCE() hoặc các bộ định nghĩa truy cập khác.
Không có thay đổi về chức năng.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.