Cloudanix VulnDB

CVE-2025-39788

High · 7.8

CVSS

7.8

EPSS

0.2%

Published

Sep 11, 2025

CISA due date

—

Cloudanix analysis

Schedule a fix SSVC: Track

A programming error in the Linux kernel's storage driver for certain hardware can let a logged-in user corrupt memory or take over the system.

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

What it actually does

Undefined behavior from left-shifting a 32-bit int by 32 bits when configuring UTRL_NEXUS_TYPE (and similarly UTMRL_NEXUS_TYPE) on systems with 32 UTP slots, resulting in an incorrect register value instead of the expected 0xffffffff mask and a UBSAN warning.

Why it matters to the business

On affected Linux kernels running on specific UFS hardware such as Google gs101, local users may trigger storage configuration errors that lead to data corruption, device malfunction, or privilege escalation, increasing risk on high-availability systems until the kernel is updated.

How an attack unfolds

An attacker with local access compiles or loads code that exercises the UFS exynos driver path on a 32-slot system, causing the oversized shift to produce an all-zero or wrapped nexus mask; this misconfigures the UTP request list and can be leveraged to corrupt adjacent kernel structures or bypass access controls.

How to fix it

Upgrade the Linux kernel to commit 01510a9e8222f11cce064410f3c2fcf0756c0a08 or later; rebuild and reboot with the corrected BIT() macro usage for both UTRL_NEXUS_TYPE and UTMRL_NEXUS_TYPE writes.

How to confirm the fix worked

Confirm the running kernel contains commit 01510a9e8222f11cce064410f3c2fcf0756c0a08, verify absence of the UBSAN shift-out-of-bounds warning when loading the ufs-exynos module, and test that UTRL_NEXUS_TYPE is programmed to 0xffffffff on 32-slot hardware.

Typical attack path

  1. Obtain local shell or user-level execution on a vulnerable gs101-based system
  2. Trigger the ufs-exynos driver path that writes to HCI_UTRL_NEXUS_TYPE with nutrs==32
  3. Trigger the out-of-bounds shift to write an incorrect nexus mask
  4. Abuse the resulting misconfiguration for memory corruption or privilege escalation

How to detect it

Review kernel logs for UBSAN shift-out-of-bounds messages referencing drivers/ufs/host/ufs-exynos.c, audit UFS initialization traces showing incorrect nexus masks, and inspect crash dumps for anomalies following UTP request list setup on affected hardware.

What your security team should do

  • Prioritize kernel upgrade on all gs101 and similar 32-slot UFS systems within the next maintenance window
  • Monitor EPSS and any new exploit reports given the local high-impact vector
  • Apply the fix across all stable branches that contain the vulnerable ufs-exynos code

The record

In the Linux kernel, the following vulnerability has been resolved: scsi: ufs: exynos: Fix programming of HCI_UTRL_NEXUS_TYPE On Google gs101, the number of UTP transfer request slots (nutrs) is 32, and in this case the driver ends up programming the UTRL_NEXUS_TYPE incorrectly as 0. This is because the left hand side of the shift is 1, which is of type int, i.e. 31 bits wide. Shifting by more than that width results in undefined behaviour. Fix this by switching to the BIT() macro, which applies correct type casting as required. This ensures the correct value is written to UTRL_NEXUS_TYPE (0xffffffff on gs101), and it also fixes a UBSAN shift warning: UBSAN: shift-out-of-bounds in drivers/ufs/host/ufs-exynos.c:1113:21 shift exponent 32 is too large for 32-bit type 'int' For consistency, apply the same change to the nutmrs / UTMRL_NEXUS_TYPE write.

Affected packages

Ecosystem Package Introduced Fixed
Debian:11 linux 0 No fix
Debian:12 linux 0 No fix
Debian:13 linux 0 No fix
Debian:14 linux 0 No fix
Debian:14 linux 0 6.16.5-1
Linux Kernel 5.9.0 5.10.241
SUSE:Linux Enterprise High Availability Extension 15 SP6 kernel-default 0 6.4.0-150600.23.81.3
SUSE:Linux Enterprise Live Patching 15 SP6 kernel-default 0 6.4.0-150600.23.81.3
SUSE:Linux Enterprise Live Patching 15 SP6 kernel-livepatch-SLE15-SP6-RT_Update_18 0 1-150600.1.3.1
SUSE:Linux Enterprise Live Patching 15 SP6 kernel-livepatch-SLE15-SP6_Update_18 0 1-150600.13.3.3
SUSE:Linux Enterprise Module for Basesystem 15 SP6 kernel-64kb 0 6.4.0-150600.23.81.3
SUSE:Linux Enterprise Module for Basesystem 15 SP6 kernel-default 0 6.4.0-150600.23.81.3
SUSE:Linux Enterprise Module for Basesystem 15 SP6 kernel-default-base 0 6.4.0-150600.23.81.3.150600.12.36.3
SUSE:Linux Enterprise Module for Basesystem 15 SP6 kernel-source 0 6.4.0-150600.23.81.2
SUSE:Linux Enterprise Module for Basesystem 15 SP6 kernel-zfcpdump 0 6.4.0-150600.23.81.3
SUSE:Linux Enterprise Module for Development Tools 15 SP6 kernel-docs 0 6.4.0-150600.23.81.1
SUSE:Linux Enterprise Module for Development Tools 15 SP6 kernel-obs-build 0 6.4.0-150600.23.81.3
SUSE:Linux Enterprise Module for Development Tools 15 SP6 kernel-source 0 6.4.0-150600.23.81.2
SUSE:Linux Enterprise Module for Development Tools 15 SP6 kernel-syms 0 6.4.0-150600.23.81.1
SUSE:Linux Enterprise Module for Legacy 15 SP6 kernel-default 0 6.4.0-150600.23.81.3
SUSE:Linux Enterprise Module for Public Cloud 15 SP6 kernel-azure 0 6.4.0-150600.8.58.1
SUSE:Linux Enterprise Module for Public Cloud 15 SP6 kernel-source-azure 0 6.4.0-150600.8.58.1
SUSE:Linux Enterprise Module for Public Cloud 15 SP6 kernel-syms-azure 0 6.4.0-150600.8.58.1
SUSE:Linux Enterprise Workstation Extension 15 SP6 kernel-default 0 6.4.0-150600.23.81.3
SUSE:Real Time Module 15 SP6 kernel-rt 0 6.4.0-150600.10.61.1
SUSE:Real Time Module 15 SP6 kernel-rt_debug 0 6.4.0-150600.10.61.1
SUSE:Real Time Module 15 SP6 kernel-source-rt 0 6.4.0-150600.10.61.1
SUSE:Real Time Module 15 SP6 kernel-syms-rt 0 6.4.0-150600.10.61.1
openSUSE:Leap 15.6 dtb-aarch64 0 6.4.0-150600.23.81.1
openSUSE:Leap 15.6 kernel-64kb 0 6.4.0-150600.23.81.3
openSUSE:Leap 15.6 kernel-azure 0 6.4.0-150600.8.58.1
openSUSE:Leap 15.6 kernel-debug 0 6.4.0-150600.23.81.3
openSUSE:Leap 15.6 kernel-default 0 6.4.0-150600.23.81.3
openSUSE:Leap 15.6 kernel-default-base 0 6.4.0-150600.23.81.3.150600.12.36.3
openSUSE:Leap 15.6 kernel-docs 0 6.4.0-150600.23.81.1
openSUSE:Leap 15.6 kernel-kvmsmall 0 6.4.0-150600.23.81.3
openSUSE:Leap 15.6 kernel-obs-build 0 6.4.0-150600.23.81.3
openSUSE:Leap 15.6 kernel-obs-qa 0 6.4.0-150600.23.81.1
openSUSE:Leap 15.6 kernel-rt 0 6.4.0-150600.10.61.1
openSUSE:Leap 15.6 kernel-rt_debug 0 6.4.0-150600.10.61.1
openSUSE:Leap 15.6 kernel-source 0 6.4.0-150600.23.81.2
openSUSE:Leap 15.6 kernel-source-azure 0 6.4.0-150600.8.58.1
openSUSE:Leap 15.6 kernel-source-rt 0 6.4.0-150600.10.61.1
openSUSE:Leap 15.6 kernel-syms 0 6.4.0-150600.23.81.1
openSUSE:Leap 15.6 kernel-syms-azure 0 6.4.0-150600.8.58.1
openSUSE:Leap 15.6 kernel-syms-rt 0 6.4.0-150600.10.61.1
openSUSE:Leap 15.6 kernel-zfcpdump 0 6.4.0-150600.23.81.3
openSUSE:Leap 16.0 dtb-aarch64 0 6.12.0-160000.6.1
openSUSE:Leap 16.0 kernel-64kb 0 6.12.0-160000.6.1
openSUSE:Leap 16.0 kernel-default 0 6.12.0-160000.6.1
openSUSE:Leap 16.0 kernel-default-base 0 6.12.0-160000.6.1.160000.2.4
openSUSE:Leap 16.0 kernel-docs 0 6.12.0-160000.6.1
openSUSE:Leap 16.0 kernel-kvmsmall 0 6.12.0-160000.6.1
openSUSE:Leap 16.0 kernel-obs-build 0 6.12.0-160000.6.1
openSUSE:Leap 16.0 kernel-obs-qa 0 6.12.0-160000.6.1
openSUSE:Leap 16.0 kernel-rt 0 6.12.0-160000.6.1
openSUSE:Leap 16.0 kernel-source 0 6.12.0-160000.6.1
openSUSE:Leap 16.0 kernel-syms 0 6.12.0-160000.6.1
openSUSE:Leap 16.0 kernel-zfcpdump 0 6.12.0-160000.6.1

Related vulnerabilities