🇰🇷 한글 설명
Linux 커널의 cpufreq_dbs_governor_init() 함수에서 kobject_init_and_add() 실패 시 정리 경로에 double free 취약점이 존재합니다. kobject_put()을 통한 정리 과정과 직접 호출된 정리 함수가 중복 실행되어 메모리를 두 번 해제하는 문제입니다.
💡 쉬운 설명
Linux 커널의 CPU 주파수 관리 기능에서 오류 처리 시 메모리를 두 번 해제하는 버그입니다. 이는 커널 패닉을 유발할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
cpufreq: governor: fix double free in cpufreq_dbs_governor_init() error path
When kobject_init_and_add() fails, cpufreq_dbs_governor_init() calls
kobject_put(&dbs_data->attr_set.kobj).
The kobject release callback cpufreq_dbs_data_release() calls
gov->exit(dbs_data) and kfree(dbs_data), but the current error path
then calls gov->exit(dbs_data) and kfree(dbs_data) again, causing a
double free.
Keep the direct kfree(dbs_data) for the gov->init() failure path, but
after kobject_init_and_add() has been called, let kobject_put() handle
the cleanup through cpufreq_dbs_data_release().
📍 영향받는 시스템
Linux kernel 모든 버전 (특히 cpufreq dynamic boosting 기능 활성화된 x86/ARM 기반 시스템)
⚔️ 공격 벡터
로컬 공격자가 특정 시스템 호출을 통해 cpufreq governor 초기화 실패 조건을 트리거하여 커널 메모리 손상 유발
🛡️ 대응 방법
Linux 커널 업데이트 (패치 적용된 최신 버전으로 업그레이드)
🔧 검증 코드
현재 커널 버전을 확인하고, 공개된 패치 버전보다 높거나 같으면 보호됨
uname -r && cat /proc/version | grep -o 'version [0-9.]*'