OSDN Git Service

userns: Convert binary formats to use kuid/kgid where appropriate
authorEric W. Biederman <ebiederm@xmission.com>
Wed, 8 Feb 2012 02:36:10 +0000 (18:36 -0800)
committerEric W. Biederman <ebiederm@xmission.com>
Tue, 15 May 2012 21:59:25 +0000 (14:59 -0700)
Acked-by: Serge Hallyn <serge.hallyn@canonical.com>
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
fs/binfmt_elf.c
fs/binfmt_elf_fdpic.c
init/Kconfig

index 48ffb3d..efc6731 100644 (file)
@@ -228,10 +228,10 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr *exec,
        NEW_AUX_ENT(AT_BASE, interp_load_addr);
        NEW_AUX_ENT(AT_FLAGS, 0);
        NEW_AUX_ENT(AT_ENTRY, exec->e_entry);
-       NEW_AUX_ENT(AT_UID, cred->uid);
-       NEW_AUX_ENT(AT_EUID, cred->euid);
-       NEW_AUX_ENT(AT_GID, cred->gid);
-       NEW_AUX_ENT(AT_EGID, cred->egid);
+       NEW_AUX_ENT(AT_UID, from_kuid_munged(cred->user_ns, cred->uid));
+       NEW_AUX_ENT(AT_EUID, from_kuid_munged(cred->user_ns, cred->euid));
+       NEW_AUX_ENT(AT_GID, from_kgid_munged(cred->user_ns, cred->gid));
+       NEW_AUX_ENT(AT_EGID, from_kgid_munged(cred->user_ns, cred->egid));
        NEW_AUX_ENT(AT_SECURE, security_bprm_secureexec(bprm));
        NEW_AUX_ENT(AT_RANDOM, (elf_addr_t)(unsigned long)u_rand_bytes);
        NEW_AUX_ENT(AT_EXECFN, bprm->exec);
@@ -1367,8 +1367,8 @@ static int fill_psinfo(struct elf_prpsinfo *psinfo, struct task_struct *p,
        psinfo->pr_flag = p->flags;
        rcu_read_lock();
        cred = __task_cred(p);
-       SET_UID(psinfo->pr_uid, cred->uid);
-       SET_GID(psinfo->pr_gid, cred->gid);
+       SET_UID(psinfo->pr_uid, from_kuid_munged(cred->user_ns, cred->uid));
+       SET_GID(psinfo->pr_gid, from_kgid_munged(cred->user_ns, cred->gid));
        rcu_read_unlock();
        strncpy(psinfo->pr_fname, p->comm, sizeof(psinfo->pr_fname));
        
index 9bd5612..82bf0ed 100644 (file)
@@ -631,10 +631,10 @@ static int create_elf_fdpic_tables(struct linux_binprm *bprm,
        NEW_AUX_ENT(AT_BASE,    interp_params->elfhdr_addr);
        NEW_AUX_ENT(AT_FLAGS,   0);
        NEW_AUX_ENT(AT_ENTRY,   exec_params->entry_addr);
-       NEW_AUX_ENT(AT_UID,     (elf_addr_t) cred->uid);
-       NEW_AUX_ENT(AT_EUID,    (elf_addr_t) cred->euid);
-       NEW_AUX_ENT(AT_GID,     (elf_addr_t) cred->gid);
-       NEW_AUX_ENT(AT_EGID,    (elf_addr_t) cred->egid);
+       NEW_AUX_ENT(AT_UID,     (elf_addr_t) from_kuid_munged(cred->user_ns, cred->uid));
+       NEW_AUX_ENT(AT_EUID,    (elf_addr_t) from_kuid_munged(cred->user_ns, cred->euid));
+       NEW_AUX_ENT(AT_GID,     (elf_addr_t) from_kgid_munged(cred->user_ns, cred->gid));
+       NEW_AUX_ENT(AT_EGID,    (elf_addr_t) from_kgid_munged(cred->user_ns, cred->egid));
        NEW_AUX_ENT(AT_SECURE,  security_bprm_secureexec(bprm));
        NEW_AUX_ENT(AT_EXECFN,  bprm->exec);
 
@@ -1431,8 +1431,8 @@ static int fill_psinfo(struct elf_prpsinfo *psinfo, struct task_struct *p,
        psinfo->pr_flag = p->flags;
        rcu_read_lock();
        cred = __task_cred(p);
-       SET_UID(psinfo->pr_uid, cred->uid);
-       SET_GID(psinfo->pr_gid, cred->gid);
+       SET_UID(psinfo->pr_uid, from_kuid_munged(cred->user_ns, cred->uid));
+       SET_GID(psinfo->pr_gid, from_kgid_munged(cred->user_ns, cred->gid));
        rcu_read_unlock();
        strncpy(psinfo->pr_fname, p->comm, sizeof(psinfo->pr_fname));
 
index 3349670..994a53e 100644 (file)
@@ -865,8 +865,6 @@ config UIDGID_CONVERTED
 
        # List of kernel pieces that need user namespace work
        # Features
-       depends on BINFMT_ELF = n
-       depends on BINFMT_ELF_FDPIC = n
        depends on UNIX98_PTYS = n
        depends on CGROUPS = n
        depends on MIGRATION = n