diff options
Diffstat (limited to 'fs/binfmt_elf.c')
| -rw-r--r-- | fs/binfmt_elf.c | 28 | 
1 files changed, 14 insertions, 14 deletions
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c index b7c1603cd4b..7c1e65d5487 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c @@ -501,22 +501,22 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,  		}  	} -	/* -	 * Now fill out the bss section.  First pad the last page up -	 * to the page boundary, and then perform a mmap to make sure -	 * that there are zero-mapped pages up to and including the  -	 * last bss page. -	 */ -	if (padzero(elf_bss)) { -		error = -EFAULT; -		goto out_close; -	} +	if (last_bss > elf_bss) { +		/* +		 * Now fill out the bss section.  First pad the last page up +		 * to the page boundary, and then perform a mmap to make sure +		 * that there are zero-mapped pages up to and including the +		 * last bss page. +		 */ +		if (padzero(elf_bss)) { +			error = -EFAULT; +			goto out_close; +		} -	/* What we have mapped so far */ -	elf_bss = ELF_PAGESTART(elf_bss + ELF_MIN_ALIGN - 1); +		/* What we have mapped so far */ +		elf_bss = ELF_PAGESTART(elf_bss + ELF_MIN_ALIGN - 1); -	/* Map the last of the bss segment */ -	if (last_bss > elf_bss) { +		/* Map the last of the bss segment */  		down_write(¤t->mm->mmap_sem);  		error = do_brk(elf_bss, last_bss - elf_bss);  		up_write(¤t->mm->mmap_sem);  |