futex: Do not leak robust list to unprivileged process
authorKees Cook <keescook@chromium.org>
Mon, 19 Mar 2012 23:12:53 +0000 (16:12 -0700)
committerThomas Gleixner <tglx@linutronix.de>
Thu, 29 Mar 2012 09:37:17 +0000 (11:37 +0200)
commitbdbb776f882f5ad431aa1e694c69c1c3d6a4a5b8
tree854b6b5869857d40a02d21bb51b375812bdb2ed0
parentb5174fa3a7f4f8f150bfa3b917c92608953dfa0f
futex: Do not leak robust list to unprivileged process

It was possible to extract the robust list head address from a setuid
process if it had used set_robust_list(), allowing an ASLR info leak. This
changes the permission checks to be the same as those used for similar
info that comes out of /proc.

Running a setuid program that uses robust futexes would have had:
  cred->euid != pcred->euid
  cred->euid == pcred->uid
so the old permissions check would allow it. I'm not aware of any setuid
programs that use robust futexes, so this is just a preventative measure.

(This patch is based on changes from grsecurity.)

Signed-off-by: Kees Cook <keescook@chromium.org>
Cc: Darren Hart <dvhart@linux.intel.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Jiri Kosina <jkosina@suse.cz>
Cc: Eric W. Biederman <ebiederm@xmission.com>
Cc: David Howells <dhowells@redhat.com>
Cc: Serge E. Hallyn <serge.hallyn@canonical.com>
Cc: kernel-hardening@lists.openwall.com
Cc: spender@grsecurity.net
Link: http://lkml.kernel.org/r/20120319231253.GA20893@www.outflux.net
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
kernel/futex.c
kernel/futex_compat.c