Files
vuln-cve/data/2026/89xxx/CVE-2026-89940.json
T

180 lines
10 KiB
JSON

{
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"cveMetadata": {
"cveId": "CVE-2026-89940",
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"state": "PUBLISHED",
"assignerShortName": "Linux",
"dateReserved": "2026-09-11T19:38:34.776Z",
"datePublished": "2026-09-16T10:32:28.395Z",
"dateUpdated": "2026-10-19T08:55:14.651Z"
},
"containers": {
"cna": {
"providerMetadata": {
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux",
"dateUpdated": "2026-10-19T08:55:14.651Z"
},
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\niio: buffer: Tie IIO dma fence lock lifetime to the fence\n\nThe `iio_dma_fence` implementation currently uses a lock embedded in the\n`iio_dmabuf_priv`. But the `iio_dma_fence` can outlive the\n`iio_dmabuf_priv`, which can cause a use-after-free.\n\nTie the lifetime of the lock to the lifetime of the fence by embedding them\nin the same struct.\n\nWe can't just hold a reference to the `iio_dmabuf_priv` from the\n`iio_dma_fence` since `iio_buffer_dmabuf_release()` might sleep and the\nfence release callback is not allowed to sleep.\n\nNote that the `dma_fence` framework now has an internal lock that gets used\nwhen the passing `NULL` for `lock` in `dma_fence_init()`, but in order to\nallow this patch to be backportable use an external lock."
}
],
"metrics": [
{
"cvssV3_1": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
"baseScore": 7.8,
"baseSeverity": "HIGH"
},
"scenarios": [
{
"lang": "en",
"value": "AV:L - The use-after-free is reached through local IIO_BUFFER_DMABUF_ATTACH/ENQUEUE/DETACH ioctls on an anonymous iio:buffer fd from IIO_BUFFER_GET_FD_IOCTL on /dev/iio:deviceN; it is not reachable from network packet processing or adjacent-link protocols.\nAC:L - The attacker fully controls the lifetime mismatch: they attach and enqueue a DMA-BUF so the dma_fence lock lives in iio_dmabuf_priv, then detach so priv is freed while the fence remains in the DMA-BUF reservation, and later DMA_BUF_IOCTL_SYNC/wait takes that freed lock.\nPR:L - The IIO open and ioctl path has no capability check, only filesystem access to the device node. On Android phones, industrial converters, and embedded systems exposing this DMA-BUF buffer API, /dev/iio:device* is commonly group-accessible without init-namespace root.\nUI:N - The attacker opens the IIO device, issues the DMA-BUF attach/enqueue/detach ioctls, and waits on their own DMA-BUF file descriptor; no separate victim action is required.\nS:U - This is a standard in-kernel heap use-after-free of iio_dmabuf_priv within the host kernel's security authority, not a VM escape, IOMMU boundary bypass, or sandbox escape.\nC:H - The dma_fence retains a pointer to a spinlock embedded in freed iio_dmabuf_priv; later fence wait/sync operations use that lock, a slab use-after-free that can be turned into an arbitrary kernel memory read via heap spraying.\nI:H - The same use-after-free of iio_dmabuf_priv lets an attacker reclaim the object and corrupt dma_fence lock and callback state during later wait or signaling paths, enabling heap corruption, arbitrary write, and control-flow hijacking.\nA:H - Taking a spinlock in already-freed iio_dmabuf_priv memory causes a kernel oops, BUG, or panic; any use-after-free is high availability impact even when not fully exploited."
}
]
}
],
"affected": [
{
"product": "Linux",
"vendor": "Linux",
"defaultStatus": "unaffected",
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"programFiles": [
"drivers/iio/industrialio-buffer.c"
],
"versions": [
{
"version": "3e26d9f08fbe0b73e951a5e810fdb7a332b7e37f",
"lessThan": "6865d79fca17a80fbd60c12550ca9a5e0e20e0eb",
"status": "affected",
"versionType": "git"
},
{
"version": "3e26d9f08fbe0b73e951a5e810fdb7a332b7e37f",
"lessThan": "510497e31be4f241103507315a859e2085ccb081",
"status": "affected",
"versionType": "git"
},
{
"version": "3e26d9f08fbe0b73e951a5e810fdb7a332b7e37f",
"lessThan": "8b3e221590181a8beb3735bbabf166df02c839b5",
"status": "affected",
"versionType": "git"
},
{
"version": "3e26d9f08fbe0b73e951a5e810fdb7a332b7e37f",
"lessThan": "f25ec4627d935dedfb5fe83bd2c2678cdcc19611",
"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/iio/industrialio-buffer.c"
],
"versions": [
{
"version": "6.11",
"status": "affected"
},
{
"version": "0",
"lessThan": "6.11",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "6.12.110",
"lessThanOrEqual": "6.12.*",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "6.18.51",
"lessThanOrEqual": "6.18.*",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "7.2.5",
"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.11",
"versionEndExcluding": "6.12.110"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "6.11",
"versionEndExcluding": "6.18.51"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "6.11",
"versionEndExcluding": "7.2.5"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "6.11",
"versionEndExcluding": "7.3"
}
]
}
]
}
],
"references": [
{
"url": "https://git.kernel.org/stable/c/6865d79fca17a80fbd60c12550ca9a5e0e20e0eb"
},
{
"url": "https://git.kernel.org/stable/c/510497e31be4f241103507315a859e2085ccb081"
},
{
"url": "https://git.kernel.org/stable/c/8b3e221590181a8beb3735bbabf166df02c839b5"
},
{
"url": "https://git.kernel.org/stable/c/f25ec4627d935dedfb5fe83bd2c2678cdcc19611"
}
],
"title": "iio: buffer: Tie IIO dma fence lock lifetime to the fence",
"x_generator": {
"engine": "bippy-1.2.0"
}
}
}
}