Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

userns: Convert binary formats to use kuid/kgid where appropriate

Acked-by: Serge Hallyn <serge.hallyn@canonical.com>
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>

+12 -14
+6 -6
fs/binfmt_elf.c
··· 228 228 NEW_AUX_ENT(AT_BASE, interp_load_addr); 229 229 NEW_AUX_ENT(AT_FLAGS, 0); 230 230 NEW_AUX_ENT(AT_ENTRY, exec->e_entry); 231 - NEW_AUX_ENT(AT_UID, cred->uid); 232 - NEW_AUX_ENT(AT_EUID, cred->euid); 233 - NEW_AUX_ENT(AT_GID, cred->gid); 234 - NEW_AUX_ENT(AT_EGID, cred->egid); 231 + NEW_AUX_ENT(AT_UID, from_kuid_munged(cred->user_ns, cred->uid)); 232 + NEW_AUX_ENT(AT_EUID, from_kuid_munged(cred->user_ns, cred->euid)); 233 + NEW_AUX_ENT(AT_GID, from_kgid_munged(cred->user_ns, cred->gid)); 234 + NEW_AUX_ENT(AT_EGID, from_kgid_munged(cred->user_ns, cred->egid)); 235 235 NEW_AUX_ENT(AT_SECURE, security_bprm_secureexec(bprm)); 236 236 NEW_AUX_ENT(AT_RANDOM, (elf_addr_t)(unsigned long)u_rand_bytes); 237 237 NEW_AUX_ENT(AT_EXECFN, bprm->exec); ··· 1367 1367 psinfo->pr_flag = p->flags; 1368 1368 rcu_read_lock(); 1369 1369 cred = __task_cred(p); 1370 - SET_UID(psinfo->pr_uid, cred->uid); 1371 - SET_GID(psinfo->pr_gid, cred->gid); 1370 + SET_UID(psinfo->pr_uid, from_kuid_munged(cred->user_ns, cred->uid)); 1371 + SET_GID(psinfo->pr_gid, from_kgid_munged(cred->user_ns, cred->gid)); 1372 1372 rcu_read_unlock(); 1373 1373 strncpy(psinfo->pr_fname, p->comm, sizeof(psinfo->pr_fname)); 1374 1374
+6 -6
fs/binfmt_elf_fdpic.c
··· 631 631 NEW_AUX_ENT(AT_BASE, interp_params->elfhdr_addr); 632 632 NEW_AUX_ENT(AT_FLAGS, 0); 633 633 NEW_AUX_ENT(AT_ENTRY, exec_params->entry_addr); 634 - NEW_AUX_ENT(AT_UID, (elf_addr_t) cred->uid); 635 - NEW_AUX_ENT(AT_EUID, (elf_addr_t) cred->euid); 636 - NEW_AUX_ENT(AT_GID, (elf_addr_t) cred->gid); 637 - NEW_AUX_ENT(AT_EGID, (elf_addr_t) cred->egid); 634 + NEW_AUX_ENT(AT_UID, (elf_addr_t) from_kuid_munged(cred->user_ns, cred->uid)); 635 + NEW_AUX_ENT(AT_EUID, (elf_addr_t) from_kuid_munged(cred->user_ns, cred->euid)); 636 + NEW_AUX_ENT(AT_GID, (elf_addr_t) from_kgid_munged(cred->user_ns, cred->gid)); 637 + NEW_AUX_ENT(AT_EGID, (elf_addr_t) from_kgid_munged(cred->user_ns, cred->egid)); 638 638 NEW_AUX_ENT(AT_SECURE, security_bprm_secureexec(bprm)); 639 639 NEW_AUX_ENT(AT_EXECFN, bprm->exec); 640 640 ··· 1431 1431 psinfo->pr_flag = p->flags; 1432 1432 rcu_read_lock(); 1433 1433 cred = __task_cred(p); 1434 - SET_UID(psinfo->pr_uid, cred->uid); 1435 - SET_GID(psinfo->pr_gid, cred->gid); 1434 + SET_UID(psinfo->pr_uid, from_kuid_munged(cred->user_ns, cred->uid)); 1435 + SET_GID(psinfo->pr_gid, from_kgid_munged(cred->user_ns, cred->gid)); 1436 1436 rcu_read_unlock(); 1437 1437 strncpy(psinfo->pr_fname, p->comm, sizeof(psinfo->pr_fname)); 1438 1438
-2
init/Kconfig
··· 865 865 866 866 # List of kernel pieces that need user namespace work 867 867 # Features 868 - depends on BINFMT_ELF = n 869 - depends on BINFMT_ELF_FDPIC = n 870 868 depends on UNIX98_PTYS = n 871 869 depends on CGROUPS = n 872 870 depends on MIGRATION = n