🔍 CVE-2023-54095

7.0
CVSS Score
HIGH
2025-12-24
2026-10-15 22:17
✅ 완료

🇰🇷 한글 설명

Linux 커널의 powerpc/iommu 코드에서 PCI 버스와 VIO 버스가 동일한 notifier_block 구조체를 공유하는 취약점이 발견되었습니다. 이로 인해 VIO 장치에 대해 PCI 알림이 호출되면서 잘못된 메모리 접근(KASAN slab-out-of-bounds)이 발생하여 시스템 불안정이나 커널 패닉을 유발할 수 있습니다.

💡 쉬운 설명

서로 다른 두 종류의 통로(PCI와 VIO)가 실수로 같은 알림 벨을 공유하면서 발생한 문제입니다. 이 때문에 VIO 통로에 신호가 왔는데 PCI 통로인 줄 알고 잘못된 동작을 수행하여 시스템이 멈출 수 있습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: powerpc/iommu: Fix notifiers being shared by PCI and VIO buses fail_iommu_setup() registers the fail_iommu_bus_notifier struct to both PCI and VIO buses. struct notifier_block is a linked list node, so this causes any notifiers later registered to either bus type to also be registered to the other since they share the same node. This causes issues in (at least) the vgaarb code, which registers a notifier for PCI buses. pci_notify() ends up being called on a vio device, converted with to_pci_dev() even though it's not a PCI device, and finally makes a bad access in vga_arbiter_add_pci_device() as discovered with KASAN: BUG: KASAN: slab-out-of-bounds in vga_arbiter_add_pci_device+0x60/0xe00 Read of size 4 at addr c000000264c26fdc by task swapper/0/1 Call Trace: dump_stack_lvl+0x1bc/0x2b8 (unreliable) print_report+0x3f4/0xc60 kasan_report+0x244/0x698 __asan_load4+0xe8/0x250 vga_arbiter_add_pci_device+0x60/0xe00 pci_notify+0x88/0x444 notifier_call_chain+0x104/0x320 blocking_notifier_call_chain+0xa0/0x140 device_add+0xac8/0x1d30 device_register+0x58/0x80 vio_register_device_node+0x9ac/0xce0 vio_bus_scan_register_devices+0xc4/0x13c __machine_initcall_pseries_vio_device_init+0x94/0xf0 do_one_initcall+0x12c/0xaa8 kernel_init_freeable+0xa48/0xba8 kernel_init+0x64/0x400 ret_from_kernel_thread+0x5c/0x64 Fix this by creating separate notifier_block structs for each bus type. [mpe: Add #ifdef to fix CONFIG_IBMVIO=n build]

📍 영향받는 시스템

Linux Kernel (powerpc/iommu 관련 모듈 사용 환경)

⚔️ 공격 벡터

로컬 공격자가 특정 장치(VIO)를 등록하거나 조작하여 커널 메모리 오류를 유발할 수 있음

🛡️ 대응 방법

각 버스 유형에 대해 별도의 notifier_block 구조체를 사용하도록 커널을 업데이트하십시오.

🔧 검증 코드

커널 버전과 해당 심볼의 존재 여부를 확인하여 현재 커널의 상태를 점검합니다.

Shell / Script
uname -a && grep -r "fail_iommu_setup" /proc/kallsyms 2>/dev/null

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H

💻 영향받는 소프트웨어

Linux Kernel