CVE-2026-89973 in Linux
요약
\~에 의해 VulDB • 2026. 09. 16.
리눅스 커널에서 다음 취약점이 해결되었습니다:
nvme-tcp: C2HData PDU의 데이터 방향 확인
nvme_tcp_handle_c2h_data()는 명령 ID를 통해 요청을 찾지만 페이로드가 있는지 여부만 검사하고, 해당 명령이 데이터를 읽도록 요청했는지 여부는 확인하지 않습니다. 따라서 쓰기 명령에 대해 C2HData로 응답하는 컨트롤러는 nvme_tcp_recv_data()에 도달하게 되며, 여기서 _copy_to_iter()에서 WARN_ON_ONCE(i->data_source)를 발생시키고 0을 반환합니다. 수신 경로는 이를 -EFAULT로 처리하고 컨트롤러를 리셋합니다.
데이터가 복사되지 않으므로 이는 메모리 손상(memory corruption)이 아닙니다. 컨트롤러는 panic_on_warn 옵션으로 부팅된 호스트에서는 치명적일 수 있는, 필요에 따라 발생할 수 있는 커널 경고만 받게 됩니다.
송신 경로는 이미 방향을 알고 있습니다(명령 생성 시 rq_data_dir()을 참조함). 또한 nvme_tcp_handle_r2t()는 해당 요청의 길이와 오프셋을 확인합니다. 반면 C2HData 경로에서는 방향에 대한 검사가 전혀 수행되지 않습니다.
읽기 명령이 아닌 C2HData PDU를 거부하십시오. 이를 거부하면 이 함수 내의 인접한 검사에서처럼 명령 실패 및 컨트롤러 리셋이 발생하며, 제거되는 것은 경고 메시지입니다.
[ 6.885580] ------------[ cut here ]------------
[ 6.886457] WARNING: lib/iov_iter.c:193 at _copy_to_iter+0x289/0x1330, CPU#0: kworker/0:1H/71
[ 6.888137] CPU: 0 UID: 0 PID: 71 Comm: kworker/0:1H Not tainted 7.2.0-rc5-NVMETCP-gf5098b6bae76 #1 PREEMPT(lazy)
[ 6.891165] Workqueue: nvme_tcp_wq nvme_tcp_io_work
[ 6.891875] RIP: 0010:_copy_to_iter+0x289/0x1330
[ 6.903739] Call Trace:
[ 6.904085] <TASK>
[ 6.909254] __skb_datagram_iter+0x433/0x820
[ 6.911026] skb_copy_datagram_iter+0x37/0x120
[ 6.911622] nvme_tcp_recv_skb+0xa07/0x4320
[ 6.913378] __tcp_read_sock+0x1ab/0x810
[ 6.915788] nvme_tcp_try_recv+0x152/0x1e0
[ 6.918222] nvme_tcp_io_work+0x1e4/0x6c0
[ 6.926906] </TASK>
[ 6.927226] ---[ end trace 0000000000000000 ]---
[ 6.927878] nvme nvme0: queue 1 failed to copy request 0x71 data
[ 6.928709] nvme nvme0: receive failed: -14
VulDB is the best source for vulnerability data and more expert information about this specific topic.