🇰🇷 한글 설명
Linux 커널의 dpaa2-switch 드라이버에서 장치가 보고한 인터페이스 수(num_ifs)가 0일 때 kcalloc(0, ...)이 ZERO_SIZE_PTR을 반환하고, 이후 ethsw->ports[0]->netdev 접근 시 잘못된 포인터 역참조로 커널 패닉이 발생하는 문제입니다. 패치는 num_ifs가 0보다 큰지 검사하여 해당 할당과 역참조를 방지합니다.
💡 쉬운 설명
일부 네트워크 스위치 장치 드라이버가 연결된 포트 수를 0으로 잘못 보고하면 리눅스 커널이 잘못된 메모리 주소를 읽다가 시스템이 멈춥니다. 수정 버전에서는 포트 수가 0이면 이 작업을 건너뛰도록 막았습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
dpaa2-switch: prevent ZERO_SIZE_PTR dereference when num_ifs is zero
The driver allocates arrays for ports, FDBs, and filter blocks using
kcalloc() with ethsw->sw_attr.num_ifs as the element count. When the
device reports zero interfaces (either due to hardware configuration
or firmware issues), kcalloc(0, ...) returns ZERO_SIZE_PTR (0x10)
instead of NULL.
Later in dpaa2_switch_probe(), the NAPI initialization unconditionally
accesses ethsw->ports[0]->netdev, which attempts to dereference
ZERO_SIZE_PTR (address 0x10), resulting in a kernel panic.
Add a check to ensure num_ifs is greater than zero after retrieving
device attributes. This prevents the zero-sized allocations and
subsequent invalid pointer dereference.
📍 영향받는 시스템
dpaa2-switch 드라이버를 사용하는 NXP DPAA2 기반 하드웨어의 수정 전 Linux 커널 버전 (패치 적용 전 커널 전반)
⚔️ 공격 벡터
로컬 공격자가 직접 악용하기는 어렵고, 주로 하드웨어 구성 오류나 펌웨어 문제로 num_ifs가 0으로 보고될 때 발생하는 서비스 거부(커널 패닉) 문제입니다.
🛡️ 대응 방법
커널을 해당 CVE 수정 패치가 포함된 최신 안정 버전으로 업데이트하거나 배포판의 보안 업데이트를 적용하세요.
🔧 검증 코드
첫 번째 출력은 현재 실행 중인 커널 버전이며, 설치된 linux-image/kernel 패키지 버전과 대조해 해당 CVE 수정 버전 이상인지 확인하고, lsmod 결과에 dpaa2_switch 모듈이 보이면 이 드라이버가 로드된 시스템이므로 패치 적용이 필요하고 아무것도 나오지 않으면 영향이 없을 가능성이 높습니다.
uname -r && (dpkg -l 2>/dev/null | grep -E 'linux-image' ; rpm -qa 2>/dev/null | grep -E '^kernel-[0-9]') ; lsmod 2>/dev/null | grep -E 'dpaa2_switch|fsl_dpaa2'