Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Advertisement

Kernel v2.6.26-rc9 /fs/binfmt_elf_fdpic.c

Filename:/fs/binfmt_elf_fdpic.c
Lines Added:11
Lines Deleted:5
Also changed in: (Previous) 2.6.26-rc8  2.6.26-rc7  2.6.26-rc6  2.6.26-rc5-git7  2.6.26-rc5-git6  2.6.26-rc5-git5 
(Following) 2.6.26  2.6.26-git13  2.6.26-git14  2.6.26-git15  2.6.26-git16  2.6.26-git17 

Location
[  2.6.26-rc9
  [  fs
     o  binfmt_elf_fdpic.c

Patch

diff --git a/fs/binfmt_elf_fdpic.c b/fs/binfmt_elf_fdpic.c
index 32649f2..d051a32 100644
--- a/fs/binfmt_elf_fdpic.c
+++ b/fs/binfmt_elf_fdpic.c
@@ -136,8 +136,8 @@ static int elf_fdpic_fetch_phdrs(struct elf_fdpic_params *params,
 
    retval = kernel_read(file, params->hdr.e_phoff,
               (char *) params->phdrs, size);
-   if (retval < 0)
-      return retval;
+   if (unlikely(retval != size))
+      return retval < 0 ? retval : -ENOEXEC;
 
    /* determine stack size for this binary */
    phdr = params->phdrs;
@@ -218,8 +218,11 @@ static int load_elf_fdpic_binary(struct linux_binprm *bprm,
                     phdr->p_offset,
                     interpreter_name,
                     phdr->p_filesz);
-         if (retval < 0)
+         if (unlikely(retval != phdr->p_filesz)) {
+            if (retval >= 0)
+               retval = -ENOEXEC;
             goto error;
+         }
 
          retval = -ENOENT;
          if (interpreter_name[phdr->p_filesz - 1] != '\0')
@@ -245,8 +248,11 @@ static int load_elf_fdpic_binary(struct linux_binprm *bprm,
 
          retval = kernel_read(interpreter, 0, bprm->buf,
                     BINPRM_BUF_SIZE);
-         if (retval < 0)
+         if (unlikely(retval != BINPRM_BUF_SIZE)) {
+            if (retval >= 0)
+               retval = -ENOEXEC;
             goto error;
+         }
 
          interp_params.hdr = *((struct elfhdr *) bprm->buf);
          break;
@@ -384,7 +390,7 @@ static int load_elf_fdpic_binary(struct linux_binprm *bprm,
    }
 
    /* expand the stack mapping to use up the entire allocation granule */
-   fullsize = ksize((char *) current->mm->start_brk);
+   fullsize = kobjsize((char *) current->mm->start_brk);
    if (!IS_ERR_VALUE(do_mremap(current->mm->start_brk, stack_size,
                 fullsize, 0, 0)))
       stack_size = fullsize;


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.