CVE-2026-98580 in Linux정보

요약

\~에 의해 VulDB • 2026. 10. 18.

리눅스 커널에서 다음 취약점이 해결되었습니다:

nfc: llcp: accept_queue 수명 주기에서의 Race Condition 수정

nfc_llcp_socket_release() 함수에서는 소켓과 리스너의 accept 큐가 로컬 소켓 rwlock 및 bh_lock_sock() 하에서 순회됩니다. 그러나 bh_lock_sock()은 accept() 동안 nfc_llcp_accept_dequeue()에 의해 보유되는 프로세스 컨텍스트 lock_sock()과의 동기화가 이루어지지 않습니다. socket_release()는 sock_owned_by_user()를 확인하지 않으므로, 두 경로가 동일한 자식 소켓을 동시에 unlink하고 해제하여 use-after-free 또는 nfc_llcp_accept_unlink()에서 child->parent의 NULL 포인터 역참조를 초래할 수 있습니다.

이 동기화 Race Condition을 해결하기 위해 nfc_llcp_socket_release()가 bh_lock_sock() 대신 프로세스 컨텍스트 lock_sock()을 사용하도록 수정합니다:

1. nfc_llcp_sock_list_pop()를 사용하여 쓰기 잠금 하에서 로컬 소켓 목록으로부터 소켓을 팝하여, rwlock을 보유하지 않고도 lock_sock()을 획득할 수 있도록 합니다. 2. lock_sock()은 슬립(sleep) 가능하므로, nfc_llcp_local 구조체의 최종 해제를 작업 큐(release_work)로 지연시킵니다. 이는 마지막 로컬 참조가 softirq 컨텍스트에서 해제될 때 발생하는 sleeping-in-atomic 버그를 방지합니다. 또한 등록부터 최종 파괴까지 local에 대한 단일 장치 참조를 유지합니다. 3. nfc_llcp_local_get()에서는 teardown이 예약된 local 객체가 부활하는 것을 방지하기 위해 kref_get_unless_zero()를 사용합니다. 4. llcp_sock_accept()에서는 schedule_timeout()에서 깨어난 후 리스너 소켓 상태가 여전히 LLCP_LISTEN인지 확인하여, 리스너가 동시에 종료되는 경우의 멈춤(hangs)을 방지합니다. 5. 리스너 해제 중 미수락된 자식 소켓들을 unlink할 때, local->sockets로부터 이를 분리하고 sock_orphan()을 호출한 후 sock_put()를 통해 초기 sk_alloc 생성 참조를 해제합니다. 6. nfc_llcp_accept_unlink() 함수에 NULL 검사를 추가하여 부모 접근을 보호함으로써 idempotent하게 만듭니다.

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

책임이 있는

Linux

예약하다

2026. 09. 25.

모더레이션

수락

항목

VDB-422087

EPSS

0.00000

출처

Do you want to use VulDB in your project?

Use the official API to access entries easily!