Files
vuln-cve/data/2026/90xxx/CVE-2026-90288.json
T

138 lines
8.0 KiB
JSON

{
"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-10-19T09:01:06.628Z"
},
"containers": {
"cna": {
"providerMetadata": {
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux",
"dateUpdated": "2026-10-19T09:01:06.628Z"
},
"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",
"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"
}
]
}
]
}
],
"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"
}
}
}
}