diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c index 67d9b3148c06b62a05989e0914ba42c385186c2c..fa8ea33ab0be1ef56ff78b5908a691676d815e27 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c @@ -871,6 +871,8 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs) elf_prot, elf_flags); if (BAD_ADDR(error)) { send_sig(SIGKILL, current, 0); + retval = IS_ERR((void *)error) ? + PTR_ERR((void*)error) : -EINVAL; goto out_free_dentry; } @@ -900,6 +902,7 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs) TASK_SIZE - elf_ppnt->p_memsz < k) { /* set_brk can never work. Avoid overflows. */ send_sig(SIGKILL, current, 0); + retval = -EINVAL; goto out_free_dentry; }