mirror of
https://github.com/systemd/systemd.git
synced 2025-03-31 14:50:15 +03:00
core,systemctl: refuse switching root to current root properly
Fixes #28970
This commit is contained in:
parent
b63beb4d28
commit
b0c5f0e1f4
@ -1864,10 +1864,17 @@ static int method_switch_root(sd_bus_message *message, void *userdata, sd_bus_er
|
||||
if (!path_is_valid(root))
|
||||
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
|
||||
"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);
|
||||
if (path_equal(root, "/"))
|
||||
|
||||
r = path_is_root(root);
|
||||
if (r < 0)
|
||||
return sd_bus_error_set_errnof(error, r,
|
||||
"Failed to check if new root directory '%s' is the same as old root: %m",
|
||||
root);
|
||||
if (r > 0)
|
||||
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
|
||||
"New root directory cannot be the old root directory.");
|
||||
}
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include "bus-error.h"
|
||||
#include "bus-locator.h"
|
||||
#include "chase.h"
|
||||
#include "fd-util.h"
|
||||
#include "parse-util.h"
|
||||
#include "path-util.h"
|
||||
#include "proc-cmdline.h"
|
||||
@ -47,11 +48,17 @@ int verb_switch_root(int argc, char *argv[], void *userdata) {
|
||||
|
||||
if (argc >= 2) {
|
||||
root = argv[1];
|
||||
|
||||
if (!path_is_valid(root))
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid root path: %s", root);
|
||||
|
||||
if (!path_is_absolute(root))
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Root path is not absolute: %s", root);
|
||||
if (path_equal(root, "/"))
|
||||
|
||||
r = path_is_root(root);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to check if switch-root directory '%s' is current root: %m", root);
|
||||
if (r > 0)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Cannot switch to current root directory: %s", root);
|
||||
} else
|
||||
root = "/sysroot";
|
||||
|
Loading…
x
Reference in New Issue
Block a user