[PATCH 1/1] device_cgroup: remove can_attach
Serge Hallyn
serge.hallyn at ubuntu.com
Fri Oct 25 17:27:35 UTC 2013
Quoting Tim Gardner (tim.gardner at canonical.com):
> On 10/24/2013 12:17 PM, Serge Hallyn wrote:
> >[ Hi - the following patch has been applied to Tejun's
> >cgroup/for-3.13 branch. It's needed for non-root users to be
> >able to create containers ]
> >
> >It is really only wanting to duplicate a check which is already done by the
> >cgroup subsystem.
> >
> >With this patch, user jdoe still cannot move pid 1 into a devices cgroup
> >he owns, but now he can move his own other tasks into devices cgroups.
> >
> >Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
> >Signed-off-by: Tejun Heo <tj at kernel.org>
> >Cc: Aristeu Rozanski <aris at redhat.com>
> >---
> > security/device_cgroup.c | 11 -----------
> > 1 file changed, 11 deletions(-)
> >
> >diff --git a/security/device_cgroup.c b/security/device_cgroup.c
> >index c123628..7c2a0a7 100644
> >--- a/security/device_cgroup.c
> >+++ b/security/device_cgroup.c
> >@@ -63,16 +63,6 @@ static inline struct dev_cgroup *task_devcgroup(struct task_struct *task)
> >
> > struct cgroup_subsys devices_subsys;
> >
> >-static int devcgroup_can_attach(struct cgroup_subsys_state *new_css,
> >- struct cgroup_taskset *set)
> >-{
> >- struct task_struct *task = cgroup_taskset_first(set);
> >-
> >- if (current != task && !capable(CAP_SYS_ADMIN))
> >- return -EPERM;
> >- return 0;
> >-}
> >-
> > /*
> > * called under devcgroup_mutex
> > */
> >@@ -697,7 +687,6 @@ static struct cftype dev_cgroup_files[] = {
> >
> > struct cgroup_subsys devices_subsys = {
> > .name = "devices",
> >- .can_attach = devcgroup_can_attach,
> > .css_alloc = devcgroup_css_alloc,
> > .css_free = devcgroup_css_free,
> > .css_online = devcgroup_online,
> >
>
> This is kind of a fundamental change. Can you write a test case ?
This test case checks whether the patch is present (and makes sure it
doesn't let non-root users move root owned tasks).
#!/bin/bash
die() {
echo $1
exit 1
}
create_chown_cgroup() {
echo "Creating a cgroup to use"
sudo mkdir -p /sys/fs/cgroup/devices/xxx
sudo chown -R $1 /sys/fs/cgroup/devices/xxx || return 1
return 0
}
test_move_init() {
echo "Testing whether we can change init's cgroup as non-root (should fail)"
echo 1 | /sys/fs/cgroup/devices/xxx/tasks && return 1
return 0
}
test_move_child() {
echo "Testing whether we can change our child's cgroup as non-root (should succeed)"
sleep 100 &
echo $! > /sys/fs/cgroup/devices/xxx/tasks || return 1
kill $!
return 0
}
myid=$(id -u)
if [ $myid -eq 0 ]; then
die "don't run this as root"
exit 1
fi
create_chown_cgroup $myid || die "failed to create test cgroup"
test_move_init || die "was able to move init to new cgroup"
test_move_child || die "was unable to move my child to new cgroup"
echo "Success"
exit 0
More information about the kernel-team
mailing list