CVE-2026-89904 PUBLISHED

LoongArch: Fix acpi_package_ids[] array overflow

Assigner: Linux
Reserved: 11.09.2026 Published: 16.09.2026 Updated: 16.09.2026

In the Linux kernel, the following vulnerability has been resolved:

LoongArch: Fix acpi_package_ids[] array overflow

With LoongArch virt machine, a typical setting is one core per socket, there will max 256 sockets (packages) on one VM. With PPTT acpi table, array acpi_package_ids[] will be overflowed.

Here change the array size of acpi_package_ids[] with the max value of MAX_PACKAGES and KVM_MAX_VCPUS.

Metrics

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

AV:L - The overflow is in parse_acpi_topology(), called from loongson_prepare_cpus() during smp_prepare_cpus() as the kernel consumes the firmware or VMM ACPI PPTT table at boot; there is no network, adjacent-network, or USB path into this parser. AC:L - A LoongArch virt machine with the typical one-core-per-socket layout can expose up to 256 packages (KVM_MAX_VCPUS) against acpi_package_ids[MAX_PACKAGES] (16 entries); each new PPTT package ID is stored via acpi_package_ids[acpi_nr_packages++] with no bounds check, so the overflow is deterministic with no race. PR:N - PPTT is parsed automatically during SMP bring-up with no capable() check, Linux login, or syscall. A hypervisor-generated virt-machine table or supply-chain/evil-maid firmware with more than 16 unique packages triggers the write without any account or user-namespace privilege. UI:N - The out-of-bounds write runs as part of ordinary kernel_init_freeable() SMP setup before userspace starts; no victim mount, file open, or other interactive action is required. S:U - The write corrupts kernel BSS and related globals inside the same kernel that parsed PPTT. This is not a KVM guest-to-host escape, sandbox breakout, or IOMMU/DMA authority crossing. C:H - Firmware-controlled 32-bit topology IDs are written past acpi_package_ids[] into adjacent kernel BSS, and the later canonicalization loop also reads past the array. Per memory-corruption guidance that is High confidentiality, not a bounded few-byte leak. I:H - This is a direct out-of-bounds write of firmware-controlled ints past a 16-entry static array (up to hundreds of stores on large VMs). Out-of-bounds writes score High because they can smash adjacent BSS, including function pointers, and enable control-flow hijack. A:H - Smashing kernel BSS during SMP bring-up can oops, panic, or prevent boot. Canonicalized package IDs >= MAX_PACKAGES also index loongson3_cpufreq's cpufreq_mutex[MAX_PACKAGES] out of bounds, causing further crashes.

Product Status

Vendor Linux
Product Linux
Versions Default: unaffected
  • affected from f18992be262d6515c94bf4bf6ce7598135076771 to 0195e04b1eec8fb00e2db9c5e55655a3f5e76f60 (excl.)
  • affected from 4427a33faabb4b81511b99dfee18ce0a38b5b5df to d3fd094c13c6d0b74f246461ca4cf427d539c8e8 (excl.)
  • affected from 4e8f58620f6717f72f3d88a2c8f25c0c656d0ba7 to 6311b8c471afa33c18adbe4eb16f862936b71ca3 (excl.)
  • affected from 4e8f58620f6717f72f3d88a2c8f25c0c656d0ba7 to 2a2367d46d7a4ee4122b7a86e57125542dbbe963 (excl.)
  • Version 496bc868d9066e034787aa14b8ad6c23e77b51ef is affected
  • affected from 6.12.101 to 6.12.110 (excl.)
  • affected from 6.18.42 to 6.18.51 (excl.)
  • affected from 7.1.6 to 7.2 (excl.)
Vendor Linux
Product Linux
Versions Default: affected
  • Version 7.2 is affected
  • unaffected from 0 to 7.2 (excl.)
  • unaffected from 6.12.110 to 6.12.* (incl.)
  • unaffected from 6.18.51 to 6.18.* (incl.)
  • unaffected from 7.2.5 to 7.2.* (incl.)
  • unaffected from 7.3-rc1 to * (incl.)

References