7.8

CVE-2025-21991: x86/microcode/AMD: Fix out-of-bounds on systems with CPU-less NUMA nodes

Modified
AliasesRHSA-2025:10837UBUNTU-CVE-2025-21991DEBIAN-CVE-2025-21991
Published 02-04-2025Last modified 23-05-2026

Vulnerability summary

CVE-2025-21991 is a high (CVSS 7.8) Improper Validation of Array Index vulnerability in linux. EPSS estimates a 0.22% chance of exploitation in the next 30 days, higher than 13.2% of scored vulnerabilities.

Priority
Routine

Not severe (CVSS 7.8, local access); no exploitation reported by the 5 checked sources

Source freshness unavailable

How is this decided?
CVSS score
7.8/10
010
High · v3.1 (CVE.org)
EPSS score
0.22%
0%100%
Low · 0.00 pp in 30 days
KEVNot listedNot listed by any tracked catalog.
RansomwareNot flaggedNo ransomware use recorded.
Public exploits0No public exploits recorded

Advisory lineage

Upstream 0 · Downstream 62 · Related 49

Timeline

  1. 02-04-2025
    PublishedVulnerability first disclosed.
  2. 23-05-2026
    Last modifiedVulnerability information updated.

Description

In the Linux kernel, the following vulnerability has been resolved: x86/microcode/AMD: Fix out-of-bounds on systems with CPU-less NUMA nodes Currently, load_microcode_amd() iterates over all NUMA nodes, retrieves their CPU masks and unconditionally accesses per-CPU data for the first CPU of each mask. According to Documentation/admin-guide/mm/numaperf.rst: "Some memory may share the same node as a CPU, and others are provided as memory only nodes." Therefore, some node CPU masks may be empty and wouldn't have a "first CPU". On a machine with far memory (and therefore CPU-less NUMA nodes): - cpumask_of_node(nid) is 0 - cpumask_first(0) is CONFIG_NR_CPUS - cpu_data(CONFIG_NR_CPUS) accesses the cpu_info per-CPU array at an index that is 1 out of bounds This does not have any security implications since flashing microcode is a privileged operation but I believe this has reliability implications by potentially corrupting memory while flashing a microcode update. When booting with CONFIG_UBSAN_BOUNDS=y on an AMD machine that flashes a microcode update. I get the following splat: UBSAN: array-index-out-of-bounds in arch/x86/kernel/cpu/microcode/amd.c:X:Y index 512 is out of range for type 'unsigned long[512]' [...] Call Trace: dump_stack __ubsan_handle_out_of_bounds load_microcode_amd request_microcode_amd reload_store kernfs_fop_write_iter vfs_write ksys_write do_syscall_64 entry_SYSCALL_64_after_hwframe Change the loop to go over only NUMA nodes which have CPUs before determining whether the first CPU on the respective node needs microcode update. [ bp: Massage commit message, fix typo. ]

CVSS metrics

5 scores · 5 sources · 1 version

EPSS trend

Probability

0.22%

Chance of exploitation in the next 30 days

Percentile

13%

Versus all other CVEs

30-day change

No change 0.00 pp

From 0.22% on 04-10-2026

04-10-202603-11-2026

Known exploited

Compare KEV catalogs
CISA KEV

Not in the CISA KEV catalog.

ENISA CNW

Not in the ENISA CNW catalog.

CIRCL

Not in the CIRCL catalog.

Public exploits

0 found

No public exploits indexed.

Weaknesses

CWE · root cause

Affected systems

Version check

Known conditions: local access, low-privilege account, no user interaction (CVSS vector). Other conditions: not stated in public data.

Ubuntu133 products
  • linux< 5.4.0-218.238 | < 5.15.0-142.152 | < 6.8.0-84.84
  • linux-allwinner-5.19All versions (No fix recorded)
  • linux-aws< 5.4.0-1147.157 | < 5.15.0-1086.93 | < 6.8.0-1039.41
  • linux-aws-5.0All versions (No fix recorded)
  • linux-aws-5.11All versions (No fix recorded)
Redhat64 products
  • kernel< 0:5.14.0-570.26.1.el9_6
  • kernel-64k< 0:5.14.0-570.26.1.el9_6
  • kernel-64k-core< 0:5.14.0-570.26.1.el9_6
  • kernel-64k-debug< 0:5.14.0-570.26.1.el9_6
  • kernel-64k-debug-core< 0:5.14.0-570.26.1.el9_6
Linux2 products
  • linux≥ 979e197968a1e8f09bf0d706801dba4432f85ab3, < d509c4731090ebd9bbdb72c70a2d70003ae81f4f | ≥ 44a44b57e88f311c1415be1f567c50050913c149, < 985a536e04bbfffb1770df43c6470f635a6b1073 | ≥ be2710deaed3ab1402379a2ede30a3754fe6767a, < 18b5d857c6496b78ead2fd10001b81ae32d30cac | ≥ d576547f489c935b9897d4acf8beee3325dea8a5, < ec52240622c4d218d0240079b7c1d3ec2328a9f4 | ≥ 7ff6edf4fef38ab404ee7861f257e28eaaeed35f, < e686349cc19e800dac8971929089ba5ff59abfb0 | ≥ 7ff6edf4fef38ab404ee7861f257e28eaaeed35f, < 488ffc0cac38f203979f83634236ee53251ce593 | ≥ 7ff6edf4fef38ab404ee7861f257e28eaaeed35f, < 5ac295dfccb5b015493f86694fa13a0dde4d3665 | ≥ 7ff6edf4fef38ab404ee7861f257e28eaaeed35f, < e3e89178a9f4a80092578af3ff3c8478f9187d59 | d6353e2fc12c5b8f00f86efa30ed73d2da2f77be | 1b1e0eb1d2971a686b9f7bdc146115bcefcbb960 | eaf5dea1eb8c2928554b3ca717575cbe232b843c | ≥ 5.4.235, < 5.4.292 | ≥ 5.10.173, < 5.10.236 | ≥ 5.15.99, < 5.15.180 | ≥ 6.1.16, < 6.1.132 | ≥ 4.14.308, < 4.15 | ≥ 4.19.276, < 4.20 | ≥ 6.2.3, < 6.3 | 6.3
  • linux_kernel≥ 4.14.308, < 4.15 | ≥ 4.19.276, < 4.20 | ≥ 5.4.235, < 5.5 | ≥ 5.10.173, < 5.11 | ≥ 5.15.99, < 5.16 | ≥ 6.1.16, < 6.1.132 | ≥ 6.2.3, < 6.6.84 | ≥ 6.7, < 6.12.20 | ≥ 6.13, < 6.13.8 | 6.14:rc1 | 6.14:rc2 | 6.14:rc3 | 6.14:rc4 | 6.14:rc5 | 6.14:rc6
Debian1 product
  • linux< 6.1.133-1 | < 6.12.20-1

4 vendors · 200 products · Showing 200 of 227

References

60 links
Show all 60 references