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

180 lines
10 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"cveMetadata": {
"cveId": "CVE-2026-90427",
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"state": "PUBLISHED",
"assignerShortName": "Linux",
"dateReserved": "2026-09-11T19:38:34.814Z",
"datePublished": "2026-09-17T16:09:49.121Z",
"dateUpdated": "2026-10-21T12:51:38.034Z"
},
"containers": {
"cna": {
"providerMetadata": {
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux",
"dateUpdated": "2026-10-21T12:51:38.034Z"
},
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\niommu/tegra241-cmdqv: Don't fall back to a freed smmu after devm_krealloc()\n\n__tegra241_cmdqv_probe() uses devm_krealloc() to grow @smmu into the larger\ntegra241_cmdqv, which frees the original @smmu once it relocates. A failure\nafter that returned NULL, and the caller then dereferenced the freed @smmu\non its fallback path.\n\nReturn an int and take @smmu by reference instead, then update *smmu to the\nreallocated pointer after devm_krealloc() succeeds, so the caller and its\nfallback path both use the live @smmu rather than the freed original."
}
],
"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 UAF is reached from arm_smmu_device_probe() → arm_smmu_impl_probe() → tegra241_cmdqv_probe() → __tegra241_cmdqv_probe() when ACPI IORT (acpi_iort_init()/iort_add_platform_device(\"arm-smmu-v3\")) or DT nvidia,tegra264-smmu binds the SMMU. No protocol message supplies the stale pointer; it is a local devm_krealloc() lifetime bug.\nAC:H - out_fallback uses the freed @smmu only if a relocating devm_krealloc() is followed by kzalloc_objs(cmdqv->vintfs) or request_threaded_irq() failing. arm_smmu_driver sets suppress_bind_attrs, CONFIG_ARM_SMMU_V3=y, and this probe never returns -EPROBE_DEFER, so a local attacker cannot re-enter it or reliably force those GFP_KERNEL/IRQ failures.\nPR:N - arm_smmu_device_probe() has no capable() check; tegra241_cmdqv_probe() runs from the platform .probe in kernel_init once IORT creates the arm-smmu-v3 device or DT matches nvidia,tegra264-smmu. No OS account or user-namespace capability is required to be on that path.\nUI:N - tegra241_cmdqv_probe()’s out_fallback dereference of the freed @smmu runs inside arm_smmu_device_probe() during automatic platform bind; no victim must mount a filesystem, open a device node, or load a module by hand.\nS:U - The use-after-free is of the host kernel arm_smmu_device that devm_krealloc() freed in __tegra241_cmdqv_probe(); out_fallback’s smmu->options write and the rest of arm_smmu_device_probe() stay in that kernel. This is not leftover SMMU translation tables or a guest/DMA walk of attacker-controlled IOMMU page tables.\nC:H - After a relocating devm_krealloc(), tegra241_cmdqv_probe() returns ERR_PTR(-ENODEV) and arm_smmu_impl_probe() hands the freed @smmu back to arm_smmu_device_probe(). That use-after-free of the SMMU object can be reclaimed and, per kernel UAF guidance, enables arbitrary kernel memory disclosure.\nI:H - out_fallback writes smmu->options through the freed pointer, then arm_smmu_device_probe() continues with arm_smmu_device_hw_probe(), arm_smmu_init_structures(), and iommu_device_register() on the same dangling arm_smmu_device, a write-after-free that yields heap-spray write and control-flow hijack primitives.\nA:H - out_fallback dereferences smmu->impl_dev and later SMMU probe/runtime uses the freed arm_smmu_device; that use-after-free oopses or panics the kernel even when not turned into a full exploit."
}
]
}
],
"affected": [
{
"product": "Linux",
"vendor": "Linux",
"defaultStatus": "unaffected",
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"programFiles": [
"drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c"
],
"versions": [
{
"version": "918eb5c856f6ce4cf93b4b38e4b5e156905c5943",
"lessThan": "ea2edb27ef2648d8687cd0fc3ec3ba1793436e7e",
"status": "affected",
"versionType": "git"
},
{
"version": "918eb5c856f6ce4cf93b4b38e4b5e156905c5943",
"lessThan": "268cbe3a36ae57a2ec09601f343b92f6f092d505",
"status": "affected",
"versionType": "git"
},
{
"version": "918eb5c856f6ce4cf93b4b38e4b5e156905c5943",
"lessThan": "86197679b293f0601c3331d545f99a70a7780aa9",
"status": "affected",
"versionType": "git"
},
{
"version": "918eb5c856f6ce4cf93b4b38e4b5e156905c5943",
"lessThan": "d4d05f55e9da646ec03adfa77260eb46f4163749",
"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/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c"
],
"versions": [
{
"version": "6.12",
"status": "affected"
},
{
"version": "0",
"lessThan": "6.12",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "6.12.114",
"lessThanOrEqual": "6.12.*",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "6.18.57",
"lessThanOrEqual": "6.18.*",
"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": "6.12",
"versionEndExcluding": "6.12.114"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "6.12",
"versionEndExcluding": "6.18.57"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "6.12",
"versionEndExcluding": "7.2.6"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "6.12",
"versionEndExcluding": "7.3"
}
]
}
]
}
],
"references": [
{
"url": "https://git.kernel.org/stable/c/ea2edb27ef2648d8687cd0fc3ec3ba1793436e7e"
},
{
"url": "https://git.kernel.org/stable/c/268cbe3a36ae57a2ec09601f343b92f6f092d505"
},
{
"url": "https://git.kernel.org/stable/c/86197679b293f0601c3331d545f99a70a7780aa9"
},
{
"url": "https://git.kernel.org/stable/c/d4d05f55e9da646ec03adfa77260eb46f4163749"
}
],
"title": "iommu/tegra241-cmdqv: Don't fall back to a freed smmu after devm_krealloc()",
"x_generator": {
"engine": "bippy-1.2.0"
}
}
}
}