提交 923c7538 编写于 作者: L Li Zefan 提交者: Eric W. Biederman

userns: Allow unprivileged reboot

In a container with its own pid namespace and user namespace, rebooting
the system won't reboot the host, but terminate all the processes in
it and thus have the container shutdown, so it's safe.
Signed-off-by: NLi Zefan <lizefan@huawei.com>
Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
上级 48c6d121
...@@ -433,11 +433,12 @@ static DEFINE_MUTEX(reboot_mutex); ...@@ -433,11 +433,12 @@ static DEFINE_MUTEX(reboot_mutex);
SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd, SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd,
void __user *, arg) void __user *, arg)
{ {
struct pid_namespace *pid_ns = task_active_pid_ns(current);
char buffer[256]; char buffer[256];
int ret = 0; int ret = 0;
/* We only trust the superuser with rebooting the system. */ /* We only trust the superuser with rebooting the system. */
if (!capable(CAP_SYS_BOOT)) if (!ns_capable(pid_ns->user_ns, CAP_SYS_BOOT))
return -EPERM; return -EPERM;
/* For safety, we require "magic" arguments. */ /* For safety, we require "magic" arguments. */
...@@ -453,7 +454,7 @@ SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd, ...@@ -453,7 +454,7 @@ SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd,
* pid_namespace, the command is handled by reboot_pid_ns() which will * pid_namespace, the command is handled by reboot_pid_ns() which will
* call do_exit(). * call do_exit().
*/ */
ret = reboot_pid_ns(task_active_pid_ns(current), cmd); ret = reboot_pid_ns(pid_ns, cmd);
if (ret) if (ret)
return ret; return ret;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册