Skip to content

Commit

Permalink
userns: Allow unprivileged reboot
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Eric W. Biederman <[email protected]>
  • Loading branch information
lizf-os authored and ebiederm committed Dec 27, 2012
1 parent 48c6d12 commit 923c753
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions kernel/sys.c
Original file line number Diff line number Diff line change
Expand Up @@ -433,11 +433,12 @@ static DEFINE_MUTEX(reboot_mutex);
SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd,
void __user *, arg)
{
struct pid_namespace *pid_ns = task_active_pid_ns(current);
char buffer[256];
int ret = 0;

/* 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;

/* For safety, we require "magic" arguments. */
Expand All @@ -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
* call do_exit().
*/
ret = reboot_pid_ns(task_active_pid_ns(current), cmd);
ret = reboot_pid_ns(pid_ns, cmd);
if (ret)
return ret;

Expand Down

0 comments on commit 923c753

Please sign in to comment.