proc: avoid information leaks to non-privileged processes
By using the same test as is used for /proc/pid/maps and /proc/pid/smaps, only allow processes that can ptrace() a given process to see information that might be used to bypass address space layout randomization (ASLR). These include eip, esp, wchan, and start_stack in /proc/pid/stat as well as the non-symbolic output from /proc/pid/wchan. ASLR can be bypassed by sampling eip as shown by the proof-of-concept code at http://code.google.com/p/fuzzyaslr/ As part of a presentation (http://www.cr0.org/paper/to-jt-linux-alsr-leak.pdf) esp and wchan were also noted as possibly usable information leaks as well. The start_stack address also leaks potentially useful information. Cc: Stable Team <stable@kernel.org> Signed-off-by: Jake Edge <jake@lwn.net> Acked-by: Arjan van de Ven <arjan@linux.intel.com> Acked-by: "Eric W. Biederman" <ebiederm@xmission.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
7fdf523067
commit
f83ce3e6b0
@@ -322,7 +322,10 @@ static int proc_pid_wchan(struct task_struct *task, char *buffer)
|
||||
wchan = get_wchan(task);
|
||||
|
||||
if (lookup_symbol_name(wchan, symname) < 0)
|
||||
return sprintf(buffer, "%lu", wchan);
|
||||
if (!ptrace_may_access(task, PTRACE_MODE_READ))
|
||||
return 0;
|
||||
else
|
||||
return sprintf(buffer, "%lu", wchan);
|
||||
else
|
||||
return sprintf(buffer, "%s", symname);
|
||||
}
|
||||
|
Reference in New Issue
Block a user