CVE-2025-37938 (GCVE-0-2025-37938)
Vulnerability from cvelistv5
Published
2025-05-20 15:34
Modified
2026-08-05 11:58
Summary
In the Linux kernel, the following vulnerability has been resolved: tracing: Verify event formats that have "%*p.." The trace event verifier checks the formats of trace events to make sure that they do not point at memory that is not in the trace event itself or in data that will never be freed. If an event references data that was allocated when the event triggered and that same data is freed before the event is read, then the kernel can crash by reading freed memory. The verifier runs at boot up (or module load) and scans the print formats of the events and checks their arguments to make sure that dereferenced pointers are safe. If the format uses "%*p.." the verifier will ignore it, and that could be dangerous. Cover this case as well. Also add to the sample code a use case of "%*pbl".
Impacted products
Vendor Product Version
Linux Linux Version: 5013f454a352cce8e62162976026a9c472595e42
Version: 5013f454a352cce8e62162976026a9c472595e42
Version: 5013f454a352cce8e62162976026a9c472595e42
Version: 5013f454a352cce8e62162976026a9c472595e42
Version: 5013f454a352cce8e62162976026a9c472595e42
Version: 5013f454a352cce8e62162976026a9c472595e42
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "adp": [
      {
        "providerMetadata": {
          "dateUpdated": "2025-11-03T19:57:34.583Z",
          "orgId": "af854a3a-2127-422b-91ae-364da2661108",
          "shortName": "CVE"
        },
        "references": [
          {
            "url": "https://lists.debian.org/debian-lts-announce/2025/05/msg00045.html"
          }
        ],
        "title": "CVE Program Container"
      }
    ],
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "kernel/trace/trace_events.c",
            "samples/trace_events/trace-events-sample.h"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "6854c87ac823181c810f8c07489ba543260c0023",
              "status": "affected",
              "version": "5013f454a352cce8e62162976026a9c472595e42",
              "versionType": "git"
            },
            {
              "lessThan": "4d11fac941d83509be4e6a21038281d6d96da50c",
              "status": "affected",
              "version": "5013f454a352cce8e62162976026a9c472595e42",
              "versionType": "git"
            },
            {
              "lessThan": "03127354027508d076073b020d3070990fd6a958",
              "status": "affected",
              "version": "5013f454a352cce8e62162976026a9c472595e42",
              "versionType": "git"
            },
            {
              "lessThan": "04b80d45ecfaf780981d6582899e3ab205e4aa08",
              "status": "affected",
              "version": "5013f454a352cce8e62162976026a9c472595e42",
              "versionType": "git"
            },
            {
              "lessThan": "c7204fd1758c0caf1938e8a59809a1fdf28a8114",
              "status": "affected",
              "version": "5013f454a352cce8e62162976026a9c472595e42",
              "versionType": "git"
            },
            {
              "lessThan": "ea8d7647f9ddf1f81e2027ed305299797299aa03",
              "status": "affected",
              "version": "5013f454a352cce8e62162976026a9c472595e42",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "kernel/trace/trace_events.c",
            "samples/trace_events/trace-events-sample.h"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "5.13"
            },
            {
              "lessThan": "5.13",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.1.*",
              "status": "unaffected",
              "version": "6.1.136",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.89",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.26",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.13.*",
              "status": "unaffected",
              "version": "6.13.11",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.14.*",
              "status": "unaffected",
              "version": "6.14.2",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "6.15",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.1.136",
                  "versionStartIncluding": "5.13",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.89",
                  "versionStartIncluding": "5.13",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.26",
                  "versionStartIncluding": "5.13",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.13.11",
                  "versionStartIncluding": "5.13",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.14.2",
                  "versionStartIncluding": "5.13",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.15",
                  "versionStartIncluding": "5.13",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ntracing: Verify event formats that have \"%*p..\"\n\nThe trace event verifier checks the formats of trace events to make sure\nthat they do not point at memory that is not in the trace event itself or\nin data that will never be freed. If an event references data that was\nallocated when the event triggered and that same data is freed before the\nevent is read, then the kernel can crash by reading freed memory.\n\nThe verifier runs at boot up (or module load) and scans the print formats\nof the events and checks their arguments to make sure that dereferenced\npointers are safe. If the format uses \"%*p..\" the verifier will ignore it,\nand that could be dangerous. Cover this case as well.\n\nAlso add to the sample code a use case of \"%*pbl\"."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 7.1,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - The verifier and the resulting unsafe dereference are exercised entirely through tracefs \u2014 enabling an event under /sys/kernel/tracing/events and reading trace/trace_pipe. There is no network-reachable path; print formats come from compiled-in kernel/module code.\nAC:L - No race or unpredictable state is involved: the parser mis-handles `%*p..` deterministically on every boot/module load, and an attacker simply enables the affected event, triggers it, and reads the trace buffer. Freeing the referenced allocation before the read is under the attacker\u0027s control via ordinary workload timing.\nPR:L - Reading and configuring tracefs is required; although the mount defaults to 0700, tracefs explicitly supports `uid=`/`gid=` delegation and real deployments (Android\u0027s `shell` user for atrace, `gid=tracing` mounts for unprivileged profiling/observability daemons) grant this to non-root accounts. Choosing the higher-severity option, an unprivileged local account with tracing group membership suffices.\nUI:N - The attacker performs every step themselves \u2014 enabling the trace event, causing it to fire, and reading the trace file. No victim action or separate user session is needed.\nS:U - The missed verification and the resulting bad dereference occur in the kernel\u0027s own trace output path, within a single security authority. No VM, IOMMU, or sandbox boundary is crossed.\nC:H - When the verifier fails to flag an unsafe `%*p`/`%s` argument, the trace output path dereferences a stale pointer and formats already-freed kernel memory (arbitrary reclaimed slab contents, potentially keys or credentials) into the trace buffer the attacker reads. This is an unbounded use-after-free read, which per kernel scoring guidance is High.\nI:N - The failure mode is a read-only dereference performed by `trace_seq_printf()` while formatting the event; nothing is written to the freed object and no control-flow or data-modification primitive arises from the missing verification.\nA:H - As stated in the fix, \"the kernel can crash by reading freed memory\" \u2014 dereferencing a pointer to unmapped or poisoned memory during trace output oopses the kernel, and the mis-aligned argument index also drives spurious `WARN_ON_ONCE`/`WARN_ONCE` splats. Any kernel oops or panic is High."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-05T11:58:30.579Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/6854c87ac823181c810f8c07489ba543260c0023"
        },
        {
          "url": "https://git.kernel.org/stable/c/4d11fac941d83509be4e6a21038281d6d96da50c"
        },
        {
          "url": "https://git.kernel.org/stable/c/03127354027508d076073b020d3070990fd6a958"
        },
        {
          "url": "https://git.kernel.org/stable/c/04b80d45ecfaf780981d6582899e3ab205e4aa08"
        },
        {
          "url": "https://git.kernel.org/stable/c/c7204fd1758c0caf1938e8a59809a1fdf28a8114"
        },
        {
          "url": "https://git.kernel.org/stable/c/ea8d7647f9ddf1f81e2027ed305299797299aa03"
        }
      ],
      "title": "tracing: Verify event formats that have \"%*p..\"",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2025-37938",
    "datePublished": "2025-05-20T15:34:40.509Z",
    "dateReserved": "2025-04-16T04:51:23.971Z",
    "dateUpdated": "2026-08-05T11:58:30.579Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2"
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Sightings

Author Source Type Date

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
  • Confirmed: The vulnerability is confirmed from an analyst perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
  • Patched: This vulnerability was successfully patched by the user reporting the sighting.
  • Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
  • Not confirmed: The user expresses doubt about the veracity of the vulnerability.
  • Not patched: This vulnerability was not successfully patched by the user reporting the sighting.


Loading…

Loading…