]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core: tighten validation checks in SwitchRoot() dbus call
authorLennart Poettering <lennart@poettering.net>
Thu, 22 Dec 2022 09:28:05 +0000 (10:28 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 23 Dec 2022 17:09:02 +0000 (18:09 +0100)
src/core/dbus-manager.c

index 9e529d6375ca7cae3d8c20dc7e4732ca8eca39ea..ed91e9a1cfcb907dc75e79205d5988c54c3d5852 100644 (file)
@@ -1680,9 +1680,9 @@ static int method_switch_root(sd_bus_message *message, void *userdata, sd_bus_er
         if (r < 0)
                 return r;
 
-        if (isempty(root))
+        if (!path_is_valid(root))
                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
-                                         "New root directory may not be the empty string.");
+                                         "New root directory must be a valid path.");
         if (!path_is_absolute(root))
                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
                                          "New root path '%s' is not absolute.", root);
@@ -1704,6 +1704,10 @@ static int method_switch_root(sd_bus_message *message, void *userdata, sd_bus_er
         } else {
                 _cleanup_free_ char *chased = NULL;
 
+                if (!path_is_valid(init))
+                        return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
+                                                 "Path to init binary '%s' is not a valid path.", init);
+
                 if (!path_is_absolute(init))
                         return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
                                                  "Path to init binary '%s' not absolute.", init);