aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/user_namespace.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
index 9451b12a9b6c..1e34de2fbd60 100644
--- a/kernel/user_namespace.c
+++ b/kernel/user_namespace.c
@@ -812,14 +812,16 @@ static bool new_idmap_permitted(const struct file *file,
812 struct user_namespace *ns, int cap_setid, 812 struct user_namespace *ns, int cap_setid,
813 struct uid_gid_map *new_map) 813 struct uid_gid_map *new_map)
814{ 814{
815 const struct cred *cred = file->f_cred;
815 /* Don't allow mappings that would allow anything that wouldn't 816 /* Don't allow mappings that would allow anything that wouldn't
816 * be allowed without the establishment of unprivileged mappings. 817 * be allowed without the establishment of unprivileged mappings.
817 */ 818 */
818 if ((new_map->nr_extents == 1) && (new_map->extent[0].count == 1)) { 819 if ((new_map->nr_extents == 1) && (new_map->extent[0].count == 1) &&
820 uid_eq(ns->owner, cred->euid)) {
819 u32 id = new_map->extent[0].lower_first; 821 u32 id = new_map->extent[0].lower_first;
820 if (cap_setid == CAP_SETUID) { 822 if (cap_setid == CAP_SETUID) {
821 kuid_t uid = make_kuid(ns->parent, id); 823 kuid_t uid = make_kuid(ns->parent, id);
822 if (uid_eq(uid, file->f_cred->euid)) 824 if (uid_eq(uid, cred->euid))
823 return true; 825 return true;
824 } 826 }
825 } 827 }