🔍 CVE-2026-74558

0.0
CVSS Score
UNKNOWN
2026-08-15
2026-10-21 13:19
✅ 완료

🇰🇷 한글 설명

Linux 커널의 XDP Zero-Copy(ZC) Tx 배치 경로에서 잘못된 Tx 디스크립터를 처리할 때 발생하는 취약점입니다. 유효하지 않거나 크기가 너무 큰 패킷을 처리하는 과정에서 일부 UMEM 프레임이 드라이버에 제출되지 않거나 사용자 공간으로 반환되지 않아 메모리 누수가 발생할 수 있습니다.

💡 쉬운 설명

네트워크 데이터를 처리하는 과정에서 잘못된 정보가 들어오면, 컴퓨터가 사용 중인 메모리를 제대로 돌려받지 못하고 계속 붙잡고 있게 되는 문제입니다. 이로 인해 시스템의 메모리가 점차 부족해질 수 있습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: xsk: reclaim invalid Tx descriptors in ZC batch path The zero-copy Tx batch parser stops when it encounters an invalid descriptor. If this happens after one or more continuation descriptors, the Tx consumer can be advanced past fragments that are neither submitted to the driver nor returned to userspace through the completion ring. A similar problem occurs when a packet exceeds xdp_zc_max_segs. The descriptors consumed up to the limit are released without completion, and the remaining continuation descriptors can subsequently be interpreted as the beginning of another packet. Parse Tx batches in packet units and distinguish descriptors belonging to complete valid packets from descriptors consumed while draining an invalid or oversized packet. Return the former to the driver and append the latter to the CQ address area so userspace can reclaim their UMEM frames. Treat a standalone invalid descriptor as a one-descriptor reclaim-only packet. Advancing the Tx-ring consumer releases the ring slot, but does not by itself return ownership of the referenced UMEM frame to userspace. Once draining starts, continue until the packet's end-of-packet descriptor is consumed. Preserve the drain state on the socket when EOP has not yet been supplied, so draining can continue during a later call. Leave incomplete but otherwise valid packets on the Tx ring. Shared-UMEM pools using multi-buffer Tx also need packet-framed parsing. Walk their Tx sockets one packet at a time, preserving the existing per-socket fairness scheme, instead of using the legacy one-descriptor fallback. Keep that fallback for shared pools that do not use multi-buffer Tx. Since the drain state is maintained per socket and both the singular and shared paths can resume an interrupted drain, changing the socket list from singular to shared requires no special bind-time transition. CQ entries are positional, and drivers may complete only part of the Tx work returned by xsk_tx_peek_release_desc_batch(). Therefore, reclaim-only entries cannot be published immediately when earlier driver-visible descriptors are still outstanding. Track the number of driver-visible CQ entries preceding the reclaim entries. Let xsk_tx_completed() publish partial hardware Tx completions, and publish the reclaim entries only after every earlier Tx descriptor has completed. Complete a reclaim-only batch immediately when there is no driver-visible work in front of it, and prevent another Tx batch from being appended while reclaim entries remain pending. Also cap batch processing by the size of the pool's temporary descriptor array, as Tx rings belonging to sockets sharing a UMEM may have different sizes. This ensures that every invalid Tx descriptor consumed by the ZC batch path is either submitted to the driver as part of a valid packet or returned to userspace without violating CQ completion ordering.

📍 영향받는 시스템

Linux kernel (XDP Zero-Copy Tx batching 기능 사용 시)

⚔️ 공격 벡터

조작된(잘못된 또는 너무 큰) Tx 디스크립터를 포함한 패킷을 전송하여 메모리 회수 메커니즘을 방해함

🛡️ 대응 방법

Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.

🔧 검증 코드

출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인하십시오.

Shell / Script
uname -r

💻 영향받는 소프트웨어

NVIDIA Cloud Gaming Guest Driver for Linux