🇰🇷 한글 설명
Linux 커널의 PCI 엔드포인트 configfs 코드에서 리스트 헤드(list head)를 리스트 엔트리(list entry)로 잘못 취급하여 list_del()을 호출할 때 발생하는 메모리 접근 오류입니다. 드라이버 언로드 시 KASAN 경고(slab-use-after-free)를 유발합니다.
💡 쉬운 설명
Linux 커널의 메모리 관리 버그로, 드라이버를 제거할 때 데이터 구조를 잘못 삭제하려고 시도합니다. 이는 보안 익스플로잇이 아닌 코딩 오류로 인한 시스템 불안정성입니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
PCI: endpoint: Fix configfs group list head handling
Doing a list_del() on the epf_group field of struct pci_epf_driver in
pci_epf_remove_cfs() is not correct as this field is a list head, not
a list entry. This list_del() call triggers a KASAN warning when an
endpoint function driver which has a configfs attribute group is torn
down:
==================================================================
BUG: KASAN: slab-use-after-free in pci_epf_remove_cfs+0x17c/0x198
Write of size 8 at addr ffff00010f4a0d80 by task rmmod/319
CPU: 3 UID: 0 PID: 319 Comm: rmmod Not tainted 6.16.0-rc2 #1 NONE
Hardware name: Radxa ROCK 5B (DT)
Call trace:
show_stack+0x2c/0x84 (C)
dump_stack_lvl+0x70/0x98
print_report+0x17c/0x538
kasan_report+0xb8/0x190
__asan_report_store8_noabort+0x20/0x2c
pci_epf_remove_cfs+0x17c/0x198
pci_epf_unregister_driver+0x18/0x30
nvmet_pci_epf_cleanup_module+0x24/0x30 [nvmet_pci_epf]
__arm64_sys_delete_module+0x264/0x424
invoke_syscall+0x70/0x260
el0_svc_common.constprop.0+0xac/0x230
do_el0_svc+0x40/0x58
el0_svc+0x48/0xdc
el0t_64_sync_handler+0x10c/0x138
el0t_64_sync+0x198/0x19c
...
Remove this incorrect list_del() call from pci_epf_remove_cfs().
📍 영향받는 시스템
Linux kernel 6.16.0-rc2 이상에서 PCI endpoint configfs 지원이 활성화된 시스템
⚔️ 공격 벡터
로컬 공격자가 특정 엔드포인트 함수 드라이버를 언로드할 때 커널 메모리 손상으로 인한 로컬 권한 상승 가능
🛡️ 대응 방법
최신 Linux 커널 버전으로 업데이트 (pci_epf_remove_cfs()의 부정확한 list_del() 제거 패치 포함)
🔧 검증 코드
CONFIG_PCI_ENDPOINT=y가 표시되면 PCI 엔드포인트 기능이 활성화되어 있으며, 취약한 커널 버전(6.16.0-rc2 근처)을 실행 중일 경우 영향을 받을 수 있습니다.
cat /boot/config-$(uname -r) 2>/dev/null | grep -E '^CONFIG_PCI_ENDPOINT=' && uname -r