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

GHSA-C3QX-9JFJ-8C4P

Vulnerability from github – Published: 2026-08-15 06:32 – Updated: 2026-08-17 06:33
VLAI
Details

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

tracing/user_events: Fix use-after-free in user_event_mm_dup()

user_event_mm_dup() walks the parent mm's enabler list locklessly under rcu_read_lock() during fork() (from copy_process()); it does not take event_mutex:

rcu_read_lock();
list_for_each_entry_rcu(enabler, &old_mm->enablers, mm_enablers_link)
    enabler->event = user_event_get(orig->event);

user_event_enabler_destroy() removes an enabler from that list with list_del_rcu() and then, without waiting for a grace period, drops the enabler's user_event reference with user_event_put() and frees the enabler with kfree(). A reader that loaded the enabler before the list_del_rcu() can still be walking it, which leads to two use-after-frees:

  • kfree(enabler) frees the enabler while that reader dereferences enabler->event.

  • user_event_put() may drop the last reference to the user_event, which is then freed (via delayed_destroy_user_event() on a work queue), while the same reader does user_event_get(orig->event) on it.

Both are reachable by an unprivileged task that can open user_events_data: one multithreaded process that registers an enabler and then concurrently unregisters it and calls fork() triggers the race. KASAN reports a slab-use-after-free in user_event_mm_dup() during clone(), with a "refcount_t: addition on 0" warning when the user_event is freed.

The enabler use-after-free was found first; the user_event one was reported by XIAO WU, and the earlier enabler-only fix did not address it.

Defer both the user_event_put() and the kfree(enabler) to a work item queued with queue_rcu_work(), so they run only after an RCU grace period, once all readers walking the enabler list have finished. The put must run in process context because user_event_put() takes event_mutex on the last reference, so a work queue is used rather than call_rcu(). The now-unlocked put lets the locked argument of user_event_enabler_destroy() be removed; all callers are updated.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2026-72071"
  ],
  "database_specific": {
    "cwe_ids": [],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2026-08-15T06:21:16Z",
    "severity": "HIGH"
  },
  "details": "In the Linux kernel, the following vulnerability has been resolved:\n\ntracing/user_events: Fix use-after-free in user_event_mm_dup()\n\nuser_event_mm_dup() walks the parent mm\u0027s enabler list locklessly under\nrcu_read_lock() during fork() (from copy_process()); it does not take\nevent_mutex:\n\n\trcu_read_lock();\n\tlist_for_each_entry_rcu(enabler, \u0026old_mm-\u003eenablers, mm_enablers_link)\n\t\tenabler-\u003eevent = user_event_get(orig-\u003eevent);\n\nuser_event_enabler_destroy() removes an enabler from that list with\nlist_del_rcu() and then, without waiting for a grace period, drops the\nenabler\u0027s user_event reference with user_event_put() and frees the enabler\nwith kfree(). A reader that loaded the enabler before the list_del_rcu()\ncan still be walking it, which leads to two use-after-frees:\n\n - kfree(enabler) frees the enabler while that reader dereferences\n   enabler-\u003eevent.\n\n - user_event_put() may drop the last reference to the user_event, which\n   is then freed (via delayed_destroy_user_event() on a work queue), while\n   the same reader does user_event_get(orig-\u003eevent) on it.\n\nBoth are reachable by an unprivileged task that can open user_events_data:\none multithreaded process that registers an enabler and then concurrently\nunregisters it and calls fork() triggers the race. KASAN reports a\nslab-use-after-free in user_event_mm_dup() during clone(), with a\n\"refcount_t: addition on 0\" warning when the user_event is freed.\n\nThe enabler use-after-free was found first; the user_event one was reported\nby XIAO WU, and the earlier enabler-only fix did not address it.\n\nDefer both the user_event_put() and the kfree(enabler) to a work item\nqueued with queue_rcu_work(), so they run only after an RCU grace period,\nonce all readers walking the enabler list have finished. The put must run\nin process context because user_event_put() takes event_mutex on the last\nreference, so a work queue is used rather than call_rcu(). The now-unlocked\nput lets the locked argument of user_event_enabler_destroy() be removed;\nall callers are updated.",
  "id": "GHSA-c3qx-9jfj-8c4p",
  "modified": "2026-08-17T06:33:07Z",
  "published": "2026-08-15T06:32:11Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-72071"
    },
    {
      "type": "WEB",
      "url": "https://git.kernel.org/stable/c/05b24f68f78ff3a1ef7f015f7327b35886b741f6"
    },
    {
      "type": "WEB",
      "url": "https://git.kernel.org/stable/c/25acb6711da6fa0382744fa92bd6d42a22c1ae68"
    },
    {
      "type": "WEB",
      "url": "https://git.kernel.org/stable/c/50fd6dd755c6e48a38af2fa4621167eea56829c2"
    },
    {
      "type": "WEB",
      "url": "https://git.kernel.org/stable/c/95400e7039cdfeb0b53652d521d766f1698cae95"
    },
    {
      "type": "WEB",
      "url": "https://git.kernel.org/stable/c/b33ac2d39953efb12f598c0dae242c5f644ea669"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
      "type": "CVSS_V3"
    }
  ]
}



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…

Loading…