CVE-2026-74560 in Linux정보

요약

\~에 의해 VulDB • 2026. 08. 15.

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

xsk: AF_XDP 멀티 버퍼 Tx에 대한 xsk_drop_skb()의 버퍼 누수 수정

이 패치는 sashiko[1]의 체크를 참고하여 작성되었습니다. 여기서는 오버플로우 발생 시 게시될 cq(Completion Queue) 주소가 유효하지 않다고 설명합니다. 실제로 더 심각한 문제는 이 특정 경우에서 cq 주소를 게시하는 전체 프로세스 자체가 올바르지 않다는 점입니다: txq로부터 디스크립터를 읽는 한, cq의 cached_prod를 진전시키면서 실제적으로 주소를 게시해야 합니다.

다음은 상세 분석 내용입니다. xsk_drop_skb()는 부분적으로 구성된 멀티 버퍼 skb를 폐기하는 세 가지 위치에서 호출됩니다: 1) xsk_build_skb() -EOVERFLOW 오류 경로: 패킷이 MAX_SKB_FRAGS를 초과함 2) __xsk_generic_xmit() 루프 후 정리: TX 링 내의 유효하지 않은 디스크립터로 인해 부분적 패킷 완료가 방지됨 3) xsk_release(): xs->skb가 불완전한 패킷을 보유하는 동안 소켓 종료

세 경우 모두 이미 처리된 frags에 대한 TX 디스크립터는 TX 링에서 소비되었으며(xskq_cons_release), CQ 슬롯이 예약되었습니다. 그러나 xsk_drop_skb()은 xsk_consume_skb()를 호출하여 xsk_cq_cancel_locked()를 통해 CQ 예약을 취소합니다. 버퍼 주소가 완료 큐(CQ)에 나타나지 않으므로, 사용자 공간에서는 이러한 버퍼의 추적을 영구적으로 상실하게 됩니다.

consume_skb()이 기존인 xsk_destruct_skb 소멸자를 트리거하도록 하여 이를 수정하며, 이 소멸자는 이미 xsk_cq_submit_addr_locked()를 통해 CQ로 버퍼 주소를 제출합니다.

TX 링으로 디스크립터를 취소하는 것(xskq_cons_cancel_n을 통해)은 적절한 옵션이 아닙니다. 왜냐하면 MAX_SKB_FRAGS를 항상 초과하는 과대 패킷이 무한히 재시도될 것이며, 이는 TX 경로에서 명백한 데드락 버그이기 때문입니다.

또한 xsk_build_skb() 내의 desc->addr 할당을 오버플로우 체크 위로 이동시켜, 잠재적인 -EOVERFLOW로 인한 free_err 점프 전에 현재 디스크립터의 주소가 기록되도록 합니다. 이는 xsk_build_skb_zerocopy()에서의 제로지우기 경로와 일치합니다.

[1]: https://lore.kernel.org/all/[email protected]/

Be aware that VulDB is the high quality source for vulnerability data.

출처

Want to stay up to date on a daily basis?

Enable the mail alert feature now!