🇰🇷 한글 설명
Linux 커널 ice 드라이버에서 devlink reload 후 드라이버를 제거하면 HWMON 센서 인스턴스가 중복 생성되어 하나가 고아(orphaned) 상태로 남고, 해제된 모듈 메모리를 참조하는 문제가 있었습니다. 이로 인해 시스템 모니터링 도구가 sysfs 속성을 읽을 때 커널 페이지 폴트와 호출 추적이 발생합니다. 수정은 ice_hwmon_exit() 호출을 ice_remove()에서 ice_deinit_features()로 옮겨 초기화와 정리를 대칭적으로 맞추는 것입니다.
💡 쉬운 설명
인텔 네트워크 카드를 쓰는 리눅스 서버에서 드라이버를 재설정한 뒤 제거하면, 온도 센서 기능이 정리되지 않고 남아 시스템 오류 메시지가 주기적으로 나타날 수 있습니다. 커널 업데이트로 이 정리 순서가 바로잡혀 문제가 해결됩니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ice: fix devlink reload call trace
Commit 4da71a77fc3b ("ice: read internal temperature sensor") introduced
internal temperature sensor reading via HWMON. ice_hwmon_init() was added
to ice_init_feature() and ice_hwmon_exit() was added to ice_remove(). As a
result if devlink reload is used to reinit the device and then the driver
is removed, a call trace can occur.
BUG: unable to handle page fault for address: ffffffffc0fd4b5d
Call Trace:
string+0x48/0xe0
vsnprintf+0x1f9/0x650
sprintf+0x62/0x80
name_show+0x1f/0x30
dev_attr_show+0x19/0x60
The call trace repeats approximately every 10 minutes when system
monitoring tools (e.g., sadc) attempt to read the orphaned hwmon sysfs
attributes that reference freed module memory.
The sequence is:
1. Driver load, ice_hwmon_init() gets called from ice_init_feature()
2. Devlink reload down, flow does not call ice_remove()
3. Devlink reload up, ice_hwmon_init() gets called from
ice_init_feature() resulting in a second instance
4. Driver unload, ice_hwmon_exit() called from ice_remove() leaving the
first hwmon instance orphaned with dangling pointer
Fix this by moving ice_hwmon_exit() from ice_remove() to
ice_deinit_features() to ensure proper cleanup symmetry with
ice_hwmon_init().
📍 영향받는 시스템
Linux 커널의 ice 드라이버(Intel E800 시리즈 네트워크 어댑터)를 사용하는 시스템, 수정 커밋 이전 버전
⚔️ 공격 벡터
로컬 권한이 있는 사용자가 devlink reload와 드라이버 언로드를 반복 수행하여 해제된 메모리 참조를 유발하는 방식이며, 주로 안정성(오류·커널 패닉) 문제입니다.
🛡️ 대응 방법
배포판 제공 최신 커널로 업데이트하고 재부팅하거나, 해당 수정 커밋이 포함된 커널 버전을 적용합니다.
🔧 검증 코드
커널 버전과 ice 모듈 정보를 확인하여 배포판 보안 공지에서 해당 수정이 포함된 빌드인지 대조하며, 모듈이 없으면 ice 드라이버를 사용하지 않는 시스템입니다.
uname -r && (modinfo ice 2>/dev/null | grep -E '^(version|srcversion|vermagic)')