|
@@ -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;
|
|
|
}
|
|
|
}
|