🇰🇷 한글 설명
Linux 커널의 Liquidio 네트워크 드라이버에서 netdev 포인터 초기화 순서 문제로 인해 메모리 누수가 발생할 수 있는 취약점입니다. 큐 설정 과정에서 오류가 발생할 경우, 할당된 netdev 구조체가 적절히 해제되지 않고 남게 됩니다.
💡 쉬운 설명
컴퓨터가 네트워크 장치를 준비하다가 중간에 실수가 생겼을 때, 사용했던 메모리를 제대로 치우지 못하고 버려두는 문제입니다. 이 문제가 반복되면 시스템의 메모리가 점점 부족해질 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net: liquidio: Initialize netdev pointer before queue setup
In setup_nic_devices(), the netdev is allocated using alloc_etherdev_mq().
However, the pointer to this structure is stored in oct->props[i].netdev
only after the calls to netif_set_real_num_rx_queues() and
netif_set_real_num_tx_queues().
If either of these functions fails, setup_nic_devices() returns an error
without freeing the allocated netdev. Since oct->props[i].netdev is still
NULL at this point, the cleanup function liquidio_destroy_nic_device()
will fail to find and free the netdev, resulting in a memory leak.
Fix this by initializing oct->props[i].netdev before calling the queue
setup functions. This ensures that the netdev is properly accessible for
cleanup in case of errors.
Compile tested only. Issue found using a prototype static analysis tool
and code review.
📍 영향받는 시스템
Liquidio 드라이버를 사용하는 Linux 커널 버전
⚔️ 공격 벡터
네트워크 큐 설정 과정에서 의도적으로 오류를 유발하여 메모리 누수를 일으키는 방식
🛡️ 대응 방법
커널 패치를 통해 netdev 포인터를 큐 설정 함수 호출 전에 미리 초기화하도록 업데이트
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 수정된 패치 버전인지 확인