]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
machine: as safety precaution also check parsed machine name
authorLennart Poettering <lennart@poettering.net>
Mon, 19 May 2025 09:12:14 +0000 (11:12 +0200)
committerLennart Poettering <lennart@poettering.net>
Tue, 27 May 2025 08:23:36 +0000 (10:23 +0200)
src/machine/machine.c

index e59ee25715e2a05dc5df770a162b50da3e5fdd0b..377e01484be02a36b41a586cc103933861eb6746 100644 (file)
@@ -254,7 +254,7 @@ static void machine_unlink(Machine *m) {
 }
 
 int machine_load(Machine *m) {
-        _cleanup_free_ char *realtime = NULL, *monotonic = NULL, *id = NULL, *leader = NULL, *leader_pidfdid = NULL,
+        _cleanup_free_ char *name = NULL, *realtime = NULL, *monotonic = NULL, *id = NULL, *leader = NULL, *leader_pidfdid = NULL,
                 *class = NULL, *netif = NULL, *vsock_cid = NULL;
         int r;
 
@@ -264,6 +264,7 @@ int machine_load(Machine *m) {
                 return 0;
 
         r = parse_env_file(NULL, m->state_file,
+                           "NAME",                 &name,
                            "SCOPE",                &m->unit,
                            "SCOPE_JOB",            &m->scope_job,
                            "SERVICE",              &m->service,
@@ -283,6 +284,9 @@ int machine_load(Machine *m) {
         if (r < 0)
                 return log_error_errno(r, "Failed to read %s: %m", m->state_file);
 
+        if (!streq_ptr(name, m->name))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "State file '%s' for machine '%s' reports a different name '%s', refusing", m->state_file, m->name, name);
+
         if (id)
                 (void) sd_id128_from_string(id, &m->id);