🇰🇷 한글 설명
Linux 커널의 PCI 엔드포인트 테스트 드라이버(pci-epf-test)에서 발생하는 이중 해제(Double Free) 취약점입니다. BAR 할당 실패 시 메모리를 해제하면서 포인터를 NULL로 초기화하지 않아, 재부팅이나 재시작 시 동일한 메모리 영역을 다시 해제하려 시도하며 커널 오류(Oops)를 유발합니다.
💡 쉬운 설명
컴퓨터 부품을 설정하는 과정에서 메모리를 정리할 때, 이미 정리한 메모리 주소를 지우지 않고 남겨두어 발생하는 문제입니다. 이로 인해 시스템이 다시 시작될 때 이미 비어있는 메모리를 또 정리하려고 시도하다가 시스템이 멈추거나 오류가 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
PCI: endpoint: pci-epf-test: Fix double free that causes kernel to oops
Fix a kernel oops found while testing the stm32_pcie Endpoint driver
with handling of PERST# deassertion:
During EP initialization, pci_epf_test_alloc_space() allocates all BARs,
which are further freed if epc_set_bar() fails (for instance, due to no
free inbound window).
However, when pci_epc_set_bar() fails, the error path:
pci_epc_set_bar() ->
pci_epf_free_space()
does not clear the previous assignment to epf_test->reg[bar].
Then, if the host reboots, the PERST# deassertion restarts the BAR
allocation sequence with the same allocation failure (no free inbound
window), creating a double free situation since epf_test->reg[bar] was
deallocated and is still non-NULL.
Thus, make sure that pci_epf_alloc_space() and pci_epf_free_space()
invocations are symmetric, and as such, set epf_test->reg[bar] to NULL
when memory is freed.
[kwilczynski: commit log]
📍 영향받는 시스템
Linux kernel (pci-epf-test 드라이버를 사용하는 시스템)
⚔️ 공격 벡터
로컬 공격자가 특정 PCI 엔드포인트 초기화 실패 상황을 유도하여 커널 오류를 발생시킴
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 pci-epf-test의 메모리 관리 로직을 수정해야 함
🔧 검증 코드
출력된 커널 버전을 확인하여 해당 취약점이 해결된 패치 버전인지 보안 공지(Security Advisory)와 대조하여 확인합니다.