CVE Database›Document archive›CVE-2025-38632

CVE-2025-38632

kernel: pinmux: fix race causing mux_owner NULL with active mux_usecount

Loading…

Severity

Moderate

Red Hat Product Security

4.1

CVSS 3.1

Review impact separately from score.

Published · August 22, 2025

Updated · June 30, 2026

Description

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

pinmux: fix race causing mux_owner NULL with active mux_usecount

commit 5a3e85c3c397 ("pinmux: Use sequential access to access desc->pinmux data") tried to address the issue when two client of the same gpio calls pinctrl_select_state() for the same functionality, was resulting in NULL pointer issue while accessing desc->mux_owner. However, issue was not completely fixed due to the way it was handled and it can still result in the same NULL pointer.

The issue occurs due to the following interleaving:

 cpu0 (process A)                   cpu1 (process B)

  pin_request() {                   pin_free() {

                                     mutex_lock()
                                     desc->mux_usecount--; //becomes 0
                                     ..
                                     mutex_unlock()

mutex_lock(desc->mux) desc->mux_usecount++; // becomes 1 desc->mux_owner = owner; mutex_unlock(desc->mux)

                                     mutex_lock(desc->mux)
                                     desc->mux_owner = NULL;
                                     mutex_unlock(desc->mux)

This sequence leads to a state where the pin appears to be in use (mux_usecount == 1) but has no owner (mux_owner == NULL), which can cause NULL pointer on next pin_request on the same pin.

Ensure that updates to mux_usecount and mux_owner are performed atomically under the same lock. Only clear mux_owner when mux_usecount reaches zero and no new owner has been assigned.

Statement

A race between pin_request() and pin_free() could leave a pinmux descriptor with mux_usecount == 1 but mux_owner == NULL, leading to a NULL-pointer dereference on subsequent requests. The fix makes updates to mux_usecount and mux_owner atomic under the same lock and only clears the owner when the count drops to zero. Practically, exploitation requires local access to pin control/GPIO operations (e.g., competing clients of the same pin), so this is a local reliability/DoS issue rather than a data-confidentiality or integrity risk. Typically needs high privileges (root/CAPs or device-node access).

CVSS score applicability

The CVSS score(s) listed for this vulnerability do not reflect the associated product's status, and are included for informational purposes to better understand the severity of this vulnerability.

Mitigation

No mitigation is specified in collected source.

CVSS / CWE

CVSS 3.1 · 4.1
CVSS:3.1/AV:L/AC:H/PR:H/UI:N/S:U/C:N/I:N/A:H

CWE-362 · Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')