]> git.ipfire.org Git - thirdparty/systemd.git/commit
nsresourced: detect and clean up registry entries for dead user namespaces (#42070)
authorDaan De Meyer <daan@amutable.com>
Fri, 15 May 2026 19:19:15 +0000 (21:19 +0200)
committerGitHub <noreply@github.com>
Fri, 15 May 2026 19:19:15 +0000 (21:19 +0200)
commitbce7b82268613ecd38291ada0137ddcec982b3d4
treee2d1a28865464b6cfdb1767fe42e61b6ed5590ce
parent5e0430479307220aee243c38ecb845a35004048a
parent23f22047189a291b9ba19185a24264771ab8c467
nsresourced: detect and clean up registry entries for dead user namespaces (#42070)

The BPF kprobe that fires on user namespace destruction is the only
thing
that triggers registry cleanup, so any time it doesn't run — ring buffer
overflow, kprobe missing, fdstore entry dropped outside our cleanup path
— a registry entry is left behind forever.

Stamp each registry entry with the kernel's unique namespace identifier
(NS_GET_ID, kernel ≥ 6.13) at allocation time. At manager startup, after
the existing fdstore→registry sweep, walk the registry and ask the
kernel
to look each namespace up by id via open_by_handle_at() on nsfs; if the
lookup returns -ESTALE the namespace is gone and we release the entry.
Old entries written before this change carry no identifier and are left
alone.

Add a namespace_open_by_id() helper for the lookup. The kernel restricts
open_by_handle_at() on nsfs to processes in the initial user namespace,
collapsing both permission denials and dead namespaces onto -ESTALE; the
helper refuses early with -EPERM outside the initial user namespace
so callers can tell the two apart.