CVE-2026-90027
moderateUse-after-free race in Linux kernel Qualcomm PMIC USB Type-C driver
A use-after-free race condition exists in the Linux kernel's Qualcomm PMIC USB Type-C port controller driver (usb: typec: qcom-pmic-typec). When a Type-C port is stopped, the cc_debounce delayed work can still be re-queued by TCPM callbacks (set_cc and start_toggling) running in TCPM's worker thread, because port_stop() returns before tcpm_unregister_port() destroys that worker; the delayed work can then execute after devres has freed the pmic_typec_port memory. A local attacker who can trigger Type-C port bring-up/teardown, such as rapid plug/unplug cycles or unbinding the device, could cause kernel memory corruption, leading to a crash or potentially privilege escalation (CVSS 7.8, high C/I/A, local attack vector). Only Linux systems running on Qualcomm Snapdragon-class platforms with this driver enabled are affected. No public proof-of-concept or in-the-wild exploitation is known; the flaw was found by static analysis and is not listed in CISA KEV.
What to do: Update to a kernel release that includes the upstream fix, which changes port_stop() to use disable_delayed_work_sync(); specific fixed version numbers were not listed in the advisory. Check whether your kernels enable CONFIG_TYPEC_QCOM_PMIC / qcom-pmic-typec and run on Qualcomm hardware, and prioritize patching multi-user systems where local users could trigger Type-C port re-registration. As an interim mitigation, restrict unprivileged local access and avoid unbinding or repeatedly re-registering the affected Type-C port.
| Linux kernel, qcom-pmic-typec USB Type-C port controller driver (Qualcomm PMIC, e.g. CONFIG_TYPEC_QCOM_PMIC) | — |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
In the Linux kernel, the following vulnerability has been resolved: usb: typec: qcom-pmic-typec: disable cc_debounce_dwork on stop cc_debounce_dwork is queued from the set_cc() and start_toggling() callbacks, which run from TCPM's kthread worker. port_stop() returns before tcpm_unregister_port() destroys that worker. Flushing the worker during unregister may therefore run a callback which queues the delayed work after port_stop() has returned. The delayed work can then run after devres has freed pmic_typec_port. Use disable_delayed_work_sync() in port_stop() to cancel a pending instance and prevent the TCPM callbacks from queueing another one. This issue was found by an in-house static analysis tool.
- Vector
- CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
In the news0 stories
No ingested article mentions this CVE yet.