🇰🇷 한글 설명
Linux 커널 ICE 드라이버에서 devlink 리로드 경로에 ice_deinit_hw() 호출이 누락되었습니다. 이로 인해 리로드 후 ice_init_hw()가 -EBUSY로 실패하고, 드라이버 제거 시 NULL 포인터 역참조가 발생할 수 있습니다. 커밋 1390b8b3d2be에서 중복 호출을 제거하면서 발생한 회귀 버그입니다.
💡 쉬운 설명
인텔 네트워크 카드 드라이버를 devlink로 재설정하면 내부 초기화가 꼬여서 실패합니다. 이후 드라이버를 제거하면 시스템 오류가 날 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ice: add missing ice_deinit_hw() in devlink reinit path
devlink-reload results in ice_init_hw failed error, and then removing
the ice driver causes a NULL pointer dereference.
[ +0.102213] ice 0000:ca:00.0: ice_init_hw failed: -16
...
[ +0.000001] Call Trace:
[ +0.000003] <TASK>
[ +0.000006] ice_unload+0x8f/0x100 [ice]
[ +0.000081] ice_remove+0xba/0x300 [ice]
Commit 1390b8b3d2be ("ice: remove duplicate call to ice_deinit_hw() on
error paths") removed ice_deinit_hw() from ice_deinit_dev(). As a result
ice_devlink_reinit_down() no longer calls ice_deinit_hw(), but
ice_devlink_reinit_up() still calls ice_init_hw(). Since the control
queues are not uninitialized, ice_init_hw() fails with -EBUSY.
Add ice_deinit_hw() to ice_devlink_reinit_down() to correspond with
ice_init_hw() in ice_devlink_reinit_up().
📍 영향받는 시스템
Linux 커널 ICE 드라이버를 사용하는 인텔 이더넷 장비 (수정 커밋 이전 커널 버전)
⚔️ 공격 벡터
로컬 관리자 권한으로 devlink reload 명령을 실행하면 트리거되며, 주로 안정성 문제이고 직접적인 원격 공격 경로는 제한적입니다.
🛡️ 대응 방법
커널을 이 문제가 수정된 최신 안정 버전으로 업데이트하거나, 배포판 보안 업데이트를 적용하세요.
🔧 검증 코드
커널 버전을 확인하고 ice 모듈이 로드되어 있는지 확인합니다. 커널 버전이 패치 이전이고 ice 모듈이 있다면 취약할 수 있으므로 배포판 패치 노트를 확인하세요.
uname -r && lsmod | grep -w ice