CWE
667
Advisory Published
Updated

CVE-2025-21951: bus: mhi: host: pci_generic: Use pci_try_reset_function() to avoid deadlock

First published: Tue Apr 01 2025(Updated: )

In the Linux kernel, the following vulnerability has been resolved: bus: mhi: host: pci_generic: Use pci_try_reset_function() to avoid deadlock There are multiple places from where the recovery work gets scheduled asynchronously. Also, there are multiple places where the caller waits synchronously for the recovery to be completed. One such place is during the PM shutdown() callback. If the device is not alive during recovery_work, it will try to reset the device using pci_reset_function(). This function internally will take the device_lock() first before resetting the device. By this time, if the lock has already been acquired, then recovery_work will get stalled while waiting for the lock. And if the lock was already acquired by the caller which waits for the recovery_work to be completed, it will lead to deadlock. This is what happened on the X1E80100 CRD device when the device died before shutdown() callback. Driver core calls the driver's shutdown() callback while holding the device_lock() leading to deadlock. And this deadlock scenario can occur on other paths as well, like during the PM suspend() callback, where the driver core would hold the device_lock() before calling driver's suspend() callback. And if the recovery_work was already started, it could lead to deadlock. This is also observed on the X1E80100 CRD. So to fix both issues, use pci_try_reset_function() in recovery_work. This function first checks for the availability of the device_lock() before trying to reset the device. If the lock is available, it will acquire it and reset the device. Otherwise, it will return -EAGAIN. If that happens, recovery_work will fail with the error message "Recovery failed" as not much could be done.

Credit: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

Affected SoftwareAffected VersionHow to fix
Linux Kernel
Linux Kernel>=5.12<5.15.179
Linux Kernel>=5.16<6.1.131
Linux Kernel>=6.2<6.6.83
Linux Kernel>=6.7<6.12.19
Linux Kernel>=6.13<6.13.7
Linux Kernel=6.14-rc1
Linux Kernel=6.14-rc2
Linux Kernel=6.14-rc3
Linux Kernel=6.14-rc4
Linux Kernel=6.14-rc5

Never miss a vulnerability like this again

Sign up to SecAlerts for real-time vulnerability data matched to your software, aggregated from hundreds of sources.

Frequently Asked Questions

  • What is the severity of CVE-2025-21951?

    CVE-2025-21951 has a severity rating that indicates a significant risk to system functionality due to potential deadlocks.

  • How do I fix CVE-2025-21951?

    To address CVE-2025-21951, update the Linux Kernel to the latest stable version where this vulnerability has been resolved.

  • What systems are affected by CVE-2025-21951?

    CVE-2025-21951 affects systems running the Linux Kernel that utilize the PCI Generic protocol for device communication.

  • What is the impact of CVE-2025-21951?

    The impact of CVE-2025-21951 may include system deadlocks if recovery functions are not handled correctly.

  • When was CVE-2025-21951 disclosed?

    CVE-2025-21951 was disclosed as part of ongoing security updates for the Linux Kernel to improve system reliability.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2025 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203