From: Mike Yuan Date: Thu, 25 Apr 2024 20:47:40 +0000 (+0800) Subject: core/namespace: create /dev/log only if journal socket is present X-Git-Tag: v257-rc1~562^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=119820f8abf587f96a11fb1f28ef854e84bc3122;p=thirdparty%2Fsystemd.git core/namespace: create /dev/log only if journal socket is present --- diff --git a/src/core/namespace.c b/src/core/namespace.c index 553f3f4940a..323ff4c2794 100644 --- a/src/core/namespace.c +++ b/src/core/namespace.c @@ -1084,7 +1084,7 @@ static int create_temporary_mount_point(RuntimeScope scope, char **ret) { return 0; } -static int mount_private_dev(MountEntry *m, RuntimeScope scope) { +static int mount_private_dev(const MountEntry *m, const NamespaceParameters *p) { static const char devnodes[] = "/dev/null\0" "/dev/zero\0" @@ -1099,8 +1099,9 @@ static int mount_private_dev(MountEntry *m, RuntimeScope scope) { int r; assert(m); + assert(p); - r = create_temporary_mount_point(scope, &temporary_mount); + r = create_temporary_mount_point(p->runtime_scope, &temporary_mount); if (r < 0) return r; @@ -1145,9 +1146,13 @@ static int mount_private_dev(MountEntry *m, RuntimeScope scope) { FOREACH_STRING(d, "/dev/mqueue", "/dev/hugepages") (void) bind_mount_device_dir(temporary_mount, d); - const char *devlog = strjoina(temporary_mount, "/dev/log"); - if (symlink("/run/systemd/journal/dev-log", devlog) < 0) - log_debug_errno(errno, "Failed to create symlink '%s' to /run/systemd/journal/dev-log, ignoring: %m", devlog); + if ((!p->root_image && !p->root_directory) || p->bind_journal_sockets) { + const char *devlog = strjoina(temporary_mount, "/dev/log"); + if (symlink("/run/systemd/journal/dev-log", devlog) < 0) + log_debug_errno(errno, + "Failed to create symlink '%s' to /run/systemd/journal/dev-log, ignoring: %m", + devlog); + } NULSTR_FOREACH(d, devnodes) { r = clone_device_node(d, temporary_mount, &can_mknod); @@ -1726,7 +1731,7 @@ static int apply_one_mount( break; case MOUNT_PRIVATE_DEV: - return mount_private_dev(m, p->runtime_scope); + return mount_private_dev(m, p); case MOUNT_BIND_DEV: return mount_bind_dev(m);