CVE-2026-90027 PUBLISHED

usb: typec: qcom-pmic-typec: disable cc_debounce_dwork on stop

Assigner: Linux
Reserved: 11.09.2026 Published: 16.09.2026 Updated: 16.09.2026

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.

Metrics

CVSS Vector: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVSS Score: 7.8

AV:L - The use-after-free is reached on Qualcomm PMIC Type-C platform-driver teardown (sysfs unbind, rmmod, or probe-error unwind after TCPM is registered), not by parsing USB-C/PD traffic from a plugged partner. That matches other USB gadget/UDC and onboard Type-C teardown UAFs scored Local and is higher severity than Physical. AC:L - An attacker who initiates remove controls both sides: TCPM set_cc/start_toggling queue the 2ms cc_debounce_dwork, and kthread_destroy_worker() in tcpm_unregister_port() can run those callbacks after port_stop() returns, re-queueing work that then runs after devres frees pmic_typec_port. Use-after-free bugs are AC:L unless the attacker cannot influence the race. PR:L - Highest reasonable exposure is a local account on Qualcomm phones, automotive, and embedded boards that manage the Type-C/USB stack, where platform unbind or USB HAL access is often delegated beyond init-namespace root. Uncertain Low versus High, so Low per the overestimate rule. UI:N - The attacker initiates driver unbind, module unload, or a failing re-probe themselves; no separate victim action such as plugging a USB-C cable, mounting a filesystem, or opening a device node is required. S:U - The use-after-free corrupts the host kernel pmic_typec_port heap object within the same OS security authority and does not cross a VM, IOMMU, or sandbox boundary. C:H - qcom_pmic_typec_port_cc_debounce() recovers the freed pmic_typec_port via container_of and reads its spinlock and device pointer; per CNA guidance a use-after-free enables arbitrary kernel memory disclosure. I:H - The same delayed work writes debouncing_cc and performs spin_lock/unlock on the freed object, and the pending delayed_work lives inside pmic_typec_port, so heap spray yields an arbitrary write or workqueue function-pointer hijack. A:H - Use-after-free of pmic_typec_port from system-wq delayed work after remove causes a kernel oops or panic even without a full exploit, so availability impact is High.

Product Status

Vendor Linux
Product Linux
Versions Default: unaffected
  • affected from a4422ff221429c600c3dc5d0394fb3738b89d040 to 4359b5f95c93a4658e08368fa6fab9d89eb98447 (excl.)
  • affected from a4422ff221429c600c3dc5d0394fb3738b89d040 to c614d7c44ca7fb78867ba46b233acdb59287e8c8 (excl.)
  • affected from a4422ff221429c600c3dc5d0394fb3738b89d040 to 1ab669c2b44e1040ddfab7cd7f717aad580d17aa (excl.)
  • affected from a4422ff221429c600c3dc5d0394fb3738b89d040 to 263f7d61a4201cde16849b2d016251806e7418be (excl.)
Vendor Linux
Product Linux
Versions Default: affected
  • Version 6.5 is affected
  • unaffected from 0 to 6.5 (excl.)
  • unaffected from 6.12.110 to 6.12.* (incl.)
  • unaffected from 6.18.51 to 6.18.* (incl.)
  • unaffected from 7.2.5 to 7.2.* (incl.)
  • unaffected from 7.3-rc2 to * (incl.)

References