{"id":"CVE-2026-98456","state":"PUBLISHED","title":"Bluetooth: mgmt: fix race in read_unconf_index_list()","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nBluetooth: mgmt: fix race in read_unconf_index_list()\n\nread_unconf_index_list() counts unconfigured controllers before allocating\nits response, then checks the device flags again while filling it.\n\nhci_dev_list_lock stabilizes list membership, but it does not serialize the\nper-device flags. During asynchronous controller setup, the worker can set\nHCI_UNCONFIGURED and clear HCI_SETUP between the two passes. A controller\nomitted from the allocation count can then become eligible for the fill\npass, causing an out-of-bounds write to rp->index[].\n\nAllocate space for every device on hci_dev_list. Since list membership\ncannot change while hci_dev_list_lock is held, the response remains large\nenough regardless of flag transitions. The reported count and response\nlength still include only eligible unconfigured controllers.","publishedAt":"2026-10-18T15:15:05.909Z","updatedAt":"2026-10-30T12:38:14.270Z","severity":{"score":7,"label":"High","version":"3.1","vector":"CVSS:3.1/AV:L/AC:H/PR:L/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":"73d1df2a7a1036a1f000e5f0ece6ade3e082b854","status":"affected","lessThan":"fa6f79bb0009406bb11e6912b53ab7c564d6f06b","versionType":"git"},{"version":"73d1df2a7a1036a1f000e5f0ece6ade3e082b854","status":"affected","lessThan":"76dc7e0297f6f7ebefc36a69251e3f4a676d9853","versionType":"git"},{"version":"73d1df2a7a1036a1f000e5f0ece6ade3e082b854","status":"affected","lessThan":"9c32455f490b960efccedd041c7aabb1a04c5cc4","versionType":"git"},{"version":"73d1df2a7a1036a1f000e5f0ece6ade3e082b854","status":"affected","lessThan":"524e0450dd9a396f99a81b045219b0e2ea0dab57","versionType":"git"},{"version":"73d1df2a7a1036a1f000e5f0ece6ade3e082b854","status":"affected","lessThan":"8ddf962c76432a10a6cb80042875cbc48a9c056b","versionType":"git"},{"version":"73d1df2a7a1036a1f000e5f0ece6ade3e082b854","status":"affected","lessThan":"416546cd6a54e9b68f2b91bc680b1ee17dcd77a1","versionType":"git"},{"version":"73d1df2a7a1036a1f000e5f0ece6ade3e082b854","status":"affected","lessThan":"2e8bba0360d1379bfa8da47c8f5dadbb10a3fba1","versionType":"git"},{"version":"73d1df2a7a1036a1f000e5f0ece6ade3e082b854","status":"affected","lessThan":"b5dbb41b212c50c095a4dbee3017a84fe94f033b","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["net/bluetooth/mgmt.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"3.17","status":"affected"},{"version":"0","status":"unaffected","lessThan":"3.17","versionType":"semver"},{"version":"5.10.273","status":"unaffected","lessThanOrEqual":"5.10.*","versionType":"semver"},{"version":"5.15.224","status":"unaffected","lessThanOrEqual":"5.15.*","versionType":"semver"},{"version":"6.1.191","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.158","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.112","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.55","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.2.9","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":["net/bluetooth/mgmt.c"]}],"references":["https://git.kernel.org/stable/c/fa6f79bb0009406bb11e6912b53ab7c564d6f06b","https://git.kernel.org/stable/c/76dc7e0297f6f7ebefc36a69251e3f4a676d9853","https://git.kernel.org/stable/c/9c32455f490b960efccedd041c7aabb1a04c5cc4","https://git.kernel.org/stable/c/524e0450dd9a396f99a81b045219b0e2ea0dab57","https://git.kernel.org/stable/c/8ddf962c76432a10a6cb80042875cbc48a9c056b","https://git.kernel.org/stable/c/416546cd6a54e9b68f2b91bc680b1ee17dcd77a1","https://git.kernel.org/stable/c/2e8bba0360d1379bfa8da47c8f5dadbb10a3fba1","https://git.kernel.org/stable/c/b5dbb41b212c50c095a4dbee3017a84fe94f033b"],"weaknesses":[],"ingestedAt":"2026-10-30T12:58:04.520Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2026/98xxx/CVE-2026-98456.json","commit":"1f312381e38164a43607eebab851b151dd16861e","baselineCommit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-98456","state":"PUBLISHED","datePublished":"2026-10-18T15:15:05.909Z","dateUpdated":"2026-10-30T12:38:14.270Z","assignerShortName":"Linux","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateReserved":"2026-09-25T10:25:14.350Z"},"containers":{"cna":{"title":"Bluetooth: mgmt: fix race in read_unconf_index_list()","descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nBluetooth: mgmt: fix race in read_unconf_index_list()\n\nread_unconf_index_list() counts unconfigured controllers before allocating\nits response, then checks the device flags again while filling it.\n\nhci_dev_list_lock stabilizes list membership, but it does not serialize the\nper-device flags. During asynchronous controller setup, the worker can set\nHCI_UNCONFIGURED and clear HCI_SETUP between the two passes. A controller\nomitted from the allocation count can then become eligible for the fill\npass, causing an out-of-bounds write to rp->index[].\n\nAllocate space for every device on hci_dev_list. Since list membership\ncannot change while hci_dev_list_lock is held, the response remains large\nenough regardless of flag transitions. The reported count and response\nlength still include only eligible unconfigured controllers."}],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"73d1df2a7a1036a1f000e5f0ece6ade3e082b854","status":"affected","lessThan":"fa6f79bb0009406bb11e6912b53ab7c564d6f06b","versionType":"git"},{"version":"73d1df2a7a1036a1f000e5f0ece6ade3e082b854","status":"affected","lessThan":"76dc7e0297f6f7ebefc36a69251e3f4a676d9853","versionType":"git"},{"version":"73d1df2a7a1036a1f000e5f0ece6ade3e082b854","status":"affected","lessThan":"9c32455f490b960efccedd041c7aabb1a04c5cc4","versionType":"git"},{"version":"73d1df2a7a1036a1f000e5f0ece6ade3e082b854","status":"affected","lessThan":"524e0450dd9a396f99a81b045219b0e2ea0dab57","versionType":"git"},{"version":"73d1df2a7a1036a1f000e5f0ece6ade3e082b854","status":"affected","lessThan":"8ddf962c76432a10a6cb80042875cbc48a9c056b","versionType":"git"},{"version":"73d1df2a7a1036a1f000e5f0ece6ade3e082b854","status":"affected","lessThan":"416546cd6a54e9b68f2b91bc680b1ee17dcd77a1","versionType":"git"},{"version":"73d1df2a7a1036a1f000e5f0ece6ade3e082b854","status":"affected","lessThan":"2e8bba0360d1379bfa8da47c8f5dadbb10a3fba1","versionType":"git"},{"version":"73d1df2a7a1036a1f000e5f0ece6ade3e082b854","status":"affected","lessThan":"b5dbb41b212c50c095a4dbee3017a84fe94f033b","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["net/bluetooth/mgmt.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"3.17","status":"affected"},{"version":"0","status":"unaffected","lessThan":"3.17","versionType":"semver"},{"version":"5.10.273","status":"unaffected","lessThanOrEqual":"5.10.*","versionType":"semver"},{"version":"5.15.224","status":"unaffected","lessThanOrEqual":"5.15.*","versionType":"semver"},{"version":"6.1.191","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.158","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.112","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.55","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.2.9","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":["net/bluetooth/mgmt.c"]}],"references":[{"url":"https://git.kernel.org/stable/c/fa6f79bb0009406bb11e6912b53ab7c564d6f06b"},{"url":"https://git.kernel.org/stable/c/76dc7e0297f6f7ebefc36a69251e3f4a676d9853"},{"url":"https://git.kernel.org/stable/c/9c32455f490b960efccedd041c7aabb1a04c5cc4"},{"url":"https://git.kernel.org/stable/c/524e0450dd9a396f99a81b045219b0e2ea0dab57"},{"url":"https://git.kernel.org/stable/c/8ddf962c76432a10a6cb80042875cbc48a9c056b"},{"url":"https://git.kernel.org/stable/c/416546cd6a54e9b68f2b91bc680b1ee17dcd77a1"},{"url":"https://git.kernel.org/stable/c/2e8bba0360d1379bfa8da47c8f5dadbb10a3fba1"},{"url":"https://git.kernel.org/stable/c/b5dbb41b212c50c095a4dbee3017a84fe94f033b"}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H","baseScore":7,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:L - sendmsg() on a local PF_BLUETOOTH/BTPROTO_HCI socket bound to HCI_CHANNEL_CONTROL reaches hci_sock_sendmsg()->hci_mgmt_cmd()->read_unconf_index_list(). No over-the-air Bluetooth message supplies this management command or the corrupted data.\nAC:H - The overwrite requires the setup worker to set HCI_UNCONFIGURED and clear HCI_SETUP between read_unconf_index_list()'s sizing and filling walks. An untrusted management-socket caller cannot initiate or synchronize that controller-setup transition, so success depends on external timing.\nPR:L - mgmt_handlers[] marks MGMT_OP_READ_UNCONF_INDEX_LIST with HCI_MGMT_UNTRUSTED, and hci_sock_bind() permits HCI_CHANNEL_CONTROL binding without CAP_NET_ADMIN. Therefore any local user can issue the zero-length command.\nUI:N - The attacker can repeatedly send the management command without another user opening data or approving an operation; asynchronous controller setup is system state rather than required user interaction.\nS:U - The allocation and rp->index[] overwrite occur in read_unconf_index_list() within the host kernel heap, and no VM, IOMMU, or other security-authority boundary is crossed.\nC:H - When a newly eligible controller exceeds the allocation basis, rp->index[count++] writes 16-bit IDs past the kmalloc buffer and corrupts adjacent kernel heap storage; exploitable heap corruption can expose arbitrary kernel data.\nI:H - rp->index[count++] performs an out-of-bounds heap write for each newly eligible controller, allowing adjacent kernel objects to be modified and potentially enabling control-flow hijacking.\nA:H - The out-of-bounds writes can corrupt allocator or adjacent-object state and cause a kernel oops or panic, resulting in complete host availability loss."}]}],"providerMetadata":{"shortName":"Linux","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateUpdated":"2026-10-30T12:38:14.270Z"},"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"3.17","versionEndExcluding":"5.10.273"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"3.17","versionEndExcluding":"5.15.224"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"3.17","versionEndExcluding":"6.1.191"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"3.17","versionEndExcluding":"6.6.158"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"3.17","versionEndExcluding":"6.12.112"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"3.17","versionEndExcluding":"6.18.55"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"3.17","versionEndExcluding":"7.2.9"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"3.17","versionEndExcluding":"7.3"}]}]}],"x_generator":{"engine":"bippy-1.2.0"}}}}}