From: Ingo Molnar <mingo@elte.hu>
Date: Sat, 1 Jul 2006 11:35:46 +0000 (-0700)
Subject: [PATCH] pi-futex: futex_wake() lockup fix
X-Git-Tag: MMI-PSA29.97-13-9~48619
X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=ed6f7b10e657b98b4ba89385d02852c8bdf3980e;p=GitHub%2FMotorolaMobilityLLC%2Fkernel-slsi.git

[PATCH] pi-futex: futex_wake() lockup fix

Fix futex_wake() exit condition bug when handling the robust-list with PI
futexes on them.

(reported by Ulrich Drepper, debugged by the lock validator.)

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Cc: Ulrich Drepper <drepper@redhat.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
---

diff --git a/kernel/futex.c b/kernel/futex.c
index 22aa3c16ca73..15caf93e4a43 100644
--- a/kernel/futex.c
+++ b/kernel/futex.c
@@ -630,8 +630,10 @@ static int futex_wake(u32 __user *uaddr, int nr_wake)
 
 	list_for_each_entry_safe(this, next, head, list) {
 		if (match_futex (&this->key, &key)) {
-			if (this->pi_state)
-				return -EINVAL;
+			if (this->pi_state) {
+				ret = -EINVAL;
+				break;
+			}
 			wake_futex(this);
 			if (++ret >= nr_wake)
 				break;