return 0;
}
-int setup_cgroup(const char *cgpath, struct lxc_list *cgroups)
+static int _setup_cgroup(const char *cgpath, struct lxc_list *cgroups,
+ int devices)
{
struct lxc_list *iterator;
struct lxc_cgroup *cg;
return 0;
lxc_list_for_each(iterator, cgroups) {
-
cg = iterator->elem;
- if (lxc_cgroup_set_bypath(cgpath, cg->subsystem, cg->value)) {
- ERROR("Error setting %s to %s for %s\n", cg->subsystem,
- cg->value, cgpath);
- goto out;
+ if (devices == !strncmp("devices", cg->subsystem, 7)) {
+ if (lxc_cgroup_set_bypath(cgpath, cg->subsystem,
+ cg->value)) {
+ ERROR("Error setting %s to %s for %s\n",
+ cg->subsystem, cg->value, cgpath);
+ goto out;
+ }
}
DEBUG("cgroup '%s' set to '%s'", cg->subsystem, cg->value);
return ret;
}
+int setup_cgroup_devices(const char *cgpath, struct lxc_list *cgroups)
+{
+ return _setup_cgroup(cgpath, cgroups, 1);
+}
+
+int setup_cgroup(const char *cgpath, struct lxc_list *cgroups)
+{
+ return _setup_cgroup(cgpath, cgroups, 0);
+}
+
static void parse_mntopt(char *opt, unsigned long *flags, char **data)
{
struct mount_opt *mo;
int run_lxc_hooks(const char *name, char *hook, struct lxc_conf *conf);
extern int setup_cgroup(const char *cgpath, struct lxc_list *cgroups);
+extern int setup_cgroup_devices(const char *cgpath, struct lxc_list *cgroups);
extern int detect_shared_rootfs(void);
/*
extern int lxc_clear_mount_entries(struct lxc_conf *c);
extern int lxc_clear_hooks(struct lxc_conf *c, const char *key);
-extern int setup_cgroup(const char *name, struct lxc_list *cgroups);
-
extern int uid_shift_ttys(int pid, struct lxc_conf *conf);
/*
if ((handler->cgroup = lxc_cgroup_path_create(NULL, name)) == NULL)
goto out_delete_net;
+ if (setup_cgroup(handler->cgroup, &handler->conf->cgroup)) {
+ ERROR("failed to setup the cgroups for '%s'", name);
+ goto out_delete_net;
+ }
+
if (lxc_cgroup_enter(handler->cgroup, handler->pid) < 0)
goto out_delete_net;
if (lxc_sync_barrier_child(handler, LXC_SYNC_POST_CONFIGURE))
goto out_delete_net;
- if (setup_cgroup(handler->cgroup, &handler->conf->cgroup)) {
- ERROR("failed to setup the cgroups for '%s'", name);
+ if (setup_cgroup_devices(handler->cgroup, &handler->conf->cgroup)) {
+ ERROR("failed to setup the devices cgroup for '%s'", name);
goto out_delete_net;
}
-
/* Tell the child to complete its initialization and wait for
* it to exec or return an error. (the child will never
* return LXC_SYNC_POST_CGROUP+1. It will either close the