forked from Minki/linux
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: Li Zefan <lizefan@huawei.com> Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
This commit is contained in:
parent
48c6d1217e
commit
923c753823
@ -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,
|
|||||||
* 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;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user