userns: Only allow the creator of the userns unprivileged mappings
[cascardo/linux.git] / kernel / user_namespace.c
index 9451b12..1e34de2 100644 (file)
@@ -812,14 +812,16 @@ static bool new_idmap_permitted(const struct file *file,
                                struct user_namespace *ns, int cap_setid,
                                struct uid_gid_map *new_map)
 {
+       const struct cred *cred = file->f_cred;
        /* Don't allow mappings that would allow anything that wouldn't
         * be allowed without the establishment of unprivileged mappings.
         */
-       if ((new_map->nr_extents == 1) && (new_map->extent[0].count == 1)) {
+       if ((new_map->nr_extents == 1) && (new_map->extent[0].count == 1) &&
+           uid_eq(ns->owner, cred->euid)) {
                u32 id = new_map->extent[0].lower_first;
                if (cap_setid == CAP_SETUID) {
                        kuid_t uid = make_kuid(ns->parent, id);
-                       if (uid_eq(uid, file->f_cred->euid))
+                       if (uid_eq(uid, cred->euid))
                                return true;
                }
        }