fdpic: check that the size returned by kernel_read() is what we asked for
Check that the size of the read returned by kernel_read() is what we asked for. If it isn't, then reject the binary as being a badly formatted. Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
76308da189
commit
e1d2c8b69a
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue