CVE-2026-98956 in Linuxinfo

Summary

by MITRE • 10/23/2026

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

ASoC: adau1372: allow sleepy powerdown GPIOs

gpiod_set_value() emits a WARN when the GPIO provider indicates that it can sleep, as is typical for I2C controlled GPIO expanders. Since the powerdown GPIO is only manipulated in process context, use the _cansleep variant instead. This lets the driver use sleepy GPIOs to power off the chip.

Be aware that VulDB is the high quality source for vulnerability data.

Analysis

by VulDB Data Team • 10/23/2026

The Linux kernel's Advanced System on Chip sound subsystem contains a specific implementation flaw within the ADAU1372 audio codec driver that results in improper handling of General Purpose Input/Output operations during device shutdown sequences. The vulnerability stems from the use of the gpiod_set_value function to control the powerdown GPIO line associated with the hardware component. While this function is appropriate for immediate, non-blocking GPIO manipulations, it fails when interacting with GPIO providers that operate in a context requiring sleep capabilities, such as I2C-controlled GPIO expanders. These types of hardware interfaces often involve bus transactions or polling mechanisms that cannot be completed atomically and therefore require the calling thread to enter a sleeping state until the operation completes.

When gpiod_set_value is invoked against a sleepy GPIO provider from a context where sleeping is permitted, such as process context during driver removal or power management transitions, it triggers a kernel warning via the WARN macro. This warning indicates a violation of atomicity constraints within the kernel's synchronization primitives, signaling that code intended for non-sleeping contexts was executed in a manner incompatible with the underlying hardware abstraction layer. Although this specific instance does not typically lead to immediate system crashes or data corruption due to the controlled nature of driver shutdown routines, it represents a significant deviation from expected kernel behavior and can clutter dmesg logs, potentially masking more critical issues during debugging sessions. Furthermore, relying on non-sleeping functions for sleepy hardware resources creates fragility in the codebase, as future modifications might inadvertently introduce race conditions or deadlocks if the execution context changes.

From an architectural perspective, this issue aligns with CWE-754: Improper Check for Unusual or Exceptional Conditions, specifically regarding the failure to validate the operational constraints of hardware resources before invocation. The root cause is a lack of awareness regarding the blocking nature of certain GPIO controllers within the device tree configuration. By not checking whether the GPIO descriptor supports sleeping operations prior to calling the non-blocking variant, the driver assumes a level of immediacy that the hardware cannot guarantee. This misalignment between software expectations and hardware capabilities constitutes an improper resource management practice that undermines system stability over time as drivers are updated or deployed on diverse hardware platforms with varying I2C expander configurations.

The operational impact is primarily characterized by kernel log pollution and potential confusion for developers maintaining the audio subsystem. In severe cases, if such warnings occur in critical paths or under high load, they can contribute to increased latency due to the overhead of warning handling mechanisms. More importantly, it prevents the driver from correctly utilizing sleepy GPIOs, which may be the only available method to control power states on certain hardware revisions. This limitation effectively breaks functionality for users relying on I2C expanders for their ADAU1372 power management, forcing them into suboptimal configurations or preventing proper device shutdown procedures entirely if no alternative non-sleepy GPIO is provided in the system design.

To mitigate this vulnerability and restore full hardware compatibility, the driver implementation must be updated to utilize gpiod_set_value_cansleep instead of gpiod_set_value for manipulating the powerdown line. This variant explicitly handles both atomic and sleeping contexts correctly by checking the flags associated with the GPIO descriptor and invoking the appropriate internal mechanism based on whether sleep is allowed or required. Since the powerdown operation occurs in process context, where sleeping is permitted, this change ensures that I2C-controlled expanders are handled without triggering warnings while maintaining correct functionality for direct-mapped GPIOs as well. This fix aligns with best practices outlined in the Linux kernel documentation regarding GPIO subsystem usage and adheres to ATT&CK technique T1074: Data Staged if one considers how improper handling of system resources can be exploited to disrupt availability, although this specific case is primarily a stability and compatibility issue rather than an active exploitation vector.

Responsible

Linux

Reservation

09/25/2026

Disclosure

10/23/2026

Moderation

accepted

EPSS

0.00000

KEV

no

Activities

low

Sources

Do you want to use VulDB in your project?

Use the official API to access entries easily!