mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-02-26 09:57:26 +03:00
core: add extra safety check before switching root
This commit is contained in:
parent
7cf82e0bb1
commit
50913bc0c8
@ -1186,6 +1186,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection,
|
||||
} else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1.Manager", "SwitchRoot")) {
|
||||
const char *switch_root, *switch_root_init;
|
||||
char *u, *v;
|
||||
int k;
|
||||
|
||||
if (!dbus_message_get_args(
|
||||
message,
|
||||
@ -1206,6 +1207,22 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection,
|
||||
return bus_send_error_reply(connection, message, &error, -ENOTSUP);
|
||||
}
|
||||
|
||||
/* Safety check */
|
||||
if (isempty(switch_root_init))
|
||||
k = access(switch_root, F_OK);
|
||||
else {
|
||||
char *p;
|
||||
|
||||
p = join(switch_root, "/", switch_root_init, NULL);
|
||||
if (!p)
|
||||
goto oom;
|
||||
|
||||
k = access(p, X_OK);
|
||||
free(p);
|
||||
}
|
||||
if (k < 0)
|
||||
return bus_send_error_reply(connection, message, NULL, -errno);
|
||||
|
||||
u = strdup(switch_root);
|
||||
if (!u)
|
||||
goto oom;
|
||||
|
Loading…
x
Reference in New Issue
Block a user