GCVE Workshop - 22 September 2026 (14:00-18:00), Luxembourg Before The Vulnopticon Conference - Registration

CVE-2026-89763 (GCVE-0-2026-89763)

Vulnerability from cvelistv5 – Published: 2026-09-11 19:47 – Updated: 2026-09-13 06:34
VLAI
Title
KEYS: trusted: Fix TPM teardown ordering
Summary
In the Linux kernel, the following vulnerability has been resolved: KEYS: trusted: Fix TPM teardown ordering trusted_tpm_exit() drops the TPM chip reference and frees the digest array before unregistering the trusted key type. key_type_lookup() holds key_types_sem for reading until the key operation finishes, while unregister_key_type() takes it for writing. It therefore provides the synchronization point that must precede backend teardown. The current order permits this interleaving: CPU 0 CPU 1 trusted_tpm_exit() key_type_lookup("trusted") put_device(&chip->dev) trusted_tpm_seal() kfree(digests) pcrlock() unregister_key_type() tpm_pcr_extend(..., digests) CPU 1 can consequently dereference the freed digest array. The chip can also be released before callbacks stop using it. KASAN reported: BUG: KASAN: slab-use-after-free in tpm_pcr_extend+0x1f0/0x200 Read of size 2 at addr ffff88810872d000 by task poc/89 Call Trace: tpm_pcr_extend+0x1f0/0x200 pcrlock+0x42/0x70 [trusted] trusted_tpm_seal+0x1b6/0x570 [trusted] trusted_instantiate+0x293/0x340 [trusted] __key_instantiate_and_link+0xb2/0x2b0 __key_create_or_update+0x61e/0xb50 __do_sys_add_key+0x1b8/0x310 Allocated by task 88: __kmalloc_noprof+0x1a7/0x490 do_one_initcall+0xa1/0x390 do_init_module+0x2df/0x840 Freed by task 90: kfree+0x131/0x3c0 trusted_tpm_exit+0x59/0xa0 [trusted] __do_sys_delete_module+0x346/0x510 Move unregister_key_type() before releasing either resource. This stops new lookups and waits for in-flight key operations to finish before the backend state is destroyed.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: 0b6cf6b97b7ef1fa3c7fefab0cac897a1c4a3400 , < 753c978f2400f9783eb524842a975d3ac950d511 (git)
Affected: 0b6cf6b97b7ef1fa3c7fefab0cac897a1c4a3400 , < 2f7541afbc57fe9d26769a22c31d8ce8790c9a19 (git)
Affected: 0b6cf6b97b7ef1fa3c7fefab0cac897a1c4a3400 , < 5e2d672280d97d83de43031d93761b12dadd7b8a (git)
guessed Create a notification for this product.
Linux Linux Affected: 5.1
Unaffected: 0 , < 5.1 (semver)
Unaffected: 6.18.50 , ≤ 6.18.* (semver)
Unaffected: 7.2.4 , ≤ 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": [
            "security/keys/trusted-keys/trusted_tpm1.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "753c978f2400f9783eb524842a975d3ac950d511",
              "status": "affected",
              "version": "0b6cf6b97b7ef1fa3c7fefab0cac897a1c4a3400",
              "versionType": "git"
            },
            {
              "lessThan": "2f7541afbc57fe9d26769a22c31d8ce8790c9a19",
              "status": "affected",
              "version": "0b6cf6b97b7ef1fa3c7fefab0cac897a1c4a3400",
              "versionType": "git"
            },
            {
              "lessThan": "5e2d672280d97d83de43031d93761b12dadd7b8a",
              "status": "affected",
              "version": "0b6cf6b97b7ef1fa3c7fefab0cac897a1c4a3400",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "security/keys/trusted-keys/trusted_tpm1.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "5.1"
            },
            {
              "lessThan": "5.1",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.50",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.4",
              "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": "6.18.50",
                  "versionStartIncluding": "5.1",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.4",
                  "versionStartIncluding": "5.1",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3-rc1",
                  "versionStartIncluding": "5.1",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nKEYS: trusted: Fix TPM teardown ordering\n\ntrusted_tpm_exit() drops the TPM chip reference and frees the digest\narray before unregistering the trusted key type. key_type_lookup()\nholds key_types_sem for reading until the key operation finishes, while\nunregister_key_type() takes it for writing. It therefore provides the\nsynchronization point that must precede backend teardown.\n\nThe current order permits this interleaving:\n\n  CPU 0                              CPU 1\n  trusted_tpm_exit()                 key_type_lookup(\"trusted\")\n    put_device(\u0026chip-\u003edev)             trusted_tpm_seal()\n    kfree(digests)                       pcrlock()\n    unregister_key_type()                  tpm_pcr_extend(..., digests)\n\nCPU 1 can consequently dereference the freed digest array. The chip can\nalso be released before callbacks stop using it.\n\nKASAN reported:\n\n  BUG: KASAN: slab-use-after-free in tpm_pcr_extend+0x1f0/0x200\n  Read of size 2 at addr ffff88810872d000 by task poc/89\n  Call Trace:\n    tpm_pcr_extend+0x1f0/0x200\n    pcrlock+0x42/0x70 [trusted]\n    trusted_tpm_seal+0x1b6/0x570 [trusted]\n    trusted_instantiate+0x293/0x340 [trusted]\n    __key_instantiate_and_link+0xb2/0x2b0\n    __key_create_or_update+0x61e/0xb50\n    __do_sys_add_key+0x1b8/0x310\n  Allocated by task 88:\n    __kmalloc_noprof+0x1a7/0x490\n    do_one_initcall+0xa1/0x390\n    do_init_module+0x2df/0x840\n  Freed by task 90:\n    kfree+0x131/0x3c0\n    trusted_tpm_exit+0x59/0xa0 [trusted]\n    __do_sys_delete_module+0x346/0x510\n\nMove unregister_key_type() before releasing either resource. This stops\nnew lookups and waits for in-flight key operations to finish before the\nbackend state is destroyed."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 7.8,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - The UAF is reached only via the local add_key(2) syscall (trusted_instantiate \u2192 trusted_tpm_seal \u2192 pcrlock/tpm_* on global chip/digests) racing trusted_tpm_exit() during delete_module of trusted.ko; no network or adjacent protocol processes this key-type teardown.\nAC:L - The attacker controls both sides of the race by issuing concurrent add_key(\"trusted\") while trusted.ko is unloaded; key_type_lookup() still succeeds until unregister_key_type(), so the documented CPU0/CPU1 interleaving is reliably repeatable without uncontrollable victim memory layout.\nPR:L - add_key(2) on a caller-owned keyring has no capable() check in trusted_instantiate(); every seal/unseal uses the global chip after put_device, and only optional pcrlock() needs CAP_SYS_ADMIN. Per CNA driver-removal UAF precedent, concurrent rmmod of trusted.ko does not require the attacker to hold CAP_SYS_MODULE.\nUI:N - Exploitation is driven by the attacker\u0027s own add_key threads and module-unload timing; no separate victim must mount a filesystem, open a device, or take any other action.\nS:U - The vulnerability is a standard in-kernel slab use-after-free affecting host kernel memory and availability; it does not cross a VM, IOMMU, or other distinct security-authority boundary.\nC:H - KASAN shows a slab-use-after-free read of the freed digests array in tpm_pcr_extend, and put_device may free tpm_chip while callbacks still dereference it; per kernel CNA guidance a UAF enables object reuse and arbitrary kernel read, so Confidentiality is High.\nI:H - Seal/unseal after teardown calls tpm_try_get_ops() which mutates chip (get_device, mutex_lock) and PCR extend consumes the UAF\u0027d digest buffer; use-after-free is heap-sprayable into write and control-flow primitives, so Integrity is High.\nA:H - The KASAN report is a kernel slab-use-after-free oops during add_key versus delete_module; any such UAF can panic or hang the kernel, scoring Availability High even when not fully exploited for code execution."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-09-13T06:34:07.588Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/753c978f2400f9783eb524842a975d3ac950d511"
        },
        {
          "url": "https://git.kernel.org/stable/c/2f7541afbc57fe9d26769a22c31d8ce8790c9a19"
        },
        {
          "url": "https://git.kernel.org/stable/c/5e2d672280d97d83de43031d93761b12dadd7b8a"
        }
      ],
      "title": "KEYS: trusted: Fix TPM teardown ordering",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-89763",
    "datePublished": "2026-09-11T19:47:04.352Z",
    "dateReserved": "2026-09-11T19:38:34.764Z",
    "dateUpdated": "2026-09-13T06:34:07.588Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-89763",
      "date": "2026-09-16",
      "epss": "0.00115",
      "percentile": "0.01762"
    },
    "nvd": "{\"cve\":{\"id\":\"CVE-2026-89763\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2026-09-11T20:20:07.523\",\"lastModified\":\"2026-09-13T07:17:40.717\",\"vulnStatus\":\"Received\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nKEYS: trusted: Fix TPM teardown ordering\\n\\ntrusted_tpm_exit() drops the TPM chip reference and frees the digest\\narray before unregistering the trusted key type. key_type_lookup()\\nholds key_types_sem for reading until the key operation finishes, while\\nunregister_key_type() takes it for writing. It therefore provides the\\nsynchronization point that must precede backend teardown.\\n\\nThe current order permits this interleaving:\\n\\n  CPU 0                              CPU 1\\n  trusted_tpm_exit()                 key_type_lookup(\\\"trusted\\\")\\n    put_device(\u0026chip-\u003edev)             trusted_tpm_seal()\\n    kfree(digests)                       pcrlock()\\n    unregister_key_type()                  tpm_pcr_extend(..., digests)\\n\\nCPU 1 can consequently dereference the freed digest array. The chip can\\nalso be released before callbacks stop using it.\\n\\nKASAN reported:\\n\\n  BUG: KASAN: slab-use-after-free in tpm_pcr_extend+0x1f0/0x200\\n  Read of size 2 at addr ffff88810872d000 by task poc/89\\n  Call Trace:\\n    tpm_pcr_extend+0x1f0/0x200\\n    pcrlock+0x42/0x70 [trusted]\\n    trusted_tpm_seal+0x1b6/0x570 [trusted]\\n    trusted_instantiate+0x293/0x340 [trusted]\\n    __key_instantiate_and_link+0xb2/0x2b0\\n    __key_create_or_update+0x61e/0xb50\\n    __do_sys_add_key+0x1b8/0x310\\n  Allocated by task 88:\\n    __kmalloc_noprof+0x1a7/0x490\\n    do_one_initcall+0xa1/0x390\\n    do_init_module+0x2df/0x840\\n  Freed by task 90:\\n    kfree+0x131/0x3c0\\n    trusted_tpm_exit+0x59/0xa0 [trusted]\\n    __do_sys_delete_module+0x346/0x510\\n\\nMove unregister_key_type() before releasing either resource. This stops\\nnew lookups and waits for in-flight key operations to finish before the\\nbackend state is destroyed.\"}],\"affected\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"affectedData\":[{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"unaffected\",\"programFiles\":[\"security/keys/trusted-keys/trusted_tpm1.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"0b6cf6b97b7ef1fa3c7fefab0cac897a1c4a3400\",\"lessThan\":\"753c978f2400f9783eb524842a975d3ac950d511\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"0b6cf6b97b7ef1fa3c7fefab0cac897a1c4a3400\",\"lessThan\":\"2f7541afbc57fe9d26769a22c31d8ce8790c9a19\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"0b6cf6b97b7ef1fa3c7fefab0cac897a1c4a3400\",\"lessThan\":\"5e2d672280d97d83de43031d93761b12dadd7b8a\",\"versionType\":\"git\",\"status\":\"affected\"}]},{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"affected\",\"programFiles\":[\"security/keys/trusted-keys/trusted_tpm1.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"5.1\",\"status\":\"affected\"},{\"version\":\"0\",\"lessThan\":\"5.1\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.18.50\",\"lessThanOrEqual\":\"6.18.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"7.2.4\",\"lessThanOrEqual\":\"7.2.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"7.3-rc1\",\"lessThanOrEqual\":\"*\",\"versionType\":\"original_commit_for_fix\",\"status\":\"unaffected\"}]}]}],\"metrics\":{\"cvssMetricV31\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"type\":\"Secondary\",\"cvssData\":{\"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\",\"attackVector\":\"LOCAL\",\"attackComplexity\":\"LOW\",\"privilegesRequired\":\"LOW\",\"userInteraction\":\"NONE\",\"scope\":\"UNCHANGED\",\"confidentialityImpact\":\"HIGH\",\"integrityImpact\":\"HIGH\",\"availabilityImpact\":\"HIGH\"},\"exploitabilityScore\":1.8,\"impactScore\":5.9}]},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/2f7541afbc57fe9d26769a22c31d8ce8790c9a19\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/5e2d672280d97d83de43031d93761b12dadd7b8a\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/753c978f2400f9783eb524842a975d3ac950d511\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}",
    "redhat_vex": {
      "aggregate_severity": "Moderate",
      "current_release_date": "2026-09-13T06:52:58+00:00",
      "cve": "CVE-2026-89763",
      "id": "CVE-2026-89763",
      "initial_release_date": "2026-09-11T19:47:04.352000+00:00",
      "product_status:known_affected": "2",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: Linux kernel: Use-after-free in TPM trusted keys due to incorrect teardown ordering",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-89763.json",
      "version": "3"
    },
    "suse_vex": {
      "aggregate_severity": "moderate",
      "current_release_date": "2026-09-12T16:22:00Z",
      "cve": "CVE-2026-89763",
      "id": "CVE-2026-89763",
      "initial_release_date": "2026-09-12T16:22:00Z",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2026-89763",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2026-89763.json",
      "version": "2"
    }
  }
}



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…

Detection rules are retrieved from Rulezet.

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…