lkml.org 
[lkml]   [2008]   [Jul]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 3/3] binfmt_elf_fdpic: Wire up AT_EXECFD, AT_EXECFN, AT_SECURE.
    These auxvec entries are the only ones left unhandled out of the current
    base implementation. This syncs up binfmt_elf_fdpic with linux/auxvec.h
    and current binfmt_elf.

    Signed-off-by: Paul Mundt <lethal@linux-sh.org>

    ---

    fs/binfmt_elf_fdpic.c | 14 +++++++++++++-
    1 files changed, 13 insertions(+), 1 deletions(-)

    diff --git a/fs/binfmt_elf_fdpic.c b/fs/binfmt_elf_fdpic.c
    index bc64f5f..f0dd83c 100644
    --- a/fs/binfmt_elf_fdpic.c
    +++ b/fs/binfmt_elf_fdpic.c
    @@ -25,6 +25,7 @@
    #include <linux/fcntl.h>
    #include <linux/slab.h>
    #include <linux/pagemap.h>
    +#include <linux/security.h>
    #include <linux/highmem.h>
    #include <linux/highuid.h>
    #include <linux/personality.h>
    @@ -562,11 +563,14 @@ static int create_elf_fdpic_tables(struct linux_binprm *bprm,
    }

    /* force 16 byte _final_ alignment here for generality */
    -#define DLINFO_ITEMS 13
    +#define DLINFO_ITEMS 15

    nitems = 1 + DLINFO_ITEMS + (k_platform ? 1 : 0) + \
    (k_base_platform ? 1 : 0) + AT_VECTOR_SIZE_ARCH;

    + if (bprm->interp_flags & BINPRM_FLAGS_EXECFD)
    + nitems++;
    +
    csp = sp;
    sp -= nitems * 2 * sizeof(unsigned long);
    sp -= (bprm->envc + 1) * sizeof(char *); /* envv[] */
    @@ -604,6 +608,12 @@ static int create_elf_fdpic_tables(struct linux_binprm *bprm,
    (elf_addr_t) (unsigned long) u_base_platform);
    }

    + if (bprm->interp_flags & BINPRM_FLAGS_EXECFD) {
    + nr = 0;
    + csp -= 2 * sizeof(unsigned long);
    + NEW_AUX_ENT(AT_EXECFD, bprm->interp_data);
    + }
    +
    nr = 0;
    csp -= DLINFO_ITEMS * 2 * sizeof(unsigned long);
    NEW_AUX_ENT(AT_HWCAP, hwcap);
    @@ -619,6 +629,8 @@ static int create_elf_fdpic_tables(struct linux_binprm *bprm,
    NEW_AUX_ENT(AT_EUID, (elf_addr_t) current->euid);
    NEW_AUX_ENT(AT_GID, (elf_addr_t) current->gid);
    NEW_AUX_ENT(AT_EGID, (elf_addr_t) current->egid);
    + NEW_AUX_ENT(AT_SECURE, security_bprm_secureexec(bprm));
    + NEW_AUX_ENT(AT_EXECFN, bprm->exec);

    #ifdef ARCH_DLINFO
    nr = 0;

    \
     
     \ /
      Last update: 2008-07-28 17:09    [W:0.025 / U:62.796 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site