CVE-2023-54095
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
24/12/2025
Last modified:
24/12/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
powerpc/iommu: Fix notifiers being shared by PCI and VIO buses<br />
<br />
fail_iommu_setup() registers the fail_iommu_bus_notifier struct to both<br />
PCI and VIO buses. struct notifier_block is a linked list node, so this<br />
causes any notifiers later registered to either bus type to also be<br />
registered to the other since they share the same node.<br />
<br />
This causes issues in (at least) the vgaarb code, which registers a<br />
notifier for PCI buses. pci_notify() ends up being called on a vio<br />
device, converted with to_pci_dev() even though it&#39;s not a PCI device,<br />
and finally makes a bad access in vga_arbiter_add_pci_device() as<br />
discovered with KASAN:<br />
<br />
BUG: KASAN: slab-out-of-bounds in vga_arbiter_add_pci_device+0x60/0xe00<br />
Read of size 4 at addr c000000264c26fdc by task swapper/0/1<br />
<br />
Call Trace:<br />
dump_stack_lvl+0x1bc/0x2b8 (unreliable)<br />
print_report+0x3f4/0xc60<br />
kasan_report+0x244/0x698<br />
__asan_load4+0xe8/0x250<br />
vga_arbiter_add_pci_device+0x60/0xe00<br />
pci_notify+0x88/0x444<br />
notifier_call_chain+0x104/0x320<br />
blocking_notifier_call_chain+0xa0/0x140<br />
device_add+0xac8/0x1d30<br />
device_register+0x58/0x80<br />
vio_register_device_node+0x9ac/0xce0<br />
vio_bus_scan_register_devices+0xc4/0x13c<br />
__machine_initcall_pseries_vio_device_init+0x94/0xf0<br />
do_one_initcall+0x12c/0xaa8<br />
kernel_init_freeable+0xa48/0xba8<br />
kernel_init+0x64/0x400<br />
ret_from_kernel_thread+0x5c/0x64<br />
<br />
Fix this by creating separate notifier_block structs for each bus type.<br />
<br />
[mpe: Add #ifdef to fix CONFIG_IBMVIO=n build]
Impact
References to Advisories, Solutions, and Tools
- https://git.kernel.org/stable/c/075a4dcdbc9a5ea793cb8ec8b78a6c0b7636fd52
- https://git.kernel.org/stable/c/65bf8a196ba25cf65a858b5bb8de80f0aad76691
- https://git.kernel.org/stable/c/6670c65bf863cd0d44ca24d4c10ef6755b8d9529
- https://git.kernel.org/stable/c/a9ddbfed53465bc7c411231db32a488066c0c1be
- https://git.kernel.org/stable/c/c37b6908f7b2bd24dcaaf14a180e28c9132b9c58
- https://git.kernel.org/stable/c/c46af58588253e5e4063bb5ddc78cd12fdf9e55d
- https://git.kernel.org/stable/c/dc0d107e624ca96aef6dd8722eb33ba3a6d157b0
- https://git.kernel.org/stable/c/f08944e3c6962b00827de7263a9e20688e79ad84
- https://git.kernel.org/stable/c/f17d5efaafba3d5f02f0373f7c5f44711d676f3e



