🇰🇷 한글 설명
Linux 커널의 hinic3 드라이버에서 skb 선형화 불일치로 인해 발생하는 취약점입니다. 잘못된 프래그먼트 카운트를 사용하여 TX 디스크립터를 생성할 경우, 경계 외(Out-of-bounds) DMA 읽기 또는 IOMMU 오류가 발생할 수 있습니다. 또한 체크섬 계산 실패 시 오류를 무시하고 손상된 패킷을 전송하는 문제도 포함되어 있습니다.
💡 쉬운 설명
네트워크 카드가 데이터를 보낼 때 데이터의 조각 개수를 잘못 계산하여 시스템 메모리에 잘못 접근할 수 있는 문제입니다. 이로 인해 시스템 오류가 발생하거나 데이터가 깨진 상태로 전송될 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
hinic3: Fix skb linearization mismatch and drop skb when skb_checksum_help() failed
Previously, hinic3_send_one_skb() cached the skb fragment count before
calling hinic3_tx_offload(). If hinic3_tx_csum() falls back to
skb_checksum_help() for unsupported tunnel packets, the skb may be
linearized. Continuing to build the TX descriptor with the stale
fragment count leads to a descriptor mismatch, which can trigger
out-of-bounds DMA reads or IOMMU faults.
Furthermore, the old code ignored the return value of skb_checksum_help(),
transmitting corrupted packets with incomplete checksums upon failure.
Fix this by:
1. Moving the hinic3_tx_offload() call before calculating 'num_sge' to
ensure the correct fragment count is used if the SKB is linearized.
2. Propagating skb_checksum_help() errors and returning
HINIC3_TX_OFFLOAD_INVALID to properly drop the skb.
📍 영향받는 시스템
Linux kernel (hinic3 driver 사용 시스템)
⚔️ 공격 벡터
특정 터널링 패킷을 전송하여 드라이버의 체크섬 오프로드 로직을 유도함으로써 발생
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인하십시오.