{"id":"CVE-2026-93225","state":"PUBLISHED","title":"phy: fsl-imx8mq-usb: fix typec switch leak on probe error path","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nphy: fsl-imx8mq-usb: fix typec switch leak on probe error path\n\nIf probe fails after imx95_usb_phy_get_tca() succeeds, the typec\nswitch leaks because the only cleanup path was in .remove(), which\nnever runs on probe failure.\n\nUse devm_add_action_or_reset() so the switch is cleaned up on both\nprobe failure and driver removal. The imx95_usb_phy_put_tca() is no\nlonger needed, it will be removed in .remove() too.","publishedAt":"2026-09-24T15:21:12.635Z","updatedAt":"2026-10-19T09:07:36.752Z","severity":{"score":7.4,"label":"High","version":"3.1","vector":"CVSS:3.1/AV:L/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H","source":"Linux"},"assigner":"Linux","products":["Linux Linux"],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"b58f0f86fd6156d7b084257f5c91ceaf7d760927","status":"affected","lessThan":"f1b7b2c7ffa9711d1298f52790b377fe02efc1db","versionType":"git"},{"version":"b58f0f86fd6156d7b084257f5c91ceaf7d760927","status":"affected","lessThan":"84646f5b945a370f6999eed59a334387b0abc282","versionType":"git"},{"version":"b58f0f86fd6156d7b084257f5c91ceaf7d760927","status":"affected","lessThan":"87a1805b1c346b092c34f96f3806f207792910e1","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/phy/freescale/phy-fsl-imx8mq-usb.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"6.15","status":"affected"},{"version":"0","status":"unaffected","lessThan":"6.15","versionType":"semver"},{"version":"6.18.50","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.2.4","status":"unaffected","lessThanOrEqual":"7.2.*","versionType":"semver"},{"version":"7.3","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/phy/freescale/phy-fsl-imx8mq-usb.c"]}],"references":["https://git.kernel.org/stable/c/f1b7b2c7ffa9711d1298f52790b377fe02efc1db","https://git.kernel.org/stable/c/84646f5b945a370f6999eed59a334387b0abc282","https://git.kernel.org/stable/c/87a1805b1c346b092c34f96f3806f207792910e1"],"weaknesses":[],"ingestedAt":"2026-10-29T20:13:34.582Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2026/93xxx/CVE-2026-93225.json","commit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-93225","state":"PUBLISHED","datePublished":"2026-09-24T15:21:12.635Z","dateUpdated":"2026-10-19T09:07:36.752Z","assignerShortName":"Linux","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateReserved":"2026-09-17T16:02:15.094Z"},"containers":{"cna":{"title":"phy: fsl-imx8mq-usb: fix typec switch leak on probe error path","descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nphy: fsl-imx8mq-usb: fix typec switch leak on probe error path\n\nIf probe fails after imx95_usb_phy_get_tca() succeeds, the typec\nswitch leaks because the only cleanup path was in .remove(), which\nnever runs on probe failure.\n\nUse devm_add_action_or_reset() so the switch is cleaned up on both\nprobe failure and driver removal. The imx95_usb_phy_put_tca() is no\nlonger needed, it will be removed in .remove() too."}],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"b58f0f86fd6156d7b084257f5c91ceaf7d760927","status":"affected","lessThan":"f1b7b2c7ffa9711d1298f52790b377fe02efc1db","versionType":"git"},{"version":"b58f0f86fd6156d7b084257f5c91ceaf7d760927","status":"affected","lessThan":"84646f5b945a370f6999eed59a334387b0abc282","versionType":"git"},{"version":"b58f0f86fd6156d7b084257f5c91ceaf7d760927","status":"affected","lessThan":"87a1805b1c346b092c34f96f3806f207792910e1","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/phy/freescale/phy-fsl-imx8mq-usb.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"6.15","status":"affected"},{"version":"0","status":"unaffected","lessThan":"6.15","versionType":"semver"},{"version":"6.18.50","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.2.4","status":"unaffected","lessThanOrEqual":"7.2.*","versionType":"semver"},{"version":"7.3","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/phy/freescale/phy-fsl-imx8mq-usb.c"]}],"references":[{"url":"https://git.kernel.org/stable/c/f1b7b2c7ffa9711d1298f52790b377fe02efc1db"},{"url":"https://git.kernel.org/stable/c/84646f5b945a370f6999eed59a334387b0abc282"},{"url":"https://git.kernel.org/stable/c/87a1805b1c346b092c34f96f3806f207792910e1"}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H","baseScore":7.4,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:L - The leak is created in imx8mq_usb_phy_probe() after tca_blk_get_typec_switch() calls typec_switch_register(); the entry point is platform_probe of DT node usb3_phy@4c1f0040 (compatible fsl,imx95-usb-phy). No USB or network protocol message carries the trigger; this is a probe error-path leak.\nAC:H - After imx95_usb_phy_get_tca() succeeds, the only later failure is ENOMEM from kzalloc/devres_alloc in __devm_of_phy_provider_register(); imx8m_get_phy_tuning_data() cannot fail. That GFP_KERNEL failure is not attacker-controlled, and suppress_bind_attrs=true blocks sysfs rebind of imx8mq-usb-phy.\nPR:N - imx8mq_usb_phy_probe() has no capable() check. PHY_FSL_IMX8MQ_USB defaults y on ARCH_MXC&&ARM64, so of_platform populate binds usb3_phy@4c1f0040 during kernel init on i.MX95 boards that set status=okay. Sysfs bind is not required and is disabled by suppress_bind_attrs.\nUI:N - of_platform probe of usb3_phy and a later tcpci/tcpm_register_port() of ptn5110@50 (imx95-19x19-evk typec_con) run unattended at boot. typec_register_port() calls typec_switch_get() without a mount, open, or USB-C cable plug.\nS:U - The leaked typec_switch_dev, the devres free of imx8mq_usb_phy, and tca_blk_typec_switch_set() run in the host kernel PHY/Type-C stack. This is not a KVM/Xen guest-to-host escape or an IOMMU/DMA bypass.\nC:H - typec_switch_register() stores drvdata=imx_phy; probe failure then frees that imx8mq_usb_phy via devres while the class device remains. tca_blk_typec_switch_set() reads the freed object via typec_switch_get_drvdata() when TCPM's tcpm_mux_set() calls typec_set_orientation().\nI:H - The same dangling drvdata is used by tca_blk_typec_switch_set() to clk_prepare_enable(imx_phy->clk) and by tca_blk_orientation_set() to writel() TCA_GCFG/TCA_SYSMODE_CFG through tca->base; reclaiming the freed imx8mq_usb_phy/tca_blk slab is a write and control-flow primitive.\nA:H - Once probe fails, fwnode_typec_switch_get() does try_module_get(sw_dev->dev.parent->driver->owner) with parent->driver NULL, or tca_blk_typec_switch_set() dereferences the freed imx_phy; either path oopses the i.MX95 host."}]}],"providerMetadata":{"shortName":"Linux","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateUpdated":"2026-10-19T09:07:36.752Z"},"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.15","versionEndExcluding":"6.18.50"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.15","versionEndExcluding":"7.2.4"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.15","versionEndExcluding":"7.3"}]}]}],"x_generator":{"engine":"bippy-1.2.0"}}}}}