futex: Validate atomic acquisition in futex_lock_pi_atomic()
authorThomas Gleixner <tglx@linutronix.de>
Tue, 3 Jun 2014 12:27:06 +0000 (12:27 +0000)
committerWilly Tarreau <w@1wt.eu>
Wed, 18 Jun 2014 22:25:58 +0000 (00:25 +0200)
commit523b5a514d29a8fdca8c26b7e41aa7d445e4ab0d
tree5d3868c3755c0bd180b2acfff5ec0ce231b5d30a
parent61b2412260ddff25ec54805df83627980d4c0bf9
futex: Validate atomic acquisition in futex_lock_pi_atomic()

We need to protect the atomic acquisition in the kernel against rogue
user space which sets the user space futex to 0, so the kernel side
acquisition succeeds while there is existing state in the kernel
associated to the real owner.

Verify whether the futex has waiters associated with kernel state.  If
it has, return -EINVAL.  The state is corrupted already, so no point in
cleaning it up.  Subsequent calls will fail as well.  Not our problem.

[ tglx: Use futex_top_waiter() and explain why we do not need to try
   restoring the already corrupted user space state. ]

Signed-off-by: Darren Hart <dvhart@linux.intel.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Will Drewry <wad@chromium.org>
Cc: stable@vger.kernel.org
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
(cherry picked from commit b3eaa9fc5cd0a4d74b18f6b8dc617aeaf1873270)
Signed-off-by: Willy Tarreau <w@1wt.eu>
kernel/futex.c