From 9fa5ac77e9f9b78e43c321bd58cad5ee4c06a844 Mon Sep 17 00:00:00 2001 From: Darren Hart Date: Fri, 7 Aug 2009 15:20:48 -0700 Subject: [PATCH] --- yaml --- r: 156729 b: refs/heads/master c: 392741e0a4e17c82e3978b7fcbf04291294dc0a1 h: refs/heads/master i: 156727: ea2728f6ad223e38906866baa09b3ec6ef811bc8 v: v3 --- [refs] | 2 +- trunk/kernel/futex.c | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index fe91d52576d1..2784d554027f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4dc88029fd916b860ef063c40180aa604ce93494 +refs/heads/master: 392741e0a4e17c82e3978b7fcbf04291294dc0a1 diff --git a/trunk/kernel/futex.c b/trunk/kernel/futex.c index 8cc3ee1363a0..e18cfbdc7190 100644 --- a/trunk/kernel/futex.c +++ b/trunk/kernel/futex.c @@ -1256,8 +1256,15 @@ static int futex_requeue(u32 __user *uaddr1, int fshared, u32 __user *uaddr2, if (!match_futex(&this->key, &key1)) continue; - WARN_ON(!requeue_pi && this->rt_waiter); - WARN_ON(requeue_pi && !this->rt_waiter); + /* + * FUTEX_WAIT_REQEUE_PI and FUTEX_CMP_REQUEUE_PI should always + * be paired with each other and no other futex ops. + */ + if ((requeue_pi && !this->rt_waiter) || + (!requeue_pi && this->rt_waiter)) { + ret = -EINVAL; + break; + } /* * Wake nr_wake waiters. For requeue_pi, if we acquired the