In the Linux kernel, the following vulnerability has been resolved: cgroup: split cgroupdestroywq into 3 workqueues A hung task can occur during [1] LTP cgroup testing when repeatedly mounting/unmounting perfevent and netprio controllers with systemd.unifiedcgrouphierarchy=1. The hang manifests in cgrouplockanddrainoffline() during root destruction. Related case: cgroupfjfunctionperfevent cgroupfjfunction.sh perfevent cgroupfjfunctionnetprio cgroupfjfunction.sh netprio Call Trace: cgrouplockanddrainoffline+0x14c/0x1e8 cgroupdestroyroot+0x3c/0x2c0 cssfreerworkfn+0x248/0x338 processonework+0x16c/0x3b8 workerthread+0x22c/0x3b0 kthread+0xec/0x100 retfromfork+0x10/0x20 Root Cause: CPU0 CPU1 mount perfevent umount netprio cgroup1gettree cgroupkillsb rebindsubsystems // root destruction enqueues // cgroupdestroywq // kill all perfevent css // one perfevent css A is dying // css A offline enqueues cgroupdestroywq // root destruction will be executed first cssfreerworkfn cgroupdestroyroot cgrouplockanddrainoffline // some perf descendants are dying // cgroupdestroywq maxactive = 1 // waiting for css A to die Problem scenario: 1. CPU0 mounts perfevent (rebindsubsystems) 2. CPU1 unmounts netprio (cgroupkillsb), queuing root destruction work 3. A dying perfevent CSS gets queued for offline after root destruction 4. Root destruction waits for offline completion, but offline work is blocked behind root destruction in cgroupdestroywq (maxactive=1) Solution: Split cgroupdestroywq into three dedicated workqueues: cgroupofflinewq – Handles CSS offline operations cgroupreleasewq – Manages resource release cgroupfreewq – Performs final memory deallocation This separation eliminates blocking in the CSS free path while waiting for offline operations to complete. [1] https://github.com/linux-test-project/ltp/blob/master/runtest/controllers