mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-22 13:33:56 +03:00
core: mount namespaces: Remove auxiliary bind mounts directory after unit termination
Unit that requires its own mount namespace creates a temporary directory to implement dynamic bind mounts (org.freedesktop.systemd1.Manager.BindMountUnit). However, this directory is never removed and they will accumulate for each unique unit (e.g. templated units of systemd-coredump@). Attach the auxiliary runtime directory existence to lifetime of other "runtime" only per-unit directories.
This commit is contained in:
parent
2f7fe6199c
commit
b9f976fb45
@ -5626,6 +5626,23 @@ int exec_context_destroy_credentials(const ExecContext *c, const char *runtime_p
|
||||
return 0;
|
||||
}
|
||||
|
||||
int exec_context_destroy_mount_ns_dir(Unit *u) {
|
||||
_cleanup_free_ char *p = NULL;
|
||||
|
||||
if (!u || !MANAGER_IS_SYSTEM(u->manager))
|
||||
return 0;
|
||||
|
||||
p = path_join("/run/systemd/propagate/", u->id);
|
||||
if (!p)
|
||||
return -ENOMEM;
|
||||
|
||||
/* This is only filled transiently (see mount_in_namespace()), should be empty or even non-existent*/
|
||||
if (rmdir(p) < 0 && errno != ENOENT)
|
||||
log_unit_debug_errno(u, errno, "Unable to remove propagation dir '%s', ignoring: %m", p);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void exec_command_done(ExecCommand *c) {
|
||||
assert(c);
|
||||
|
||||
|
@ -459,6 +459,7 @@ void exec_context_dump(const ExecContext *c, FILE* f, const char *prefix);
|
||||
|
||||
int exec_context_destroy_runtime_directory(const ExecContext *c, const char *runtime_root);
|
||||
int exec_context_destroy_credentials(const ExecContext *c, const char *runtime_root, const char *unit);
|
||||
int exec_context_destroy_mount_ns_dir(Unit *u);
|
||||
|
||||
const char* exec_context_fdname(const ExecContext *c, int fd_index);
|
||||
|
||||
|
@ -5765,6 +5765,7 @@ void unit_destroy_runtime_data(Unit *u, const ExecContext *context) {
|
||||
exec_context_destroy_runtime_directory(context, u->manager->prefix[EXEC_DIRECTORY_RUNTIME]);
|
||||
|
||||
exec_context_destroy_credentials(context, u->manager->prefix[EXEC_DIRECTORY_RUNTIME], u->id);
|
||||
exec_context_destroy_mount_ns_dir(u);
|
||||
}
|
||||
|
||||
int unit_clean(Unit *u, ExecCleanMask mask) {
|
||||
|
Loading…
Reference in New Issue
Block a user