🇰🇷 한글 설명
Linux kernel의 ACPI processor 모듈에서 acpi_processor_errata_piix4() 함수가 두 개의 장치 조회 중 두 번째 호출 실패 시 포인터를 NULL로 덮어써서 NULL-pointer dereference를 유발합니다. 이후 dev_dbg() 호출에서 커널 패닉이 발생할 수 있습니다.
💡 쉬운 설명
Linux 시스템이 특정 하드웨어 정보를 찾는 과정에서 실수로 빈 포인터를 사용하려 하면 시스템이 충돌합니다. 로컬 권한이 있는 사용자가 이 조건을 만들어 서비스 거부 공격을 수행할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ACPI: processor: Fix NULL-pointer dereference in acpi_processor_errata_piix4()
In acpi_processor_errata_piix4(), the pointer dev is first assigned an IDE
device and then reassigned an ISA device:
dev = pci_get_subsys(..., PCI_DEVICE_ID_INTEL_82371AB, ...);
dev = pci_get_subsys(..., PCI_DEVICE_ID_INTEL_82371AB_0, ...);
If the first lookup succeeds but the second fails, dev becomes NULL. This
leads to a potential null-pointer dereference when dev_dbg() is called:
if (errata.piix4.bmisx)
dev_dbg(&dev->dev, ...);
To prevent this, use two temporary pointers and retrieve each device
independently, avoiding overwriting dev with a possible NULL value.
[ rjw: Subject adjustment, added an empty code line ]
📍 영향받는 시스템
Linux kernel ACPI processor 드라이버 (Intel PIIX4 chipset 기반 시스템)
⚔️ 공격 벡터
로컬 (시스템 접근 권한 있는 사용자가 ACPI 에러 상황 생성 후 모듈 재로드 시)
🛡️ 대응 방법
Linux kernel을 패치 버전으로 업데이트 (포인터 분리 로직이 포함된 버전)
🔧 검증 코드
ACPI processor 모듈이 로드되어 있고 버전을 확인하면 패치 여부 판단 가능. 모듈이 없으면 영향 없음.
cat /sys/module/acpi_processor/version 2>/dev/null || grep -i 'acpi.*processor' /proc/modules | head -1