CVE-2025-37878

perf/core: Fix WARN_ON(!ctx) in __free_event() for partial init

State
Published
Severity
Not scored
Published
May 9, 2025
Updated
May 23, 2026
Reserved
Apr 16, 2025

Read the record on cve.org

Description

In the Linux kernel, the following vulnerability has been resolved:

perf/core: Fix WARN_ON(!ctx) in __free_event() for partial init

Move the get_ctx(child_ctx) call and the child_event->ctx assignment to occur immediately after the child event is allocated. Ensure that child_event->ctx is non-NULL before any subsequent error path within inherit_event calls free_event(), satisfying the assumptions of the cleanup code.

Details:

There's no clear Fixes tag, because this bug is a side-effect of multiple interacting commits over time (up to 15 years old), not a single regression.

The code initially incremented refcount then assigned context immediately after the child_event was created. Later, an early validity check for child_event was added before the refcount/assignment. Even later, a WARN_ON_ONCE() cleanup check was added, assuming event->ctx is valid if the pmu_ctx is valid. The problem is that the WARN_ON_ONCE() could trigger after the initial check passed but before child_event->ctx was assigned, violating its precondition. The solution is to assign child_event->ctx right after its initial validation. This ensures the context exists for any subsequent checks or cleanup routines, resolving the WARN_ON_ONCE().

To resolve it, defer the refcount update and child_event->ctx assignment directly after child_event->pmu_ctx is set but before checking if the parent event is orphaned. The cleanup routine depends on event->pmu_ctx being non-NULL before it verifies event->ctx is non-NULL. This also maintains the author's original intent of passing in child_ctx to find_get_pmu_context before its refcount/assignment.

[ mingo: Expanded the changelog from another email by Gabriel Shahrouzi. ]

Scores

The record has no CVSS score.

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • 7ef5aa081f989ecfecc1df02068a80aebbd3ec31 to before 90dc6c1e3b200812da8d0aa030e1b7fda8226d0eAffected
  • 1209b0b29fd472e7dbd2b06544b019dd9f9b7e51 to before cb56cd11feabf99e08bc18960700a53322ffcea7Affected
  • c70ca298036c58a88686ff388d3d367e9d21acf0 to before 0ba3a4ab76fd3367b9cb680cad70182c896c795cAffected
  • 315a50c6b1c6ce191f19f3372935d8e2ed9b53a6Affected
  • 6.13.12 to before 6.14Affected
LinuxLinux
  • 6.12.24 to before 6.12.26Affected
  • 6.14.3 to before 6.14.5Affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.