🇰🇷 한글 설명
Linux 커널의 mlx5e 드라이버 내 XSK 브랜치에서 XDP_TX 전송 실패 시 DMA 주소 미해제 및 xdp_frame 메모리 누수가 발생하는 취약점입니다. 전송 큐가 가득 차서 전송에 실패할 경우, 할당된 자원을 해제하지 않고 함수를 종료하여 시스템 자원이 지속적으로 소모됩니다.
💡 쉬운 설명
네트워크 데이터를 보낼 때 실패가 발생하면, 사용했던 메모리와 통로를 제대로 정리하지 않고 버리는 문제가 있습니다. 이 문제가 반복되면 컴퓨터의 메모리가 조금씩 계속 줄어들어 결국 시스템 성능이 떨어지거나 멈출 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net/mlx5e: xsk: Fix DMA and xdp_frame leak on XDP_TX xmit failure
In the XSK branch of mlx5e_xmit_xdp_buff(), when sq->xmit_xdp_frame()
returns false (e.g. XDPSQ is full), the function returns without
unmapping the DMA address or freeing the xdp_frame allocated by
xdp_convert_zc_to_xdp_frame(). The xdpi_fifo push only happens on
success, so the completion path cannot recover these entries.
With CONFIG_DMA_API_DEBUG=y, the leak surfaces on driver unbind:
DMA-API: pci 0000:08:00.0: device driver has pending DMA
allocations while released from device [count=1116]
One of leaked entries details: [device address=0x000000010ffd7028]
[size=1534 bytes] [mapped with DMA_TO_DEVICE] [mapped as phy]
WARNING: kernel/dma/debug.c:881 at dma_debug_device_change+0x127/0x180
...
DMA-API: Mapped at:
debug_dma_map_phys+0x4b/0xd0
dma_map_phys+0xfd/0x2d0
mlx5e_xdp_handle+0x5ae/0xac0 [mlx5_core]
mlx5e_xsk_skb_from_cqe_mpwrq_linear+0xc4/0x170 [mlx5_core]
mlx5e_handle_rx_cqe_mpwrq+0xc1/0x290 [mlx5_core]
Add the missing unmap + xdp_return_frame, matching the cleanup already
done in mlx5e_xdp_xmit(). has_frags is rejected earlier in this branch,
so no per-frag unmap is needed.
📍 영향받는 시스템
Linux kernel (mlx5e driver using XSK/XDP)
⚔️ 공격 벡터
네트워크 전송 큐를 가득 채우는 트래픽을 유발하여 의도적으로 전송 실패를 유도함으로써 메모리 누수 발생
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 mlx5e 드라이버의 자원 해제 로직을 수정해야 함
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인