← CVE announcements

SECURITY ANNOUNCEMENT

CVE-2026-99249

3 November 2026

When the init of a pid namespace exits, zap_pid_ns_processes() waits until all other pids in the namespace are freed. A tracer outside the namespace that does not reap its traced zombies keeps those pids allocated, so this wait has no upper bound, and while it lasts every suspend attempt fails:

Freezing user space processes failed after 20.006 seconds (2 tasks refusing to freeze, wq_busy=0):

Neither wait is freezable. The first loop sleeps in do_wait(), which returns -ERESTARTSYS on the freezer's fake signal; the loop then clears TIF_SIGPENDING and waits again without ever freezing. The final loop sleeps in TASK_INTERRUPTIBLE, and since nothing clears TIF_SIGPENDING there, schedule() returns immediately after the first freeze attempt and the task spins until the wait ends.

Sleep in TASK_INTERRUPTIBLE | TASK_FREEZABLE in do_wait(), so that the freezer can freeze tasks waiting there directly, and in TASK_IDLE | TASK_FREEZABLE in the final loop, like coredump_task_exit() does.

This was hit with Chromium-based browsers: crashpad ptrace-attaches the threads of a crashed renderer, which is a pid namespace init, and does not reap those killed during the dump.

Introduced

2.6.24 3eb07c8c8adb6f0572baba844ba2d9e501654316

Fixed releases

6.1.191 064a6761d6f6ac55d090d3eaca649577ee736713

6.12.115 4b47107f1a80c809c80093e872bcaccdbae13db4

6.18.59 2e10b8a74f55b5aae33db105d3e2d3ae759c865a

6.6.161 e8dafad7de9ede813af2d48cc04b7c88fef16682

7.2.13 7deb5770840339fe88755bf27b92f74edc26ee87

7.3 81933038f5e273d17ed22792f906889393b204c5

View source announcement ↗