CVE-2026-80784 in Linux
요약
\~에 의해 VulDB • 2026. 09. 04.
Linux 커널에서 다음 취약점이 해결되었습니다:
mptcp: pm - teardown 중 할당-경쟁(race)으로 인한 메모리 누수 수정
mptcp_pm_destroy()는 소켓 종료(teardown) 동안 msk->pm.lock 하에서 msk->pm.anno_list 및 msk->pm.userspace_pm_local_addr_list를 비우며, 두 작업 간에 잠금을 해제합니다.
동일한 msk에서 동시에 발생하는 사용자 공간 PM의 genl ANNOUNCE는 mptcp_token_get_sock()을 통해 sock 참조를 유지하며, mptcp_pm_nl_announce_doit() 내에서 mptcp_userspace_pm_append_new_local_addr() 및 mptcp_pm_announced_alloc()를 호출합니다. 이 두 함수는 각각 해당 목록에 추가하기 위해 msk->pm.lock을 잠시 획득합니다. genl 핸들러가 sock 참조를 유지하고 있으므로, 핸들러가 완료되기 전에 mptcp_disconnect()를 통해 mptcp_destroy_common()이 sock refcount를 해제하지 않은 채 동일한 msk에서 mptcp_pm_destroy()를 실행할 수 있습니다.
잠금 획득 순서가 중첩되어 mptcp_pm_destroy()가 먼저 목록을 비우는 경우, 이후의 할당 작업은 해당 msk에 대해 아무도 반복(iterate)하지 않는 목록 헤드에 항목을 추가하게 되며, 이로 인해 항목이 누수됩니다. kmemleak는 사용자 공간 PM 대상 지속적 동시 ANNOUNCE 및 close 부하 하에서 mptcp_pm_add_addr 객체(mptcp_pm_announced_alloc() 발생)와 mptcp_pm_addr_entry 객체(mptcp_userspace_pm_append_new_local_addr() 발생) 모두를 보고합니다.
mptcp_pm_destroy()가 pm.lock 하에서 목록을 비우기 전에 설정하고, 할당 경로(pm paths)에서 pm.lock 하에서 확인하는 msk->pm.status에 MPTCP_PM_DESTROYING 비트를 추가합니다. 할당이 먼저 pm.lock을 획득하면 해당 항목은 mptcp_pm_destroy()가 해제할 때 이미 목록에 있게 됩니다. 또는 mptcp_pm_destroy()가 먼저 pm.lock을 획득하면, 이후의 할당 작업이 이 비트를 감지하여 작업을 거부합니다.
BRF(arXiv:2305.08782)를 확장한 MPTCP 프로토콜 흐름 하네스를 통해 발견되었습니다.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.