Skip to main content
← All vulnerabilities
CVE-2025-38632

pinmux: fix race causing mux_owner NULL with active mux_usecount

Published
Last modified
published
Not listed in CISA KEV
Fix
Fixed in 6.6.102, 6.12.42, 6.15.10, 6.16.1
None on Exploit-DB, Metasploit or GitHub

Summary

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.

Timeline

  1. CVE published
  2. Record last updated

Affected versions

  • Linux Linux

    From 6.6.66 · fixed in 6.6.102; From 6.12.5 · fixed in 6.12.42

  • Linux Linux

    6.13

  • KernelLinux

    fixed in 6.6.102; From 6.7.0 · fixed in 6.12.42; From 6.13.0 · fixed in 6.15.10; fixed in 6.16.1

References 6

git.kernel.org