CVE-2026-46223

MEDIUMCVSS · not yet scored5.5
EchelonGraph scoreLOW confidence

Score 5.5 from GitHub Security Advisory published 2026-05-28.

Triggered by: GitHub Security Advisory CVSS
Sources: epss, ghsa
5.5EG
EchelonGraph verdictMonitorLow exploitation likelihood right now — keep watching.
  • Lower severity and no public exploit yet
CISA-KEV: Not listedEPSS PROB: 0%CVSS v2: Exploit: None knownExposed: 0

A fix is available — apply it.

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

cgroup: Defer css percpu_ref kill on rmdir until cgroup is depopulated

A chain of commits going back to v7.0 reworked rmdir to satisfy the controller invariant that a subsystem's ->css_offline() must not run while tasks are still doing kernel-side work in the cgroup.

[1] d245698d727a ("cgroup: Defer task cgroup unlink until after the task is done switching out") [2] a72f73c4dd9b ("cgroup: Don't expose dead tasks in cgroup") [3] 1b164b876c36 ("cgroup: Wait for dying tasks to leave on rmdir") [4] 4c56a8ac6869 ("cgroup: Fix cgroup_drain_dying() testing the wrong condition") [5] 13e786b64bd3 ("cgroup: Increment nr_dying_subsys_* from rmdir context")

[1] moved task cset unlink from do_exit() to finish_task_switch() so a task's cset link drops only after the task has fully stopped scheduling. That made tasks past exit_signals() linger on cset->tasks until their final context switch, which led to a series of problems as what userspace expected to see after rmdir diverged from what the kernel needs to wait for. [2]-[5] tried to bridge that divergence: [2] filtered the exiting tasks from cgroup.procs; [3] had rmdir(2) sleep in TASK_UNINTERRUPTIBLE for them; [4] fixed the wait's condition; [5] made nr_dying_subsys_* visible synchronously.

The cgroup_drain_dying() wait in [3] turned out to be a dead end. When the rmdir caller is also the reaper of a zombie that pins a pidns teardown (e.g. host PID 1 systemd reaping orphan pids that were re-parented to it during the same teardown), rmdir blocks in TASK_UNINTERRUPTIBLE waiting for those pids to free, the pids can't free because PID 1 is the reaper and it's stuck in rmdir, and the system A-A deadlocks. No internal lock ordering breaks this; the wait itself is the bug.

The css killing side that drove the original reorder, however, can be made cleanly asynchronous: ->css_offline() is already async, run from css_killed_work_fn() driven by percpu_ref_kill_and_confirm(). The fix is to make that chain start only after all tasks have left the cgroup. rmdir's user-visible side then returns as soon as cgroup.procs and friends are empty, while ->css_offline() still runs only after the cgroup is fully drained.

Verified by the original reproducer (pidns teardown + zombie reaper, runs under vng) which hangs vanilla and succeeds here, and by per-commit deterministic repros for [2], [3], [4], [5] with a boot parameter that widens the post-exit_signals() window so each state is reliably reachable. Some stress tests on top of that.

cgroup_apply_control_disable() has the same shape of pre-existing race: when a controller is disabled via subtree_control, kill_css() ran synchronously while tasks past exit_signals() could still be linked to the cgroup's csets, and ->css_offline() could fire before they drained. This patch preserves the existing synchronous behavior at that call site (kill_css_sync() + kill_css_finish() back-to-back) and a follow-up patch will defer kill_css_finish() there using a per-css trigger.

This seems like the right approach and I don't see problems with it. The changes are somewhat invasive but not excessively so, so backporting to -stable should be okay. If something does turn out to be wrong, the fallback is to revert the entire chain ([1]-[5]) and rework in the development branch instead.

v2: Pin cgrp across the deferred destroy work with explicit cgroup_get()/cgroup_put() around queue_work() and the work_fn. v1 wasn't actually broken (ordered cgroup_offline_wq + queue_work order in cgroup_task_dead() saved it) but the explicit ref removes the dependency on those non-obvious invariants. Also note the pre-existing cgroup_apply_control_disable() race in the description; a follow-up will defer kill_css_finish() there.

CVSS v3
EG Score
5.5(low)
EG Risk
29(Track)
EG Risk 29/100SSVC: Track

EG Risk is EchelonGraph's 0–100 priority score: it fuses intrinsic severity with real-world exploitation and automatability so you can rank equal-severity CVEs and fix the most dangerous first. Higher = act sooner. Distinct from the 0–10 EG Score (severity).

How it’s computed
Severity55% × 45%
Exploitation0% × 40%
Automatability30% × 15%
Action: Routine — remediate on your standard cadence.
EPSS PROB
0%
EPSS %ILE
0%
KEV
Not listed

Published

May 28, 2026

Last Modified

June 14, 2026

Vendor Advisories for CVE-2026-46223(1)

These vendors published their own advisory mentioning this CVE — often with vendor-specific remediation steps + affected product lists not in NVD.

Patch Availability(8)

Patches are aggregated from vendor advisories (Red Hat, Microsoft, Cisco, GitHub) and package ecosystems (OSV, GHSA). Multiple rows for the same upstream release have been deduplicated.

Affected Packages

(1 across 1 ecosystem)
Debian:14(1)
PackageVulnerable rangeFixed inDependents
linux6.12.100-1 ... 7.0.9-1~bpo13+1 (135 versions)7.0.9-1

Weakness Classification(1)

MITRE Common Weakness Enumeration — the root-cause categories this CVE belongs to.

All Vendor Advisories

(8)

Data Freshness Timeline

(refreshed 3× in last 7d / 53× in last 30d)

Each row is a source pipeline that fetched or updated this CVE on that date, with what changed. For example, "NVD update" means NVD published or revised its analysis for this CVE; "MITRE cvelistV5" means we ingested or refreshed it from the CNA feed. Most recent first.

Showing the most recent 100 of 165 total refreshes for this CVE.

  1. 2026-09-04 05:06 UTCEPSS rescore
  2. 2026-09-01 13:54 UTCEPSS rescore
  3. 2026-08-30 19:17 UTCEPSS rescore
  4. 2026-08-28 21:41 UTCEPSS rescore
  5. 2026-08-27 14:25 UTCEPSS rescore
  6. 2026-08-25 13:49 UTCEPSS rescore
  7. 2026-08-25 04:46 UTCEG score recompute
  8. 2026-08-25 04:46 UTCVendor advisory
  9. 2026-08-25 04:46 UTCGHSA enrichment
  10. 2026-08-23 14:32 UTCEG score recompute
  11. 2026-08-23 14:32 UTCVendor advisory
  12. 2026-08-23 14:32 UTCGHSA enrichment
  13. 2026-08-23 00:19 UTCEPSS rescore
  14. 2026-08-21 15:28 UTCEG score recompute
  15. 2026-08-21 15:28 UTCVendor advisory
  16. 2026-08-21 15:27 UTCGHSA enrichment
  17. 2026-08-20 22:55 UTCEPSS rescore
  18. 2026-08-20 10:48 UTCEG score recompute
  19. 2026-08-20 10:48 UTCVendor advisory
  20. 2026-08-20 10:48 UTCGHSA enrichment
  21. 2026-08-19 17:04 UTCEPSS rescore
  22. 2026-08-17 13:47 UTCEPSS rescore
  23. 2026-08-17 08:29 UTCEG score recompute
  24. 2026-08-17 08:29 UTCVendor advisory
  25. 2026-08-17 08:29 UTCGHSA enrichment
Show 75 more
  1. 2026-08-16 14:56 UTCEPSS rescore
  2. 2026-08-16 02:35 UTCVendor advisory
  3. 2026-08-16 02:35 UTCGHSA enrichment
  4. 2026-08-15 03:33 UTCVendor advisory
  5. 2026-08-15 03:33 UTCGHSA enrichment
  6. 2026-08-14 05:47 UTCVendor advisory
  7. 2026-08-14 05:47 UTCGHSA enrichment
  8. 2026-08-13 08:02 UTCVendor advisory
  9. 2026-08-13 08:02 UTCGHSA enrichment
  10. 2026-08-12 09:52 UTCEG score recompute
  11. 2026-08-12 09:52 UTCVendor advisory
  12. 2026-08-12 09:52 UTCGHSA enrichment
  13. 2026-08-11 12:06 UTCEG score recompute
  14. 2026-08-11 12:06 UTCVendor advisory
  15. 2026-08-11 12:06 UTCGHSA enrichment
  16. 2026-08-11 00:00 UTCEPSS rescore
  17. 2026-08-10 14:02 UTCVendor advisory
  18. 2026-08-10 14:02 UTCGHSA enrichment
  19. 2026-08-09 16:16 UTCVendor advisory
  20. 2026-08-09 16:16 UTCGHSA enrichment
  21. 2026-08-08 18:31 UTCEG score recompute
  22. 2026-08-08 18:31 UTCVendor advisory
  23. 2026-08-08 18:31 UTCGHSA enrichment
  24. 2026-08-08 16:37 UTCEPSS rescore
  25. 2026-08-07 17:06 UTCVendor advisory
  26. 2026-08-07 17:06 UTCGHSA enrichment
  27. 2026-08-06 19:20 UTCVendor advisory
  28. 2026-08-06 19:20 UTCGHSA enrichment
  29. 2026-08-05 21:35 UTCEG score recompute
  30. 2026-08-05 21:35 UTCVendor advisory
  31. 2026-08-05 21:35 UTCGHSA enrichment
  32. 2026-08-05 19:17 UTCEPSS rescore
  33. 2026-08-04 23:50 UTCEG score recompute
  34. 2026-08-04 23:50 UTCVendor advisory
  35. 2026-08-04 23:50 UTCGHSA enrichment
  36. 2026-08-04 15:10 UTCEPSS rescore
  37. 2026-08-04 10:39 UTCEPSS rescore
  38. 2026-08-03 16:12 UTCVendor advisory
  39. 2026-08-03 16:12 UTCGHSA enrichment
  40. 2026-08-02 12:27 UTCVendor advisory
  41. 2026-08-02 12:27 UTCGHSA enrichment
  42. 2026-08-01 14:40 UTCEG score recompute
  43. 2026-08-01 14:40 UTCVendor advisory
  44. 2026-08-01 14:40 UTCGHSA enrichment
  45. 2026-08-01 04:16 UTCEPSS rescore
  46. 2026-07-31 06:21 UTCEG score recompute
  47. 2026-07-31 06:21 UTCGHSA enrichment
  48. 2026-07-30 16:28 UTCEPSS rescore
  49. 2026-07-29 14:25 UTCEG score recompute
  50. 2026-07-29 14:25 UTCGHSA enrichment
  51. 2026-07-28 15:36 UTCEPSS rescore
  52. 2026-07-27 14:13 UTCEPSS rescore
  53. 2026-07-27 09:43 UTCEG score recompute
  54. 2026-07-27 09:43 UTCGHSA enrichment
  55. 2026-07-26 14:54 UTCEPSS rescore
  56. 2026-07-26 14:54 UTCEPSS rescore
  57. 2026-07-24 14:17 UTCEPSS rescore
  58. 2026-07-23 14:18 UTCEPSS rescore
  59. 2026-07-23 03:17 UTCEG score recompute
  60. 2026-07-22 14:08 UTCEPSS rescore
  61. 2026-07-20 17:08 UTCEPSS rescore
  62. 2026-07-19 14:31 UTCEPSS rescore
  63. 2026-07-19 02:29 UTCEPSS rescore
  64. 2026-07-16 17:03 UTCEPSS rescore
  65. 2026-07-16 10:18 UTCGHSA enrichment
  66. 2026-07-15 16:57 UTCEPSS rescore
  67. 2026-07-13 22:30 UTCEPSS rescore
  68. 2026-07-13 06:13 UTCEPSS rescore
  69. 2026-07-12 05:46 UTCEPSS rescore
  70. 2026-07-11 20:46 UTCGHSA enrichment
  71. 2026-07-11 08:27 UTCEPSS rescore
  72. 2026-07-09 19:10 UTCEPSS rescore
  73. 2026-07-08 18:17 UTCGHSA enrichment
  74. 2026-07-08 15:16 UTCEPSS rescore
  75. 2026-07-07 13:46 UTCEPSS rescore

Frequently asked(4)

What is CVE-2026-46223?
CVE-2026-46223 is a medium vulnerability published on May 28, 2026. In the Linux kernel, the following vulnerability has been resolved: cgroup: Defer css percpu_ref kill on rmdir until cgroup is depopulated A chain of commits going back to v7.0 reworked rmdir to satisfy the controller invariant that a subsystem's ->css_offline() must not run while tasks are still…
When was CVE-2026-46223 disclosed?
CVE-2026-46223 was first published in the National Vulnerability Database on May 28, 2026, with the most recent update on June 14, 2026. EchelonGraph re-ingests CVE updates from NVD on a 2-hour cycle, so this page reflects the latest published state.
Is CVE-2026-46223 actively exploited?
CVE-2026-46223 is not currently on CISA's Known Exploited Vulnerabilities catalog. FIRST EPSS estimates a 0% probability of exploitation in the next 30 days, which ranks it in the top 99.7% of all scored CVEs.
How do I remediate CVE-2026-46223?
Patch to the fixed version published by the affected vendor. Where vendor advisories exist for CVE-2026-46223, EchelonGraph cross-links them in the Vendor Advisories panel below — those typically contain the canonical remediation steps, fixed version numbers, and any vendor-specific mitigations.

Dependency Blast Radius

See which npm, PyPI, Go, and Maven packages are affected by CVE-2026-46223

Explore →

Is Your Infrastructure Affected by CVE-2026-46223?

EchelonGraph automatically scans your cloud infrastructure and maps CVE exposure using blast radius analysis.