diff options
Diffstat (limited to 'arch/x86/ia32/ia32_aout.c')
| -rw-r--r-- | arch/x86/ia32/ia32_aout.c | 35 | 
1 files changed, 9 insertions, 26 deletions
diff --git a/arch/x86/ia32/ia32_aout.c b/arch/x86/ia32/ia32_aout.c index d511d951a05..07b3a68d2d2 100644 --- a/arch/x86/ia32/ia32_aout.c +++ b/arch/x86/ia32/ia32_aout.c @@ -119,9 +119,7 @@ static void set_brk(unsigned long start, unsigned long end)  	end = PAGE_ALIGN(end);  	if (end <= start)  		return; -	down_write(¤t->mm->mmap_sem); -	do_brk(start, end - start); -	up_write(¤t->mm->mmap_sem); +	vm_brk(start, end - start);  }  #ifdef CORE_DUMP @@ -296,8 +294,7 @@ static int load_aout_binary(struct linux_binprm *bprm, struct pt_regs *regs)  	/* OK, This is the point of no return */  	set_personality(PER_LINUX); -	set_thread_flag(TIF_IA32); -	current->mm->context.ia32_compat = 1; +	set_personality_ia32(false);  	setup_new_exec(bprm); @@ -332,9 +329,7 @@ static int load_aout_binary(struct linux_binprm *bprm, struct pt_regs *regs)  		pos = 32;  		map_size = ex.a_text+ex.a_data; -		down_write(¤t->mm->mmap_sem); -		error = do_brk(text_addr & PAGE_MASK, map_size); -		up_write(¤t->mm->mmap_sem); +		error = vm_brk(text_addr & PAGE_MASK, map_size);  		if (error != (text_addr & PAGE_MASK)) {  			send_sig(SIGKILL, current, 0); @@ -373,9 +368,7 @@ static int load_aout_binary(struct linux_binprm *bprm, struct pt_regs *regs)  		if (!bprm->file->f_op->mmap || (fd_offset & ~PAGE_MASK) != 0) {  			loff_t pos = fd_offset; -			down_write(¤t->mm->mmap_sem); -			do_brk(N_TXTADDR(ex), ex.a_text+ex.a_data); -			up_write(¤t->mm->mmap_sem); +			vm_brk(N_TXTADDR(ex), ex.a_text+ex.a_data);  			bprm->file->f_op->read(bprm->file,  					(char __user *)N_TXTADDR(ex),  					ex.a_text+ex.a_data, &pos); @@ -385,26 +378,22 @@ static int load_aout_binary(struct linux_binprm *bprm, struct pt_regs *regs)  			goto beyond_if;  		} -		down_write(¤t->mm->mmap_sem); -		error = do_mmap(bprm->file, N_TXTADDR(ex), ex.a_text, +		error = vm_mmap(bprm->file, N_TXTADDR(ex), ex.a_text,  				PROT_READ | PROT_EXEC,  				MAP_FIXED | MAP_PRIVATE | MAP_DENYWRITE |  				MAP_EXECUTABLE | MAP_32BIT,  				fd_offset); -		up_write(¤t->mm->mmap_sem);  		if (error != N_TXTADDR(ex)) {  			send_sig(SIGKILL, current, 0);  			return error;  		} -		down_write(¤t->mm->mmap_sem); -		error = do_mmap(bprm->file, N_DATADDR(ex), ex.a_data, +		error = vm_mmap(bprm->file, N_DATADDR(ex), ex.a_data,  				PROT_READ | PROT_WRITE | PROT_EXEC,  				MAP_FIXED | MAP_PRIVATE | MAP_DENYWRITE |  				MAP_EXECUTABLE | MAP_32BIT,  				fd_offset + ex.a_text); -		up_write(¤t->mm->mmap_sem);  		if (error != N_DATADDR(ex)) {  			send_sig(SIGKILL, current, 0);  			return error; @@ -476,9 +465,7 @@ static int load_aout_library(struct file *file)  			error_time = jiffies;  		}  #endif -		down_write(¤t->mm->mmap_sem); -		do_brk(start_addr, ex.a_text + ex.a_data + ex.a_bss); -		up_write(¤t->mm->mmap_sem); +		vm_brk(start_addr, ex.a_text + ex.a_data + ex.a_bss);  		file->f_op->read(file, (char __user *)start_addr,  			ex.a_text + ex.a_data, &pos); @@ -490,12 +477,10 @@ static int load_aout_library(struct file *file)  		goto out;  	}  	/* Now use mmap to map the library into memory. */ -	down_write(¤t->mm->mmap_sem); -	error = do_mmap(file, start_addr, ex.a_text + ex.a_data, +	error = vm_mmap(file, start_addr, ex.a_text + ex.a_data,  			PROT_READ | PROT_WRITE | PROT_EXEC,  			MAP_FIXED | MAP_PRIVATE | MAP_DENYWRITE | MAP_32BIT,  			N_TXTOFF(ex)); -	up_write(¤t->mm->mmap_sem);  	retval = error;  	if (error != start_addr)  		goto out; @@ -503,9 +488,7 @@ static int load_aout_library(struct file *file)  	len = PAGE_ALIGN(ex.a_text + ex.a_data);  	bss = ex.a_text + ex.a_data + ex.a_bss;  	if (bss > len) { -		down_write(¤t->mm->mmap_sem); -		error = do_brk(start_addr + len, bss - len); -		up_write(¤t->mm->mmap_sem); +		error = vm_brk(start_addr + len, bss - len);  		retval = error;  		if (error != start_addr + len)  			goto out;  |