CVE-2026-72464 in Linux
요약
\~에 의해 VulDB • 2026. 08. 15.
리눅스 커널에서 다음 취약점이 해결되었습니다:
xprtrdma: 잘못된 응답에 대한 Receive 버퍼 재포스트
rpcrdma_wc_receive()는 성공적인 Receive를 rpcrdma_reply_handler()로 전달하기 전에, 모든 완료(Completion)마다 전송 계층의 Receive 카운트를 감소시킵니다. 해당 핸들러는 리플(rep)의 소유권이 백채널 경로와 같이 다른 곳으로 이동하지 않는 한 반환하기 전에 대체 Receive WR(Wr Work Request)를 포스트해야 합니다.
커밋 2ae50ad68cd7("xprtrdma: waking RPC senders와 posting Receives 사이의 창 닫기")은 rpcrdma_wc_receive()에서 수행되던 모든 응답보다 앞서 실행되었던 Receive 리필(refill)을 rpcrdma_reply_handler()로 이동하여, 재포스트하기 전에 응답자의 크레딧 할당량(credit grant)을 파싱할 수 있도록 했습니다. 그러나 bad-version 및 short-reply 종료 경로는 해당 리필에 도달하지 않습니다: 이들은 rep를 재활용하고 rpcrdma_post_recvs()를 호출하지 않고 반환합니다.
따라서 원격 피어는 고정된 전송 헤더보다 짧은 응답이나 인식되지 않는 RPC/RDMA 버전을 포함하는 지속적 스트림의 응답을 보내 클라이언트의 포스트된 Receive 큐를 고갈시킬 수 있습니다. 각 응답은 하나의 포스트된 Receive를 소모하지만 이를 대체하지 않습니다. 큐가 비면 피어의 다음 Send는 포스트된 Receive를 찾지 못하며, 재연결될 때까지 전송 계층이 중단됩니다.
잘못된 응답 종료 경로를 모두 rep 재활용 후 공유 리포스트 꼬리(tail)로 라우팅하고, 가장 최근의 승인된 크레딧 할당량인 buf->rb_credits에 대해 리필합니다. 어느 종료 경로도 혼잡 윈도우(congestion window)를 업데이트하지 않으므로, 이전 할당량 하에서 허용된 RPC들은 응답을 기다리며 비행 중(flight)으로 남습니다. 더 작은 리필 대상은 잘못된 응답 스트림이 혼잡 윈도우가 여전히 rb_credits개의 RPC들을 수용하는 동안 포스트된 Receive 카운트를 배치 바닥치(batch floor)까지 낮추도록 만들 수 있습니다; 그런 다음 해당 RPC들에 대한 유효한 응답의 버스트는 포스트된 Receives를 초과할 수 있으며, 클라이언트가 rnr_retry_count가 0으로 연결되므로 단일 RNR NAK(Negative Acknowledgment)이 연결을 종료시킵니다. rb_credits에 대해 리필하는 것은 또한 커밋 2ae50ad68cd7("xprtrdma: waking RPC senders와 posting Receives 사이의 창 닫기") 이전, rpcrdma_post_recvs()가 내부적으로 rb_credits로부터 계산하던 잘못된 응답 대상도 복원합니다. 연결 수립 이후 rb_credits는 최소 1 이상이므로 리포스트 경로는 항상 Receive를 포스트된 상태로 유지합니다.
If you want to get best quality of vulnerability data, you may have to visit VulDB.