]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
cgroupfs: need the full path to setup cpuset
authorQiang Huang <h.huangqiang@huawei.com>
Thu, 23 Jan 2014 06:56:54 +0000 (14:56 +0800)
committerSerge Hallyn <serge.hallyn@ubuntu.com>
Thu, 23 Jan 2014 17:21:34 +0000 (11:21 -0600)
Function file_exists() needs a absolute full path, but we are using
current_entire_path which is not. It will get the wrong result from
file_exists() and case Segmentation fault when we fopen a non-exist
file and try to fscanf from it.

Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
src/lxc/cgroup.c

index 0898f467646a6fd436b93edfd726d7f98900e92e..9513e96683e6492442506c31418bf8be66be0271 100644 (file)
@@ -958,12 +958,20 @@ struct cgroup_process_info *lxc_cgroupfs_create(const char *name, const char *pa
                                goto cleanup_from_error;
                        } else if (r == 0) {
                                /* successfully created */
+                               char *full_path = NULL;
                                r = lxc_grow_array((void ***)&info_ptr->created_paths, &info_ptr->created_paths_capacity, info_ptr->created_paths_count + 1, 8);
                                if (r < 0)
                                        goto cleanup_from_error;
                                info_ptr->created_paths[info_ptr->created_paths_count++] = current_entire_path;
+
+                               full_path = cgroup_to_absolute_path(
+                                               info_ptr->designated_mount_point,
+                                               current_entire_path, NULL);
+                               if (!full_path)
+                                       goto cleanup_from_error;
                                setup_cpuset_if_needed(info_ptr->hierarchy->subsystems,
-                                               current_entire_path);
+                                               full_path);
+                               free(full_path);
                        } else {
                                /* if we didn't create the cgroup, then we have to make sure that
                                 * further cgroups will be created properly