X-Git-Url: http://git.cascardo.info/?a=blobdiff_plain;f=fs%2Fbinfmt_elf.c;h=a7a28110dc80aa9df1e700d9c24aa297161ab996;hb=fb36e90736938d50fdaa1be7afdb21608d402c2b;hp=81381cc0dd177f5f891234a9b065c78a2eec1714;hpb=aaa36d3a98e20b858438eb16cd5c81f27be6dfd5;p=cascardo%2Flinux.git diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c index 81381cc0dd17..a7a28110dc80 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c @@ -96,10 +96,9 @@ static int set_brk(unsigned long start, unsigned long end) start = ELF_PAGEALIGN(start); end = ELF_PAGEALIGN(end); if (end > start) { - unsigned long addr; - addr = vm_brk(start, end - start); - if (BAD_ADDR(addr)) - return addr; + int error = vm_brk(start, end - start); + if (error) + return error; } current->mm->start_brk = current->mm->brk = end; return 0; @@ -629,7 +628,7 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex, /* Map the last of the bss segment */ error = vm_brk(elf_bss, last_bss - elf_bss); - if (BAD_ADDR(error)) + if (error) goto out; } @@ -1176,8 +1175,11 @@ static int load_elf_library(struct file *file) len = ELF_PAGESTART(eppnt->p_filesz + eppnt->p_vaddr + ELF_MIN_ALIGN - 1); bss = eppnt->p_memsz + eppnt->p_vaddr; - if (bss > len) - vm_brk(len, bss - len); + if (bss > len) { + error = vm_brk(len, bss - len); + if (error) + goto out_free_ph; + } error = 0; out_free_ph: @@ -2273,7 +2275,7 @@ static int elf_core_dump(struct coredump_params *cprm) goto end_coredump; /* Align to page */ - if (!dump_skip(cprm, dataoff - cprm->written)) + if (!dump_skip(cprm, dataoff - cprm->pos)) goto end_coredump; for (i = 0, vma = first_vma(current, gate_vma); vma != NULL;