Cloudanix VulnDB

CVE-2025-38298

None

CVSS

—

EPSS

0.2%

Published

Jul 10, 2025

CISA due date

—

Cloudanix analysis

Monitor only SSVC: Track

A bug in the Linux kernel's handling of certain memory error modules can crash the entire system when those modules are removed and put back in under specific conditions.

Exploitation
Local Privilege
Attacker needs
Local User
Complexity
Moderate
Impact
Denial Of Service
Component
OS kernel
Class
Memory Corruption
Remediation
Patch
Effort
Low
Patch risk
Low

What it actually does

Failure to reset adxl_component_count in adxl_put() during module unload causes double-increment on reload, resulting in out-of-bounds read of the ADXL component array inside skx_adxl_decode and a subsequent general protection fault during MCE error processing.

Why it matters to the business

Kernel crashes and potential denial of service on systems using i10nm_edac or skx_edac_common modules; systems running affected stable kernels must be updated promptly to avoid unplanned downtime, especially in environments performing hardware error injection or frequent module reloads.

How an attack unfolds

An attacker with local access unloads i10nm_edac, reloads it, then triggers machine-check error paths; the inflated adxl_component_count leads to an out-of-bounds reference in skx_adxl_decode called from skx_mce_check_error, crashing the kernel via a general protection fault.

How to fix it

Upgrade to a fixed kernel version: Linux 5.4.295 or later, linux-lts 6.12.41-r0 or later, or apply commit 80bf28fd623d97dd4f4825fbbe9d736cec2afba3. Reboot after installing the updated kernel packages.

How to confirm the fix worked

Confirm the running kernel contains the fix by checking the presence of the adxl_put() reset of adxl_component_count or by verifying the exact fixed commit/version string; attempt the unload/reload + error injection sequence in a test environment and observe absence of the GPF.

Typical attack path

  1. Obtain local access or ability to load/unload kernel modules
  2. Unload i10nm_edac (which pulls in skx_edac_common)
  3. Reload i10nm_edac
  4. Perform error injection or trigger MCE events
  5. Cause skx_mce_check_error to invoke skx_adxl_decode with corrupted count
  6. Trigger general protection fault and kernel oops

How to detect it

Search kernel logs for 'general protection fault' combined with 'skx_adxl_decode' or 'mce_gen_pool_process' stack traces; look for repeated module unload/reload events of i10nm_edac or skx_edac_common immediately preceding crashes.

What your security team should do

  • Prioritize patching all production kernels to the listed fixed versions within the next maintenance window
  • Restrict unprivileged module loading via kernel module signing and lockdown mode where feasible
  • Monitor for kernel oops and MCE-related workqueue crashes in system logs
  • Test error-handling paths in staging before deploying updated kernels to hardware with Intel memory controllers

The record

In the Linux kernel, the following vulnerability has been resolved: EDAC/skx_common: Fix general protection fault After loading i10nm_edac (which automatically loads skx_edac_common), if unload only i10nm_edac, then reload it and perform error injection testing, a general protection fault may occur: mce: [Hardware Error]: Machine check events logged Oops: general protection fault ... ... Workqueue: events mce_gen_pool_process RIP: 0010:string+0x53/0xe0 ... Call Trace: <TASK> ? die_addr+0x37/0x90 ? exc_general_protection+0x1e7/0x3f0 ? asm_exc_general_protection+0x26/0x30 ? string+0x53/0xe0 vsnprintf+0x23e/0x4c0 snprintf+0x4d/0x70 skx_adxl_decode+0x16a/0x330 [skx_edac_common] skx_mce_check_error.part.0+0xf8/0x220 [skx_edac_common] skx_mce_check_error+0x17/0x20 [skx_edac_common] ... The issue arose was because the variable 'adxl_component_count' (inside skx_edac_common), which counts the ADXL components, was not reset. During the reloading of i10nm_edac, the count was incremented by the actual number of ADXL components again, resulting in a count that was double the real number of ADXL components. This led to an out-of-bounds reference to the ADXL component array, causing the general protection fault above. Fix this issue by resetting the 'adxl_component_count' in adxl_put(), which is called during the unloading of {skx,i10nm}_edac.

Affected packages

Ecosystem Package Introduced Fixed
Debian:11 linux 0 No fix
Debian:12 linux 0 No fix
Debian:13 linux 0 6.12.35-1
Debian:14 linux 0 6.12.35-1
Linux Kernel 0 5.4.295
Mageia:9 kernel 0 6.6.101-1.mga9
Mageia:9 kernel-linus 0 6.6.101-1.mga9
Mageia:9 kmod-virtualbox 0 7.1.10-7.mga9
Mageia:9 kmod-xtables-addons 0 3.24-83.mga9
Mageia:9 wireless-regdb 0 20250710-1.mga9
openSUSE:Leap 16.0 dtb-aarch64 0 6.12.0-160000.26.1
openSUSE:Leap 16.0 kernel-64kb 0 6.12.0-160000.26.1
openSUSE:Leap 16.0 kernel-azure 0 6.12.0-160000.26.1
openSUSE:Leap 16.0 kernel-default 0 6.12.0-160000.26.1
openSUSE:Leap 16.0 kernel-default-base 0 6.12.0-160000.26.1.160000.2.7
openSUSE:Leap 16.0 kernel-docs 0 6.12.0-160000.26.1
openSUSE:Leap 16.0 kernel-kvmsmall 0 6.12.0-160000.26.1
openSUSE:Leap 16.0 kernel-obs-build 0 6.12.0-160000.26.1
openSUSE:Leap 16.0 kernel-obs-qa 0 6.12.0-160000.26.1
openSUSE:Leap 16.0 kernel-rt 0 6.12.0-160000.26.1
openSUSE:Leap 16.0 kernel-source 0 6.12.0-160000.26.1
openSUSE:Leap 16.0 kernel-syms 0 6.12.0-160000.26.1
openSUSE:Leap 16.0 kernel-zfcpdump 0 6.12.0-160000.26.1

Related vulnerabilities