lkml.org 
[lkml]   [2010]   [Dec]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[Patch 12/21] Check if the process is an ELF executable
    Validate if the process is an ELF exec. This will be later extended to identify 
    if the task is a native ELF or a compat ELF.

    Signed-off-by: Suzuki K. Poulose <suzuki@in.ibm.com>
    ---
    fs/proc/gencore.c | 31 +++++++++++++++++++++++++++++++
    1 file changed, 31 insertions(+)

    Index: linux-2.6.36-rc7/fs/proc/gencore.c
    ===================================================================
    --- linux-2.6.36-rc7.orig/fs/proc/gencore.c
    +++ linux-2.6.36-rc7/fs/proc/gencore.c
    @@ -23,6 +23,8 @@
    */

    #include <linux/seq_file.h>
    +#include <linux/elf.h>
    +
    #include "internal.h"
    #include "gencore.h"

    @@ -85,6 +87,30 @@ static int release_gencore(struct inode
    }

    /*
    + * Determine whether the task is an ELF executable.
    + * Returns
    + * < 0 - Non-ELF
    + * 0 - Native ELF Executable
    + */
    +static int get_elf_class(struct task_struct *task)
    +{
    + struct elfhdr hdr;
    + int ret = 0;
    +
    + ret = kernel_read(task->mm->exe_file, 0, (char*)&hdr, sizeof(hdr));
    + if (ret < 0)
    + return ret;
    +
    + /* Verify the ELF magic on the exe_file */
    + if (memcmp(hdr.e_ident, ELFMAG, SELFMAG))
    + return -EINVAL;
    + if (elf_check_arch(&hdr))
    + return 0;
    +
    + return -EINVAL;
    +}
    +
    +/*
    * Validate if the call is valid. We also need to prevent >1 open
    * of the same file.
    */
    @@ -93,10 +119,15 @@ static int open_gencore(struct inode *in
    struct task_struct *task = get_proc_task(inode);
    struct core_proc *cp;
    int ret = 0;
    + int elf_class;

    if (!task)
    return -ENOENT;

    + elf_class = get_elf_class(task);
    + if (elf_class < 0)
    + return elf_class;
    +
    mutex_lock(&core_mutex);
    cp = get_core_proc(task);
    if (cp) {

    \
     
     \ /
      Last update: 2010-12-14 11:15    [W:0.024 / U:63.780 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site