diff options
Diffstat (limited to 'userns-Don-t-allow-unprivileged-creation-of-gid-mapp.patch')
-rw-r--r-- | userns-Don-t-allow-unprivileged-creation-of-gid-mapp.patch | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/userns-Don-t-allow-unprivileged-creation-of-gid-mapp.patch b/userns-Don-t-allow-unprivileged-creation-of-gid-mapp.patch new file mode 100644 index 000000000..b1d53828a --- /dev/null +++ b/userns-Don-t-allow-unprivileged-creation-of-gid-mapp.patch @@ -0,0 +1,46 @@ +From: "Eric W. Biederman" <ebiederm@xmission.com> +Date: Fri, 5 Dec 2014 18:14:19 -0600 +Subject: [PATCH] userns: Don't allow unprivileged creation of gid mappings + +As any gid mapping will allow and must allow for backwards +compatibility dropping groups don't allow any gid mappings to be +established without CAP_SETGID in the parent user namespace. + +For a small class of applications this change breaks userspace +and removes useful functionality. This small class of applications +includes tools/testing/selftests/mount/unprivilged-remount-test.c + +Most of the removed functionality will be added back with the addition +of a one way knob to disable setgroups. Once setgroups is disabled +setting the gid_map becomes as safe as setting the uid_map. + +For more common applications that set the uid_map and the gid_map +with privilege this change will have no affect. + +This is part of a fix for CVE-2014-8989. + +Cc: stable@vger.kernel.org +Reviewed-by: Andy Lutomirski <luto@amacapital.net> +Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com> +--- + kernel/user_namespace.c | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c +index 27c8dab48c07..1ce6d67c07b7 100644 +--- a/kernel/user_namespace.c ++++ b/kernel/user_namespace.c +@@ -821,10 +821,6 @@ static bool new_idmap_permitted(const struct file *file, + kuid_t uid = make_kuid(ns->parent, id); + if (uid_eq(uid, file->f_cred->fsuid)) + return true; +- } else if (cap_setid == CAP_SETGID) { +- kgid_t gid = make_kgid(ns->parent, id); +- if (gid_eq(gid, file->f_cred->fsgid)) +- return true; + } + } + +-- +2.1.0 + |