CVE-2026-90256 (GCVE-0-2026-90256)

Vulnerability from cvelistv5 – Published: 2026-09-17 16:07 – Updated: 2026-09-18 17:54
VLAI
Title
Bluetooth: L2CAP: use proto_lock for l2cap_data to fix l2cap_disconn_ind
Summary
In the Linux kernel, the following vulnerability has been resolved: Bluetooth: L2CAP: use proto_lock for l2cap_data to fix l2cap_disconn_ind hci_conn::l2cap_data is accessed without locks in l2cap_disconn_ind via hci_conn_timeout (disc_work) -> hci_proto_disconn_ind -> l2cap_disconn_ind. This is UAF if the l2cap_conn is deleted concurrently. disc_work is disabled sync in hci_conn_del(), so we cannot take hci_dev_lock in disc_work. Fix by using proto_lock to guard l2cap_data, in addition to hdev->lock which is held in other access paths.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: ab4eedb790cae44313759b50fe47da285e2519d5 , < b495a3a9b33bc4e4613e685bf5c96c136caa22d8 (git)
Affected: ab4eedb790cae44313759b50fe47da285e2519d5 , < 2b66c83ff1751d6bd3201b3017206262ab46dc05 (git)
Affected: efc30877bd4bc85fefe98d80af60fafc86e5775e (git)
Affected: f87271d21dd4ee83857ca11b94e7b4952749bbae (git)
Affected: 18ab6b6078fa8191ca30a3065d57bf35d5635761 (git)
Affected: 6.6.84 , < 6.7 (semver)
Affected: 6.12.20 , < 6.13 (semver)
Affected: 6.13.8 , < 6.14 (semver)
guessed Create a notification for this product.
Linux Linux Affected: 6.14
Unaffected: 0 , < 6.14 (semver)
Unaffected: 7.2.6 , ≤ 7.2.* (semver)
Unaffected: 7.3-rc1 , ≤ * (original_commit_for_fix)
guessed Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "net/bluetooth/l2cap_core.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "b495a3a9b33bc4e4613e685bf5c96c136caa22d8",
              "status": "affected",
              "version": "ab4eedb790cae44313759b50fe47da285e2519d5",
              "versionType": "git"
            },
            {
              "lessThan": "2b66c83ff1751d6bd3201b3017206262ab46dc05",
              "status": "affected",
              "version": "ab4eedb790cae44313759b50fe47da285e2519d5",
              "versionType": "git"
            },
            {
              "status": "affected",
              "version": "efc30877bd4bc85fefe98d80af60fafc86e5775e",
              "versionType": "git"
            },
            {
              "status": "affected",
              "version": "f87271d21dd4ee83857ca11b94e7b4952749bbae",
              "versionType": "git"
            },
            {
              "status": "affected",
              "version": "18ab6b6078fa8191ca30a3065d57bf35d5635761",
              "versionType": "git"
            },
            {
              "lessThan": "6.7",
              "status": "affected",
              "version": "6.6.84",
              "versionType": "semver"
            },
            {
              "lessThan": "6.13",
              "status": "affected",
              "version": "6.12.20",
              "versionType": "semver"
            },
            {
              "lessThan": "6.14",
              "status": "affected",
              "version": "6.13.8",
              "versionType": "semver"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "net/bluetooth/l2cap_core.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.14"
            },
            {
              "lessThan": "6.14",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.6",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.3-rc1",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.6",
                  "versionStartIncluding": "6.14",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3-rc1",
                  "versionStartIncluding": "6.14",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionStartIncluding": "6.6.84",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionStartIncluding": "6.12.20",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionStartIncluding": "6.13.8",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nBluetooth: L2CAP: use proto_lock for l2cap_data to fix l2cap_disconn_ind\n\nhci_conn::l2cap_data is accessed without locks in l2cap_disconn_ind via\nhci_conn_timeout (disc_work) -\u003e hci_proto_disconn_ind -\u003e\nl2cap_disconn_ind.  This is UAF if the l2cap_conn is deleted\nconcurrently.\n\ndisc_work is disabled sync in hci_conn_del(), so we cannot take\nhci_dev_lock in disc_work.\n\nFix by using proto_lock to guard l2cap_data, in addition to hdev-\u003elock\nwhich is held in other access paths."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 8.8,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:A - l2cap_disconn_ind() is reached from hci_conn_timeout() (hci_conn.disc_work) via hci_proto_disconn_ind() only for ACL_LINK/LE_LINK; hcon-\u003el2cap_data is installed by l2cap_conn_add() from l2cap_connect_cfm()/l2cap_chan_connect() on that HCI connection, so the triggering peer must be in Bluetooth radio range.\nAC:L - The attacker creates the ACL/LE link so l2cap_conn_add() publishes hcon-\u003el2cap_data, then tears it down so l2cap_conn_del() or the last l2cap_conn_put() from l2cap_chan_destroy() (rfcomm_process_rx on rfcomm_run) frees the object while hci_conn_timeout() reads conn-\u003edisc_reason; both sides are attacker-driven and retryable.\nPR:N - HCI Connection Complete delivers l2cap_connect_cfm() \u2192 l2cap_conn_add() and later disc_work with no host uid or capability check; SDP (PSM 0x0001) and RFCOMM session close on remote disconnect likewise need no pairing, so an unauthenticated Bluetooth peer is enough.\nUI:N - hci_conn_timeout() runs from hdev-\u003eworkqueue after the last hci_conn_drop() once the adapter is powered and connectable; incoming ACL/LE setup, RFCOMM/L2CAP teardown, and the disconnect timer need no per-attack user click.\nS:U - The UAF is of the host kmalloc l2cap_conn used by l2cap_disconn_ind() and only corrupts that kernel\u0027s Bluetooth/HCI state, with no VM, IOMMU, or sandbox boundary crossing.\nC:H - l2cap_disconn_ind() locklessly loads hcon-\u003el2cap_data and reads conn-\u003edisc_reason after l2cap_conn_free() has kfree\u0027d the kmalloc-1k object, so a sprayed replacement discloses kernel heap contents through that dangling pointer.\nI:H - The same freed l2cap_conn can be reallocated under attacker control while hci_conn_timeout() still holds the pointer; heap UAF of this object enables spraying and write/control-flow hijack, and the stale disc_reason is consumed as the HCI abort reason.\nA:H - The syzbot report is a slab-use-after-free read of conn-\u003edisc_reason in l2cap_disconn_ind() from the hci_conn_timeout worker, which oopses or panics the kernel when the freed l2cap_conn slab is touched."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-09-18T17:54:12.512Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/b495a3a9b33bc4e4613e685bf5c96c136caa22d8"
        },
        {
          "url": "https://git.kernel.org/stable/c/2b66c83ff1751d6bd3201b3017206262ab46dc05"
        }
      ],
      "title": "Bluetooth: L2CAP: use proto_lock for l2cap_data to fix l2cap_disconn_ind",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-90256",
    "datePublished": "2026-09-17T16:07:55.427Z",
    "dateReserved": "2026-09-11T19:38:34.796Z",
    "dateUpdated": "2026-09-18T17:54:12.512Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-90256",
      "date": "2026-09-25",
      "epss": "0.0034",
      "percentile": "0.24849"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "product": "Linux",
                "programFiles": [
                  "net/bluetooth/l2cap_core.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "lessThan": "b495a3a9b33bc4e4613e685bf5c96c136caa22d8",
                    "status": "affected",
                    "version": "ab4eedb790cae44313759b50fe47da285e2519d5",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "2b66c83ff1751d6bd3201b3017206262ab46dc05",
                    "status": "affected",
                    "version": "ab4eedb790cae44313759b50fe47da285e2519d5",
                    "versionType": "git"
                  },
                  {
                    "status": "affected",
                    "version": "efc30877bd4bc85fefe98d80af60fafc86e5775e",
                    "versionType": "git"
                  },
                  {
                    "status": "affected",
                    "version": "f87271d21dd4ee83857ca11b94e7b4952749bbae",
                    "versionType": "git"
                  },
                  {
                    "status": "affected",
                    "version": "18ab6b6078fa8191ca30a3065d57bf35d5635761",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "6.7",
                    "status": "affected",
                    "version": "6.6.84",
                    "versionType": "semver"
                  },
                  {
                    "lessThan": "6.13",
                    "status": "affected",
                    "version": "6.12.20",
                    "versionType": "semver"
                  },
                  {
                    "lessThan": "6.14",
                    "status": "affected",
                    "version": "6.13.8",
                    "versionType": "semver"
                  }
                ]
              },
              {
                "defaultStatus": "affected",
                "product": "Linux",
                "programFiles": [
                  "net/bluetooth/l2cap_core.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "status": "affected",
                    "version": "6.14"
                  },
                  {
                    "lessThan": "6.14",
                    "status": "unaffected",
                    "version": "0",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "7.2.*",
                    "status": "unaffected",
                    "version": "7.2.6",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "*",
                    "status": "unaffected",
                    "version": "7.3-rc1",
                    "versionType": "original_commit_for_fix"
                  }
                ]
              }
            ],
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nBluetooth: L2CAP: use proto_lock for l2cap_data to fix l2cap_disconn_ind\n\nhci_conn::l2cap_data is accessed without locks in l2cap_disconn_ind via\nhci_conn_timeout (disc_work) -\u003e hci_proto_disconn_ind -\u003e\nl2cap_disconn_ind.  This is UAF if the l2cap_conn is deleted\nconcurrently.\n\ndisc_work is disabled sync in hci_conn_del(), so we cannot take\nhci_dev_lock in disc_work.\n\nFix by using proto_lock to guard l2cap_data, in addition to hdev-\u003elock\nwhich is held in other access paths."
          }
        ],
        "id": "CVE-2026-90256",
        "lastModified": "2026-09-18T18:17:51.170",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "attackComplexity": "LOW",
                "attackVector": "ADJACENT_NETWORK",
                "availabilityImpact": "HIGH",
                "baseScore": 8.8,
                "baseSeverity": "HIGH",
                "confidentialityImpact": "HIGH",
                "integrityImpact": "HIGH",
                "privilegesRequired": "NONE",
                "scope": "UNCHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
                "version": "3.1"
              },
              "exploitabilityScore": 2.8,
              "impactScore": 5.9,
              "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
              "type": "Secondary"
            }
          ]
        },
        "published": "2026-09-17T17:17:21.980",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/2b66c83ff1751d6bd3201b3017206262ab46dc05"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/b495a3a9b33bc4e4613e685bf5c96c136caa22d8"
          }
        ],
        "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "vulnStatus": "Received"
      }
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Loading…

Loading…

Related by attack behaviour

Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.


Loading…