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

CVE-2026-89988 (GCVE-0-2026-89988)

Vulnerability from cvelistv5 – Published: 2026-09-16 10:33 – Updated: 2026-09-16 14:41
VLAI
Title
kprobes: Protect kprobe_blacklist with RCU
Summary
In the Linux kernel, the following vulnerability has been resolved: kprobes: Protect kprobe_blacklist with RCU __within_kprobe_blacklist() traverses kprobe_blacklist without holding kprobe_mutex. When a module is unloaded, kprobe_remove_area_blacklist() removes blacklist entries and immediately frees them with kfree(). A concurrent call to within_kprobe_blacklist() can therefore dereference freed memory. Furthermore, within_kprobe_blacklist() can be called in atomic or non-preemptible contexts where the sleeping kprobe_mutex cannot be taken. Protect kprobe_blacklist with RCU. Use guard(rcu)() and list_for_each_entry_rcu() for traversal, list_add_tail_rcu() for insertions, list_del_rcu() for deletions, and kfree_rcu() to reclaim entries safely after a grace period.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: 376e242429bf8539ef39a080ac113c8799840b13 , < 8f406205003f741225f620f0e357ca0de71d45e3 (git)
Affected: 376e242429bf8539ef39a080ac113c8799840b13 , < 630ed8734a02b992e8a97538179c2ece42c5210f (git)
Affected: 376e242429bf8539ef39a080ac113c8799840b13 , < 518d9b5568bb06f86e4434f7a30faa9612ea91ad (git)
Affected: 376e242429bf8539ef39a080ac113c8799840b13 , < 5da247e4d1e8661d4d6f997101d59967e8994e32 (git)
Affected: 376e242429bf8539ef39a080ac113c8799840b13 , < 6e62cf983a2bd547e6bbd3f935539233e5f97f8f (git)
Affected: 376e242429bf8539ef39a080ac113c8799840b13 , < 0c4256196b3a105307e2235fbfd85e768bbcdd0f (git)
guessed Create a notification for this product.
Linux Linux Affected: 3.16
Unaffected: 0 , < 3.16 (semver)
Unaffected: 6.1.188 , ≤ 6.1.* (semver)
Unaffected: 6.6.157 , ≤ 6.6.* (semver)
Unaffected: 6.12.110 , ≤ 6.12.* (semver)
Unaffected: 6.18.51 , ≤ 6.18.* (semver)
Unaffected: 7.2.5 , ≤ 7.2.* (semver)
Unaffected: 7.3-rc2 , ≤ * (original_commit_for_fix)
guessed Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "include/linux/kprobes.h",
            "kernel/kprobes.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "8f406205003f741225f620f0e357ca0de71d45e3",
              "status": "affected",
              "version": "376e242429bf8539ef39a080ac113c8799840b13",
              "versionType": "git"
            },
            {
              "lessThan": "630ed8734a02b992e8a97538179c2ece42c5210f",
              "status": "affected",
              "version": "376e242429bf8539ef39a080ac113c8799840b13",
              "versionType": "git"
            },
            {
              "lessThan": "518d9b5568bb06f86e4434f7a30faa9612ea91ad",
              "status": "affected",
              "version": "376e242429bf8539ef39a080ac113c8799840b13",
              "versionType": "git"
            },
            {
              "lessThan": "5da247e4d1e8661d4d6f997101d59967e8994e32",
              "status": "affected",
              "version": "376e242429bf8539ef39a080ac113c8799840b13",
              "versionType": "git"
            },
            {
              "lessThan": "6e62cf983a2bd547e6bbd3f935539233e5f97f8f",
              "status": "affected",
              "version": "376e242429bf8539ef39a080ac113c8799840b13",
              "versionType": "git"
            },
            {
              "lessThan": "0c4256196b3a105307e2235fbfd85e768bbcdd0f",
              "status": "affected",
              "version": "376e242429bf8539ef39a080ac113c8799840b13",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "include/linux/kprobes.h",
            "kernel/kprobes.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "3.16"
            },
            {
              "lessThan": "3.16",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.1.*",
              "status": "unaffected",
              "version": "6.1.188",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.157",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.110",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.51",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.5",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.3-rc2",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.1.188",
                  "versionStartIncluding": "3.16",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.157",
                  "versionStartIncluding": "3.16",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.110",
                  "versionStartIncluding": "3.16",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.51",
                  "versionStartIncluding": "3.16",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.5",
                  "versionStartIncluding": "3.16",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3-rc2",
                  "versionStartIncluding": "3.16",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nkprobes: Protect kprobe_blacklist with RCU\n\n__within_kprobe_blacklist() traverses kprobe_blacklist without holding\nkprobe_mutex. When a module is unloaded, kprobe_remove_area_blacklist()\nremoves blacklist entries and immediately frees them with kfree().\nA concurrent call to within_kprobe_blacklist() can therefore dereference\nfreed memory.\n\nFurthermore, within_kprobe_blacklist() can be called in atomic or\nnon-preemptible contexts where the sleeping kprobe_mutex cannot be taken.\n\nProtect kprobe_blacklist with RCU. Use guard(rcu)() and\nlist_for_each_entry_rcu() for traversal, list_add_tail_rcu() for\ninsertions, list_del_rcu() for deletions, and kfree_rcu() to reclaim\nentries safely after a grace period."
        }
      ],
      "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 local syscalls: x86 perf_event_open() hardware execute breakpoints and register_kprobe() (tracefs, perf kprobes, BPF). It is not invoked from network packet processing or a remote service.\nAC:L - An attacker can loop the blacklist walk while concurrently causing module COMING/GOING so kprobe_remove_area_blacklist() does list_del/kfree, creating both sides of the race. Attacker-driven use-after-free races are AC:L.\nPR:L - x86 hw_breakpoint_arch_parse() calls within_kprobe_blacklist() for kernel execute breakpoints during perf_event_open() before hw_breakpoint_parse()\u0027s CAP_SYS_ADMIN check, so an unprivileged user can trigger the walk. Module autoload via request_module() can mutate the list without CAP_SYS_MODULE.\nUI:N - The attacker triggers the race with their own syscalls (perf_event_open and module autoload/unload). No separate victim action is required.\nS:U - The bug is kernel-heap use-after-free in kprobes. Effects stay inside the kernel\u0027s security authority and do not cross a VM, IOMMU, or other boundary.\nC:H - Concurrent walk versus kfree of struct kprobe_blacklist_entry is a heap use-after-free. Reclaiming the object yields an arbitrary kernel read primitive, so confidentiality impact is high.\nI:H - A heap use-after-free on a list node is exploitable via heap spraying for an arbitrary write and control-flow hijack, so integrity impact is high.\nA:H - Following the freed blacklist entry\u0027s next pointer or fields causes a kernel oops or panic, taking down the system."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-09-16T14:41:04.007Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/8f406205003f741225f620f0e357ca0de71d45e3"
        },
        {
          "url": "https://git.kernel.org/stable/c/630ed8734a02b992e8a97538179c2ece42c5210f"
        },
        {
          "url": "https://git.kernel.org/stable/c/518d9b5568bb06f86e4434f7a30faa9612ea91ad"
        },
        {
          "url": "https://git.kernel.org/stable/c/5da247e4d1e8661d4d6f997101d59967e8994e32"
        },
        {
          "url": "https://git.kernel.org/stable/c/6e62cf983a2bd547e6bbd3f935539233e5f97f8f"
        },
        {
          "url": "https://git.kernel.org/stable/c/0c4256196b3a105307e2235fbfd85e768bbcdd0f"
        }
      ],
      "title": "kprobes: Protect kprobe_blacklist with RCU",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-89988",
    "datePublished": "2026-09-16T10:33:03.003Z",
    "dateReserved": "2026-09-11T19:38:34.779Z",
    "dateUpdated": "2026-09-16T14:41:04.007Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "nvd": "{\"cve\":{\"id\":\"CVE-2026-89988\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2026-09-16T11:17:09.890\",\"lastModified\":\"2026-09-16T15:18:22.680\",\"vulnStatus\":\"Received\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nkprobes: Protect kprobe_blacklist with RCU\\n\\n__within_kprobe_blacklist() traverses kprobe_blacklist without holding\\nkprobe_mutex. When a module is unloaded, kprobe_remove_area_blacklist()\\nremoves blacklist entries and immediately frees them with kfree().\\nA concurrent call to within_kprobe_blacklist() can therefore dereference\\nfreed memory.\\n\\nFurthermore, within_kprobe_blacklist() can be called in atomic or\\nnon-preemptible contexts where the sleeping kprobe_mutex cannot be taken.\\n\\nProtect kprobe_blacklist with RCU. Use guard(rcu)() and\\nlist_for_each_entry_rcu() for traversal, list_add_tail_rcu() for\\ninsertions, list_del_rcu() for deletions, and kfree_rcu() to reclaim\\nentries safely after a grace period.\"}],\"affected\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"affectedData\":[{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"unaffected\",\"programFiles\":[\"include/linux/kprobes.h\",\"kernel/kprobes.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"376e242429bf8539ef39a080ac113c8799840b13\",\"lessThan\":\"8f406205003f741225f620f0e357ca0de71d45e3\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"376e242429bf8539ef39a080ac113c8799840b13\",\"lessThan\":\"630ed8734a02b992e8a97538179c2ece42c5210f\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"376e242429bf8539ef39a080ac113c8799840b13\",\"lessThan\":\"518d9b5568bb06f86e4434f7a30faa9612ea91ad\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"376e242429bf8539ef39a080ac113c8799840b13\",\"lessThan\":\"5da247e4d1e8661d4d6f997101d59967e8994e32\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"376e242429bf8539ef39a080ac113c8799840b13\",\"lessThan\":\"6e62cf983a2bd547e6bbd3f935539233e5f97f8f\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"376e242429bf8539ef39a080ac113c8799840b13\",\"lessThan\":\"0c4256196b3a105307e2235fbfd85e768bbcdd0f\",\"versionType\":\"git\",\"status\":\"affected\"}]},{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"affected\",\"programFiles\":[\"include/linux/kprobes.h\",\"kernel/kprobes.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"3.16\",\"status\":\"affected\"},{\"version\":\"0\",\"lessThan\":\"3.16\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.1.188\",\"lessThanOrEqual\":\"6.1.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.6.157\",\"lessThanOrEqual\":\"6.6.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.12.110\",\"lessThanOrEqual\":\"6.12.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.18.51\",\"lessThanOrEqual\":\"6.18.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"7.2.5\",\"lessThanOrEqual\":\"7.2.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"7.3-rc2\",\"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/0c4256196b3a105307e2235fbfd85e768bbcdd0f\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/518d9b5568bb06f86e4434f7a30faa9612ea91ad\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/5da247e4d1e8661d4d6f997101d59967e8994e32\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/630ed8734a02b992e8a97538179c2ece42c5210f\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/6e62cf983a2bd547e6bbd3f935539233e5f97f8f\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/8f406205003f741225f620f0e357ca0de71d45e3\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}"
  }
}



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…