CVE-2026-53331

slimbus: qcom-ngd-ctrl: Avoid ABBA on tx_lock/ctrl->lock

State
Published
Severity
Not scored
Published
Jul 1, 2026
Updated
Jul 1, 2026
Reserved
Jun 9, 2026

Read the record on cve.org

Description

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

slimbus: qcom-ngd-ctrl: Avoid ABBA on tx_lock/ctrl->lock

During the SSR/PDR down notification the tx_lock is taken with the intent to provide synchronization with active DMA transfers.

But during this period qcom_slim_ngd_down() is invoked, which ends up in slim_report_absent(), which takes the slim_controller lock. In multiple other codepaths these two locks are taken in the opposite order (i.e. slim_controller then tx_lock).

The result is a lockdep splat, and a possible deadlock:

rprocctl/449 is trying to acquire lock: ffff00009793e620 (&ctrl->lock){+.+.}-{4:4}, at: slim_report_absent (drivers/slimbus/core.c:322) slimbus

but task is already holding lock: ffff00009793fb50 (&ctrl->tx_lock){+.+.}-{4:4}, at: qcom_slim_ngd_ssr_pdr_notify (drivers/slimbus/qcom-ngd-ctrl.c:1475) slim_qcom_ngd_ctrl

which lock already depends on the new lock.

Possible unsafe locking scenario:

CPU0 CPU1 ---- ---- lock(&ctrl->tx_lock); lock(&ctrl->lock); lock(&ctrl->tx_lock); lock(&ctrl->lock);

The assumption is that the comment refers to the desire to not call qcom_slim_ngd_exit_dma() while we have an ongoing DMA TX transaction. But any such transaction is initiated and completed within a single qcom_slim_ngd_xfer_msg().

Prior to calling qcom_slim_ngd_exit_dma() the slim_controller is torn down, all child devices are notified that the slimbus is gone and the child devices are removed.

Stop taking the tx_lock in qcom_slim_ngd_ssr_pdr_notify() to avoid the deadlock.

Scores

The record has no CVSS score.

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • a899d324863a3d15ce0eea513884e1b73a758c58 to before 3d1561537237c6cc1db76155183d8bbdac2339f0Affected
  • a899d324863a3d15ce0eea513884e1b73a758c58 to before dc4d5c57e012c2c669793deb1515a57bbc6bf5ddAffected
  • a899d324863a3d15ce0eea513884e1b73a758c58 to before d54a221b0f3cd9e1f03f18104be34e02a8258faeAffected
  • a899d324863a3d15ce0eea513884e1b73a758c58 to before aad4337a21b9ad3ae8d668fa8678d05e26ecbaa8Affected
  • a899d324863a3d15ce0eea513884e1b73a758c58 to before 9f0d45d509b434c54da10e01f4ef8086e4583401Affected
  • a899d324863a3d15ce0eea513884e1b73a758c58 to before 9708eb50fd7343145b422be852f890212155d845Affected
  • a899d324863a3d15ce0eea513884e1b73a758c58 to before 55f2ea9ff83cc27a85526b14bc9b32f96a08d6ecAffected
LinuxLinux
  • 5.11Affected
  • before 5.11Not affected
  • 5.15.210 through 5.15.*Not affected
  • 6.1.176 through 6.1.*Not affected
  • 6.6.143 through 6.6.*Not affected
  • 6.12.94 through 6.12.*Not affected
  • 6.18.36 through 6.18.*Not affected
  • 7.0.13 through 7.0.*Not affected
  • 7.1 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.