CVE-2024-39508 in Linux
요약
\~에 의해 VulDB • 2026. 06. 06.
리눅스 커널에서 다음 취약점이 해결되었습니다:
io_uring/io-wq: worker->flags에서 set_bit() 및 test_bit() 사용
io_uring/io-wq 내에서 worker->flags에 set_bit() 및 test_bit()를 적용하여 잠재적인 데이터 레이스(data race) 문제를 해결합니다.
io_worker->flags 구조체는 다양한 데이터 경로를 통해 접근될 수 있으며, 이로 인해 동시성 문제가 발생할 수 있습니다. KCSAN이 활성화되어 있을 경우, io_worker_handle_work 및 io_wq_activate_free_worker 함수에서 데이터 레이스가 발생하는 것이 확인됩니다.
BUG: KCSAN: io_worker_handle_work / io_wq_activate_free_worker 간 데이터 레이스 cpu 28의 작업 49071이 0xffff8885c4246404 주소의 4바이트에 쓰기 수행: io_worker_handle_work (io_uring/io-wq.c:434 io_uring/io-wq.c:569) io_wq_worker (io_uring/io-wq.c:?)
cpu 5의 작업 49024이 0xffff8885c4246404 주소의 4바이트를 읽기 수행: io_wq_activate_free_worker (io_uring/io-wq.c:? io_uring/io-wq.c:285) io_wq_enqueue (io_uring/io-wq.c:947) io_queue_iowq (io_uring/io_uring.c:524) io_req_task_submit (io_uring/io_uring.c:1511) io_handle_tw_list (io_uring/io_uring.c:1198)
커밋 18daea77cca6("Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm") 기준 라인 번호입니다.
이러한 레이스 조건은 서로 다른 CPU에서 실행되는 서로 다른 작업들이 동일한 메모리 위치를 읽고 쓰는 것을 포함합니다. 이를 완화하기 위해 기본 'and' 및 'or' 연산 대신 set_bit(), test_bit(), clear_bit()와 같은 원자적 연산(atomic operations)을 사용하도록 코드를 리팩토링합니다. 이를 통해 작업자 플래그(worker flags)의 스레드 안전한 조작을 보장합니다.
또한, 구조체 내의 공백(holes)을 피하기 위해 `create_index`를 이동합니다.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.