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.

출처

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!