CVE-2025-39728 Overview
CVE-2025-39728 is an out-of-bounds array access vulnerability in the Linux kernel's Samsung clock driver (clk: samsung). The vulnerability occurs in the samsung_clk_init() function where the ctx->clk_data.hws array is dereferenced before the array bounds (ctx->clk_data.num = nr_clks) are properly initialized. When UBSAN (Undefined Behavior Sanitizer) array bounds checking is enabled (UBSAN_ARRAY_BOUNDS=y), this causes a kernel panic, resulting in a denial of service condition.
Critical Impact
Systems running affected Linux kernel versions with Samsung Exynos ARM64 platforms may experience kernel panics and system crashes when the vulnerable clock initialization code path is triggered during boot or clock management operations.
Affected Products
- Linux Kernel (multiple versions with Samsung Exynos clock driver support)
- Systems utilizing Samsung Exynos ARM64 CMU (Clock Management Unit)
- Devices running Google Tensor (gs101) and similar Samsung-derived SoCs
Discovery Timeline
- April 18, 2025 - CVE-2025-39728 published to NVD
- November 3, 2025 - Last updated in NVD database
Technical Details for CVE-2025-39728
Vulnerability Analysis
The vulnerability resides in the Samsung clock subsystem initialization code within the Linux kernel. During clock driver initialization, the samsung_clk_init() function incorrectly orders its operations, accessing the ctx->clk_data.hws array before establishing the array's boundary information in ctx->clk_data.num. This improper initialization sequence violates array bounds checking when UBSAN is enabled.
The issue specifically manifests in the Samsung CMU (Clock Management Unit) registration path used by Exynos ARM64 platforms, including devices using the Google Tensor gs101 chipset. The panic trace shows the vulnerability being triggered through samsung_cmu_register_one() → exynos_arm64_register_cmu() → __gs101_cmu_top_of_clk_init_declare().
While the vulnerability requires local access and specific kernel configurations (UBSAN_ARRAY_BOUNDS enabled), it can cause complete system unavailability through kernel panic, impacting system stability and reliability for production environments.
Root Cause
The root cause is an improper validation of array index (CWE-129) in the samsung_clk_init() function. The code dereferences ctx->clk_data.hws to access clock hardware structures before setting ctx->clk_data.num = nr_clks, which defines the valid bounds of the array. This ordering issue triggers undefined behavior when array bounds checking is active.
The fix involves reordering the initialization sequence to set the ctx->clk_data.num field before any accesses to the ctx->clk_data.hws array, ensuring proper bounds are established for subsequent array operations.
Attack Vector
The attack vector is local, requiring an attacker to have access to a system running an affected Linux kernel version with Samsung clock driver support. The vulnerability is triggered during clock subsystem initialization, which typically occurs during system boot or when clock management operations are performed.
Exploitation does not require user interaction and can be triggered with low privileges in environments where UBSAN array bounds checking is enabled. While the vulnerability primarily results in denial of service through kernel panic, it could potentially be chained with other vulnerabilities in more sophisticated attack scenarios targeting embedded or mobile devices using Samsung Exynos processors.
Detection Methods for CVE-2025-39728
Indicators of Compromise
- Kernel panic messages containing "UBSAN: array index out of bounds" in system logs
- Call traces showing samsung_clk_init, samsung_cmu_register_one, or exynos_arm64_register_cmu functions
- System crashes during boot on Samsung Exynos ARM64 platforms with UBSAN enabled
- Repeated kernel oops or panics associated with clock driver initialization
Detection Strategies
- Monitor kernel logs (dmesg, /var/log/kern.log) for UBSAN panic messages referencing Samsung clock functions
- Implement automated log analysis to detect patterns matching the vulnerability's call trace signature
- Use kernel crash dump analysis tools to identify panics originating from samsung_clk_init+0x110/0x124
- Deploy endpoint detection solutions capable of monitoring kernel-level events and anomalies
Monitoring Recommendations
- Enable centralized logging for all systems running affected Linux kernel versions on Samsung Exynos platforms
- Configure alerts for UBSAN-related kernel messages in security monitoring infrastructure
- Implement system availability monitoring to detect unexpected reboots or crashes
- Review boot logs regularly on embedded devices using Samsung ARM64 SoCs
How to Mitigate CVE-2025-39728
Immediate Actions Required
- Update to a patched Linux kernel version containing the fix for the initialization ordering issue
- Review and apply relevant kernel patches from the official Linux kernel stable branches
- Prioritize patching for production systems running on Samsung Exynos ARM64 platforms
- Consider temporarily disabling UBSAN_ARRAY_BOUNDS as a short-term workaround if patching is delayed
Patch Information
Multiple patches have been released across Linux kernel stable branches to address this vulnerability. The fix reorders the initialization sequence in samsung_clk_init() to set ctx->clk_data.num = nr_clks before dereferencing the ctx->clk_data.hws array.
Patches are available from the following sources:
Debian users should refer to the Debian LTS Security Announcement for distribution-specific updates.
Workarounds
- Disable UBSAN_ARRAY_BOUNDS in kernel configuration as a temporary measure (not recommended for production security)
- Use alternative kernel configurations without UBSAN if immediate patching is not feasible
- Monitor affected systems closely for crashes while preparing to deploy patched kernel versions
- Consider using SentinelOne Singularity platform for runtime protection and kernel-level monitoring
# Check current kernel version for affected Samsung clock driver
uname -r
# Verify if UBSAN is enabled in current kernel config
zcat /proc/config.gz | grep CONFIG_UBSAN_ARRAY_BOUNDS
# Apply kernel update on Debian-based systems
sudo apt update && sudo apt upgrade linux-image-$(uname -r)
# Reboot to apply kernel patch
sudo reboot
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.


