diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-03-23 20:51:42 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-03-23 20:51:42 -0700 | 
| commit | b81a618dcd3ea99de292dbe624f41ca68f464376 (patch) | |
| tree | c5fbe44f944da9d7dc0c224116be77094d379c8a /arch/x86/kernel/process_64.c | |
| parent | 2f284c846331fa44be1300a3c2c3e85800268a00 (diff) | |
| parent | a9712bc12c40c172e393f85a9b2ba8db4bf59509 (diff) | |
| download | olio-linux-3.10-b81a618dcd3ea99de292dbe624f41ca68f464376.tar.xz olio-linux-3.10-b81a618dcd3ea99de292dbe624f41ca68f464376.zip  | |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6:
  deal with races in /proc/*/{syscall,stack,personality}
  proc: enable writing to /proc/pid/mem
  proc: make check_mem_permission() return an mm_struct on success
  proc: hold cred_guard_mutex in check_mem_permission()
  proc: disable mem_write after exec
  mm: implement access_remote_vm
  mm: factor out main logic of access_process_vm
  mm: use mm_struct to resolve gate vma's in __get_user_pages
  mm: arch: rename in_gate_area_no_task to in_gate_area_no_mm
  mm: arch: make in_gate_area take an mm_struct instead of a task_struct
  mm: arch: make get_gate_vma take an mm_struct instead of a task_struct
  x86: mark associated mm when running a task in 32 bit compatibility mode
  x86: add context tag to mark mm when running a task in 32-bit compatibility mode
  auxv: require the target to be tracable (or yourself)
  close race in /proc/*/environ
  report errors in /proc/*/*map* sanely
  pagemap: close races with suid execve
  make sessionid permissions in /proc/*/task/* match those in /proc/*
  fix leaks in path_lookupat()
Fix up trivial conflicts in fs/proc/base.c
Diffstat (limited to 'arch/x86/kernel/process_64.c')
| -rw-r--r-- | arch/x86/kernel/process_64.c | 8 | 
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c index bd387e8f73b..6c9dd922ac0 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c @@ -501,6 +501,10 @@ void set_personality_64bit(void)  	/* Make sure to be in 64bit mode */  	clear_thread_flag(TIF_IA32); +	/* Ensure the corresponding mm is not marked. */ +	if (current->mm) +		current->mm->context.ia32_compat = 0; +  	/* TBD: overwrites user setup. Should have two bits.  	   But 64bit processes have always behaved this way,  	   so it's not too bad. The main problem is just that @@ -516,6 +520,10 @@ void set_personality_ia32(void)  	set_thread_flag(TIF_IA32);  	current->personality |= force_personality32; +	/* Mark the associated mm as containing 32-bit tasks. */ +	if (current->mm) +		current->mm->context.ia32_compat = 1; +  	/* Prepare the first "return" to user space */  	current_thread_info()->status |= TS_COMPAT;  }  |