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

CVE-2026-90013 (GCVE-0-2026-90013)

Vulnerability from cvelistv5 – Published: 2026-09-16 10:33 – Updated: 2026-09-16 14:41
VLAI
Title
tracing: Take trace_array reference when opening options file
Summary
In the Linux kernel, the following vulnerability has been resolved: tracing: Take trace_array reference when opening options file The options files do not take the trace_array reference for the options they represent. This could cause a use-after-free kernel crash if one of these files is opened by one task and another task removes the instance that the option is for. Because it doesn't take a reference upon opening, it will not stop the removal which will free the options descriptor that is being used. As the options are somewhat dynamic in their creation at boot up, each file represents a flag in the trace_array. The trace_array has an array of indexes to represent each of these flags that is stored in the trace_flags_index array. The address of the index array element is used to pass to the inode->i_private pointer. Then that element is read which holds the index (which represents the flag) and then the index is used to calculate the trace_array descriptor from its trace_flags_index array. One issue is that the index element can not be referenced until the trace_array's reference is taken. To handle this, create a new helper function called: trace_array_options_get() that will iterate all the existing trace_arrays in the ftrace_trace_arrays list (under the trace_types_lock), and compare the passed in address of the index element with the entire array of the trace_array's trace_flags_index array. If it matches, then up the corresponding trace_array's reference and return.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: 577b785f55168d5acb3d123ba41bfe8d7981e044 , < d0f37d77b9b4b241e0b30ef2562f6353cbda3bec (git)
Affected: 577b785f55168d5acb3d123ba41bfe8d7981e044 , < 64a41f4a9a968f54f3792399aa4d2a9fdb23b0a5 (git)
Affected: 577b785f55168d5acb3d123ba41bfe8d7981e044 , < f2951ebd15c36a1ea4820a7f0cbb0b5f1c028b73 (git)
guessed Create a notification for this product.
Linux Linux Affected: 2.6.30
Unaffected: 0 , < 2.6.30 (semver)
Unaffected: 6.18.52 , ≤ 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": [
            "kernel/trace/trace.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "d0f37d77b9b4b241e0b30ef2562f6353cbda3bec",
              "status": "affected",
              "version": "577b785f55168d5acb3d123ba41bfe8d7981e044",
              "versionType": "git"
            },
            {
              "lessThan": "64a41f4a9a968f54f3792399aa4d2a9fdb23b0a5",
              "status": "affected",
              "version": "577b785f55168d5acb3d123ba41bfe8d7981e044",
              "versionType": "git"
            },
            {
              "lessThan": "f2951ebd15c36a1ea4820a7f0cbb0b5f1c028b73",
              "status": "affected",
              "version": "577b785f55168d5acb3d123ba41bfe8d7981e044",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "kernel/trace/trace.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "2.6.30"
            },
            {
              "lessThan": "2.6.30",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.52",
              "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.18.52",
                  "versionStartIncluding": "2.6.30",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.5",
                  "versionStartIncluding": "2.6.30",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3-rc2",
                  "versionStartIncluding": "2.6.30",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ntracing: Take trace_array reference when opening options file\n\nThe options files do not take the trace_array reference for the options\nthey represent. This could cause a use-after-free kernel crash if one of\nthese files is opened by one task and another task removes the instance\nthat the option is for. Because it doesn\u0027t take a reference upon opening,\nit will not stop the removal which will free the options descriptor that\nis being used.\n\nAs the options are somewhat dynamic in their creation at boot up, each\nfile represents a flag in the trace_array. The trace_array has an array of\nindexes to represent each of these flags that is stored in the\ntrace_flags_index array. The address of the index array element is used to\npass to the inode-\u003ei_private pointer. Then that element is read which\nholds the index (which represents the flag) and then the index is used to\ncalculate the trace_array descriptor from its trace_flags_index array.\n\nOne issue is that the index element can not be referenced until the\ntrace_array\u0027s reference is taken. To handle this, create a new helper\nfunction called: trace_array_options_get() that will iterate all the\nexisting trace_arrays in the ftrace_trace_arrays list (under the\ntrace_types_lock), and compare the passed in address of the index element\nwith the entire array of the trace_array\u0027s trace_flags_index array.\nIf it matches, then up the corresponding trace_array\u0027s reference and\nreturn."
        }
      ],
      "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 tracefs: open() of an instance options file (tracing_open_generic -\u003e trace_options_core_read/write) then rmdir of that instance (__remove_instance). No network, adjacent-radio, or physical-device path reaches get_tr_index() or the freed trace_array.\nAC:L - The attacker fully controls both sides: open an instance options file (no trace_array ref), rmdir the instance so __remove_instance kfree()s the trace_array, then read/write the still-open fd. That sequence is deterministic and retryable; CONFIG_TRACING with instances is standard, not a rare config.\nPR:L - tracing_open_generic() and instance mkdir/rmdir enforce only LOCKDOWN_TRACEFS and DAC (options 0640, dirs 0750) with no capable() gate. Android/Perfetto, ChromeOS, and gid=/uid= tracing mounts routinely delegate this to unprivileged tracing accounts, matching CVE-2026-74606 and CVE-2026-89747.\nUI:N - The attacker mkdir()s their own tracing instance, opens options, rmdir()s the instance, and reads or writes the fd themselves. No victim mount, click, or cooperating process is required.\nS:U - The use-after-free corrupts a kernel trace_array in the tracing subsystem on the same host. It can yield local privilege escalation but does not cross a VM, IOMMU, or other security authority.\nC:H - After rmdir, get_tr_index() reads the freed trace_flags_index byte and reconstructs a trace_array, then trace_options_core_read() loads tr-\u003etrace_flags. Reclaiming that slab lets the attacker control the object and obtain an arbitrary kernel read, which kernel CNA guidance scores High for UAF.\nI:H - trace_options_core_write() calls set_tracer_flag() on the freed/reused trace_array, including tr-\u003ecurrent_trace-\u003eflag_changed and writes to tr-\u003etrace_flags and related tracing state. Heap spraying that object yields an arbitrary kernel write and control-flow hijack primitive.\nA:H - Dereferencing the kfree()d trace_array in get_tr_index()/trace_options_core_read() oopses or panics the kernel, which the fix describes as a use-after-free kernel crash. The attacker can retrigger that crash at will."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-09-16T14:41:31.248Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/d0f37d77b9b4b241e0b30ef2562f6353cbda3bec"
        },
        {
          "url": "https://git.kernel.org/stable/c/64a41f4a9a968f54f3792399aa4d2a9fdb23b0a5"
        },
        {
          "url": "https://git.kernel.org/stable/c/f2951ebd15c36a1ea4820a7f0cbb0b5f1c028b73"
        }
      ],
      "title": "tracing: Take trace_array reference when opening options file",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-90013",
    "datePublished": "2026-09-16T10:33:20.136Z",
    "dateReserved": "2026-09-11T19:38:34.781Z",
    "dateUpdated": "2026-09-16T14:41:31.248Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "nvd": "{\"cve\":{\"id\":\"CVE-2026-90013\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2026-09-16T11:17:13.997\",\"lastModified\":\"2026-09-16T15:18:24.990\",\"vulnStatus\":\"Received\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\ntracing: Take trace_array reference when opening options file\\n\\nThe options files do not take the trace_array reference for the options\\nthey represent. This could cause a use-after-free kernel crash if one of\\nthese files is opened by one task and another task removes the instance\\nthat the option is for. Because it doesn\u0027t take a reference upon opening,\\nit will not stop the removal which will free the options descriptor that\\nis being used.\\n\\nAs the options are somewhat dynamic in their creation at boot up, each\\nfile represents a flag in the trace_array. The trace_array has an array of\\nindexes to represent each of these flags that is stored in the\\ntrace_flags_index array. The address of the index array element is used to\\npass to the inode-\u003ei_private pointer. Then that element is read which\\nholds the index (which represents the flag) and then the index is used to\\ncalculate the trace_array descriptor from its trace_flags_index array.\\n\\nOne issue is that the index element can not be referenced until the\\ntrace_array\u0027s reference is taken. To handle this, create a new helper\\nfunction called: trace_array_options_get() that will iterate all the\\nexisting trace_arrays in the ftrace_trace_arrays list (under the\\ntrace_types_lock), and compare the passed in address of the index element\\nwith the entire array of the trace_array\u0027s trace_flags_index array.\\nIf it matches, then up the corresponding trace_array\u0027s reference and\\nreturn.\"}],\"affected\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"affectedData\":[{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"unaffected\",\"programFiles\":[\"kernel/trace/trace.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"577b785f55168d5acb3d123ba41bfe8d7981e044\",\"lessThan\":\"d0f37d77b9b4b241e0b30ef2562f6353cbda3bec\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"577b785f55168d5acb3d123ba41bfe8d7981e044\",\"lessThan\":\"64a41f4a9a968f54f3792399aa4d2a9fdb23b0a5\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"577b785f55168d5acb3d123ba41bfe8d7981e044\",\"lessThan\":\"f2951ebd15c36a1ea4820a7f0cbb0b5f1c028b73\",\"versionType\":\"git\",\"status\":\"affected\"}]},{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"affected\",\"programFiles\":[\"kernel/trace/trace.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"2.6.30\",\"status\":\"affected\"},{\"version\":\"0\",\"lessThan\":\"2.6.30\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.18.52\",\"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/64a41f4a9a968f54f3792399aa4d2a9fdb23b0a5\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/d0f37d77b9b4b241e0b30ef2562f6353cbda3bec\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/f2951ebd15c36a1ea4820a7f0cbb0b5f1c028b73\",\"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…