{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-90288","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","state":"PUBLISHED","assignerShortName":"Linux","dateReserved":"2026-09-11T19:38:34.798Z","datePublished":"2026-09-17T16:08:16.686Z","dateUpdated":"2026-09-18T17:54:17.876Z"},"containers":{"cna":{"providerMetadata":{"orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux","dateUpdated":"2026-09-18T17:54:17.876Z"},"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nphy: renesas: rcar-gen2: Fix double of_node_put on phy creation failure\n\nfor_each_child_of_node_scoped() releases the node reference on scope\nexit, so the explicit of_node_put(np) in the devm_phy_create() error\npath drops it twice.\n\nDrop the redundant of_node_put() and let the scoped cleanup handle it."}],"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 extra of_node_put(np) runs only in rcar_gen2_phy_probe() after a failed devm_phy_create() on a usb-phy@0/@2 child, reached via platform_probe() when the renesas,rcar-gen2-usb-phy device (usb-phy-controller@e6590100) is bound from DT; USB transfers and network packets never enter this probe.\nAC:H - The double put runs only when phy_create() fails inside rcar_gen2_phy_probe() (kzalloc/ida_alloc/devres_alloc ENOMEM, regulator_get_optional(\"phy\") -EPROBE_DEFER, or device_add failure). Those GFP_KERNEL/sysfs failures are not attacker-controlled, and of_node_put() is a no-op unless CONFIG_OF_DYNAMIC is enabled.\nPR:N - rcar_gen2_phy_probe() has no capable() check; with PHY_RCAR_GEN2=y (shmobile_defconfig) platform_probe() binds usb-phy-controller@e6590100 during kernel init on boards that set &usbphy { status = \"okay\" }, so the failed-create path needs no user account. Sysfs bind is 0200 root-only but is not required for that boot path.\nUI:N - Lager, Koelsch, Porter, Silk, and iwg23s-sbc enable &usbphy/&usbphy0 in DT, so of_platform populate plus platform_probe() run rcar_gen2_phy_probe() unattended at boot; no mount, open, or USB plug-in is required to hit the devm_phy_create() error path.\nS:U - kobject_cleanup() of the still-attached usb-phy@0 device_node and the extra put on its parent usb-phy-controller node occur in host kernel OF/kobject code; this is not a KVM/Xen escape or IOMMU/DMA bypass.\nC:H - When the second of_node_put(np) drops the usb-phy@0 kobject to zero, kobject_cleanup() kfree_const()s kobj->name while the node stays in the OF tree and rcar_gen2_phy_xlate() still compares args->np to channel->of_node; later kobject_name() reads reclaimed heap, and of_node_release()'s dump_stack() leaks kernel pointers.\nI:H - kobject_cleanup() also __kobject_del()s the live usb-phy@0 sysfs dir and kobject_put()s the parent controller node, leaving a released kobject with a dangling name pointer still linked via channel->of_node; reclaiming that name slab plus later kobject_get/put on the zero-ref kobject provides write and control-flow primitives.\nA:H - of_node_release() prints \"detected bad of_node_put()\" and dump_stack() for the still-attached usb-phy@0 node; the next of_node_get/put hits refcount_t underflow/UAF (panic under panic_on_warn), and tearing down /sys/firmware/devicetree for a node still used by rcar_gen2_phy_xlate() can oops."}]}],"affected":[{"product":"Linux","vendor":"Linux","defaultStatus":"unaffected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/phy/renesas/phy-rcar-gen2.c"],"versions":[{"version":"b64b32791fb557f922beebddf74c47baf338cef0","lessThan":"5374f3d53376d35085e0727c8c1b945bf7123996","status":"affected","versionType":"git"},{"version":"b64b32791fb557f922beebddf74c47baf338cef0","lessThan":"b780b8929c759cfa7a892d58625a5ad46cb1cbd2","status":"affected","versionType":"git"}]},{"product":"Linux","vendor":"Linux","defaultStatus":"affected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/phy/renesas/phy-rcar-gen2.c"],"versions":[{"version":"7.0","status":"affected"},{"version":"0","lessThan":"7.0","status":"unaffected","versionType":"semver"},{"version":"7.2.6","lessThanOrEqual":"7.2.*","status":"unaffected","versionType":"semver"},{"version":"7.3-rc1","lessThanOrEqual":"*","status":"unaffected","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"7.0","versionEndExcluding":"7.2.6"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"7.0","versionEndExcluding":"7.3-rc1"}]}]}],"references":[{"url":"https://git.kernel.org/stable/c/5374f3d53376d35085e0727c8c1b945bf7123996"},{"url":"https://git.kernel.org/stable/c/b780b8929c759cfa7a892d58625a5ad46cb1cbd2"}],"title":"phy: renesas: rcar-gen2: Fix double of_node_put on phy creation failure","x_generator":{"engine":"bippy-1.2.0"}}}}