CVE-2026-43194 in Linux
요약
\~에 의해 VulDB • 2026. 05. 11.
리눅스 커널에서 다음 취약점이 해결되었습니다:
net: GSO 프레임의 xmit 오류 소비
udpgro_frglist.sh 및 udpgro_bench.sh는 현재 NIPA에서 가장 불안정한(flakiest) 테스트입니다. 이 테스트들은 동일한 방식으로 실패하며, TCP GRO 테스트가 가끔 멈추고 10분 후에 테스트가 종료됩니다.
이 테스트들은 veth를 사용하여 GRO를 시뮬레이션합니다. veth에 단순한("return XDP_PASS;") XDP 프로그램을 연결하여 TSO를 비활성화하고 NAPI를 활성화합니다.
실패 모드를 조사하면, 패킷 드롭(burst of drops) 발생 후 연결이 완전히 멈추는 것을 확인할 수 있습니다. 송신자의 snd_nxt는 시퀀스 번호 N [1]에 있지만, 수신자는 N + 3 * MSS [2]까지 수신했다고 주장합니다. 퍼즐의 마지막 조각은 송신자의 재전송(rtx) 큐가 비어 있지 않다는 것입니다(예: rtx 큐의 블록이 시퀀스 번호 N - 4 * MSS [3]에 있음).
이 상태에서 송신자는 rtx 큐에서 단일 세그먼트로 재전송을 보내며, 시퀀스 번호는 N-4*MSS:N-3*MSS [3]입니다. 수신자는 이를 확인하고 N + 3 * MSS [2]까지의 ACK를 응답합니다. 그러나 송신자는 해당 데이터 범위를 보낸 기억이 없기 때문에 이 ACK를 TCP_ACK_UNSENT_DATA로 거부합니다 [1]. 그리고 우리는 멈춰버립니다.
근본 원인은 xmit 반환 코드의 혼란입니다. veth는 프레임을 전송(xmit)할 수 없을 때 오류를 반환합니다. 다음과 같은 손실 이벤트가 발생합니다:
------------------------------------------------- | GSO 슈퍼 프레임 1 | GSO 슈퍼 프레임 2 | |-----------------------------------------------| | seg | seg | seg | seg | seg | seg | seg | seg | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ------------------------------------------------- x ok ok | ok ok ok \\ snd_nxt
"x"는 veth에 의해 패킷이 손실되었음을 의미하며, "ok"는 전송되었음을 의미합니다. 이 테스트에서 veth는 TSO가 비활성화되어 있으므로 개별 세그먼트를 인식합니다. 세그먼트 1은 재전송 큐에 있으며 재전송될 것입니다.
그렇다면 송신자는 명확히 세그먼트 8까지 보냈음에도 불구하고 왜 snd_nxt를 진행하지 않았을까요? tcp_write_xmit()는 코어로부터의 반환 코드를 데이터가 전혀 전송되지 않았음을 의미하는 것으로 해석합니다. TCP는 개별 세그먼트가 아닌 GSO 슈퍼 프레임을 다루므로, 문제의 핵심은 단일 세그먼트의 손실이 모든 세그먼트의 손실로 해석될 수 있다는 점입니다. TCP는 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없습니다.
이 문제는 TCP가 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없기 때문에 발생합니다. TCP는 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없습니다.
이 문제는 TCP가 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없기 때문에 발생합니다. TCP는 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없습니다.
이 문제는 TCP가 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없기 때문에 발생합니다. TCP는 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없습니다.
이 문제는 TCP가 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없기 때문에 발생합니다. TCP는 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없습니다.
이 문제는 TCP가 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없기 때문에 발생합니다. TCP는 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없습니다.
이 문제는 TCP가 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없기 때문에 발생합니다. TCP는 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없습니다.
이 문제는 TCP가 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없기 때문에 발생합니다. TCP는 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없습니다.
이 문제는 TCP가 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없기 때문에 발생합니다. TCP는 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없습니다.
이 문제는 TCP가 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없기 때문에 발생합니다. TCP는 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없습니다.
이 문제는 TCP가 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없기 때문에 발생합니다. TCP는 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없습니다.
이 문제는 TCP가 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없기 때문에 발생합니다. TCP는 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없습니다.
이 문제는 TCP가 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없기 때문에 발생합니다. TCP는 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없습니다.
이 문제는 TCP가 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없기 때문에 발생합니다. TCP는 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없습니다.
이 문제는 TCP가 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없기 때문에 발생합니다. TCP는 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없습니다.
이 문제는 TCP가 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없기 때문에 발생합니다. TCP는 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없습니다.
이 문제는 TCP가 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없기 때문에 발생합니다. TCP는 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없습니다.
이 문제는 TCP가 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없기 때문에 발생합니다. TCP는 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없습니다.
이 문제는 TCP가 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없기 때문에 발생합니다. TCP는 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없습니다.
이 문제는 TCP가 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없기 때문에 발생합니다. TCP는 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없습니다.
이 문제는 TCP가 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없기 때문에 발생합니다. TCP는 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없습니다.
이 문제는 TCP가 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없기 때문에 발생합니다. TCP는 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없습니다.
이 문제는 TCP가 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없기 때문에 발생합니다. TCP는 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없습니다.
이 문제는 TCP가 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없기 때문에 발생합니다. TCP는 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없습니다.
이 문제는 TCP가 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없기 때문에 발생합니다. TCP는 GSO 슈퍼 프레임의 일부가 손실되었는지 여부를 알 수 없습니다
If you want to get best quality of vulnerability data, you may have to visit VulDB.