🇰🇷 한글 설명
Linux 커널의 ice 드라이버에서 RDMA 지원 없이 드라이버가 로드된 상태로 리셋을 수행할 경우 NULL 포인터 역참조로 인해 커널 패닉(Crash)이 발생합니다. ice_unplug_aux_dev() 함수가 존재하지 않는 auxbus 장치를 제거하려 시도할 때 발생하는 결함입니다.
💡 쉬운 설명
네트워크 카드를 초기화하는 과정에서 시스템이 존재하지 않는 기능을 찾으려다 오류를 일으켜 컴퓨터가 갑자기 멈추거나 꺼질 수 있는 문제입니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ice: fix NULL pointer dereference in ice_unplug_aux_dev() on reset
Issuing a reset when the driver is loaded without RDMA support, will
results in a crash as it attempts to remove RDMA's non-existent auxbus
device:
echo 1 > /sys/class/net/<if>/device/reset
BUG: kernel NULL pointer dereference, address: 0000000000000008
...
RIP: 0010:ice_unplug_aux_dev+0x29/0x70 [ice]
...
Call Trace:
<TASK>
ice_prepare_for_reset+0x77/0x260 [ice]
pci_dev_save_and_disable+0x2c/0x70
pci_reset_function+0x88/0x130
reset_store+0x5a/0xa0
kernfs_fop_write_iter+0x15e/0x210
vfs_write+0x273/0x520
ksys_write+0x6b/0xe0
do_syscall_64+0x79/0x3b0
entry_SYSCALL_64_after_hwframe+0x76/0x7e
ice_unplug_aux_dev() checks pf->cdev_info->adev for NULL pointer, but
pf->cdev_info will also be NULL, leading to the deref in the trace above.
Introduce a flag to be set when the creation of the auxbus device is
successful, to avoid multiple NULL pointer checks in ice_unplug_aux_dev().
📍 영향받는 시스템
RDMA 기능이 비활성화된 상태로 ice 드라이버를 사용하는 Linux 커널 시스템
⚔️ 공격 벡터
로컬 사용자가 /sys/class/net/<interface>/device/reset 경로에 값을 써서 장치 리셋을 유도할 수 있음
🛡️ 대응 방법
ice 드라이버의 NULL 포인터 체크 로직이 수정된 최신 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 버전인지 배포판 보안 공지를 통해 확인