{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2025-37938", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2025-04-16T04:51:23.971Z", "datePublished": "2025-05-20T15:34:40.509Z", "dateUpdated": "2026-08-05T11:58:30.579Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T11:58:30.579Z" }, "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": { "version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H", "baseScore": 7.1, "baseSeverity": "HIGH" }, "scenarios": [ { "lang": "en", "value": "AV:L - The verifier and the resulting unsafe dereference are exercised entirely through tracefs — 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's 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's `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 — 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's 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\" — 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." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "kernel/trace/trace_events.c", "samples/trace_events/trace-events-sample.h" ], "versions": [ { "version": "5013f454a352cce8e62162976026a9c472595e42", "lessThan": "6854c87ac823181c810f8c07489ba543260c0023", "status": "affected", "versionType": "git" }, { "version": "5013f454a352cce8e62162976026a9c472595e42", "lessThan": "4d11fac941d83509be4e6a21038281d6d96da50c", "status": "affected", "versionType": "git" }, { "version": "5013f454a352cce8e62162976026a9c472595e42", "lessThan": "03127354027508d076073b020d3070990fd6a958", "status": "affected", "versionType": "git" }, { "version": "5013f454a352cce8e62162976026a9c472595e42", "lessThan": "04b80d45ecfaf780981d6582899e3ab205e4aa08", "status": "affected", "versionType": "git" }, { "version": "5013f454a352cce8e62162976026a9c472595e42", "lessThan": "c7204fd1758c0caf1938e8a59809a1fdf28a8114", "status": "affected", "versionType": "git" }, { "version": "5013f454a352cce8e62162976026a9c472595e42", "lessThan": "ea8d7647f9ddf1f81e2027ed305299797299aa03", "status": "affected", "versionType": "git" } ] }, { "product": "Linux", "vendor": "Linux", "defaultStatus": "affected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "kernel/trace/trace_events.c", "samples/trace_events/trace-events-sample.h" ], "versions": [ { "version": "5.13", "status": "affected" }, { "version": "0", "lessThan": "5.13", "status": "unaffected", "versionType": "semver" }, { "version": "6.1.136", "lessThanOrEqual": "6.1.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.6.89", "lessThanOrEqual": "6.6.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.12.26", "lessThanOrEqual": "6.12.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.13.11", "lessThanOrEqual": "6.13.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.14.2", "lessThanOrEqual": "6.14.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.15", "lessThanOrEqual": "*", "status": "unaffected", "versionType": "original_commit_for_fix" } ] } ], "cpeApplicability": [ { "nodes": [ { "operator": "OR", "negate": false, "cpeMatch": [ { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.13", "versionEndExcluding": "6.1.136" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.13", "versionEndExcluding": "6.6.89" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.13", "versionEndExcluding": "6.12.26" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.13", "versionEndExcluding": "6.13.11" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.13", "versionEndExcluding": "6.14.2" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.13", "versionEndExcluding": "6.15" } ] } ] } ], "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" } }, "adp": [ { "title": "CVE Program Container", "references": [ { "url": "https://lists.debian.org/debian-lts-announce/2025/05/msg00045.html" } ], "providerMetadata": { "orgId": "af854a3a-2127-422b-91ae-364da2661108", "shortName": "CVE", "dateUpdated": "2025-11-03T19:57:34.583Z" } } ] } }