🇰🇷 한글 설명
Linux 커널의 firmware_loader 구성 요소에서 firmware_upload_register() 함수 호출 중 장치 참조 누수가 발생하는 취약점입니다. fw_create_instance() 성공 후 메모리 할당에 실패할 경우, 장치 참조 카운트를 적절히 해제하지 않고 직접 해제하여 참조 카운트 불균형을 초래합니다.
💡 쉬운 설명
컴퓨터의 핵심 부품인 커널이 장치를 관리할 때, 사용이 끝난 장치의 기록을 제대로 지우지 못해 메모리 자원이 낭비되는 문제입니다. 이 문제가 반복되면 시스템의 자원이 점차 고갈될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
firmware_loader: fix device reference leak in firmware_upload_register()
firmware_upload_register()
-> fw_create_instance()
-> device_initialize()
After fw_create_instance() succeeds, the lifetime of the embedded struct
device is expected to be managed through the device core reference
counting, since fw_create_instance() has already called
device_initialize().
In firmware_upload_register(), if alloc_lookup_fw_priv() fails after
fw_create_instance() succeeds, the code reaches free_fw_sysfs and frees
fw_sysfs directly instead of releasing the device reference with
put_device(). This may leave the reference count of the embedded struct
device unbalanced, resulting in a refcount leak.
The issue was identified by a static analysis tool I developed and
confirmed by manual review. Fix this by using put_device(fw_dev) in the
failure path and letting fw_dev_release() handle the final cleanup,
instead of freeing the instance directly from the error path.
📍 영향받는 시스템
Linux kernel (firmware_loader 관련 모듈 사용 시스템)
⚔️ 공격 벡터
로컬 공격자가 특정 조건에서 펌웨어 업로드 프로세스를 유도하여 메모리 누수를 발생시킴
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 firmware_upload_register()의 오류 처리 로직을 수정해야 함
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인