]> git.proxmox.com Git - mirror_lxc.git/commitdiff
pam-cgfs: ignore the system umask when creating the cgroup hierarchy
authorJonathan Calmels <jcalmels@nvidia.com>
Mon, 16 Apr 2018 19:30:33 +0000 (12:30 -0700)
committerJonathan Calmels <jcalmels@nvidia.com>
Mon, 23 Apr 2018 20:24:11 +0000 (13:24 -0700)
Fixes: #2277
Signed-off-by: Jonathan Calmels <jcalmels@nvidia.com>
src/lxc/pam/pam_cgfs.c

index 3df8daef3f94fc91d252fb81e9074e9f83397502..5c272b0e80be84242b597de95dde80a491f873f2 100644 (file)
@@ -223,6 +223,20 @@ static bool cgv2_prune_empty_cgroups(const char *user);
 static bool cgv2_remove(const char *cgroup);
 static bool is_cgv2(char *line);
 
+static int do_mkdir(const char *path, mode_t mode)
+{
+       int saved_errno;
+       mode_t mask;
+       int r;
+
+       mask = umask(0);
+       r = mkdir(path, mode);
+       saved_errno = errno;
+       umask(mask);
+       errno = saved_errno;
+       return (r);
+}
+
 /* Create directory and (if necessary) its parents. */
 static bool mkdir_parent(const char *root, char *path)
 {
@@ -252,7 +266,7 @@ static bool mkdir_parent(const char *root, char *path)
                if (file_exists(path))
                        goto next;
 
-               if (mkdir(path, 0755) < 0) {
+               if (do_mkdir(path, 0755) < 0) {
                        pam_cgfs_debug("Failed to create %s: %s.\n", path, strerror(errno));
                        return false;
                }
@@ -1963,7 +1977,7 @@ static bool cgv1_handle_cpuset_hierarchy(struct cgv1_hierarchy *h,
        cgpath = must_make_path(h->mountpoint, h->base_cgroup, cgroup, NULL);
        if (slash)
                *slash = '/';
-       if (mkdir(cgpath, 0755) < 0 && errno != EEXIST) {
+       if (do_mkdir(cgpath, 0755) < 0 && errno != EEXIST) {
                pam_cgfs_debug("Failed to create '%s'", cgpath);
                free(cgpath);
                return false;