From e502a8068bf56319cda42ea17d6525ef629ea47a Mon Sep 17 00:00:00 2001 From: Darren Hart Date: Thu, 12 Mar 2009 00:56:06 -0700 Subject: [PATCH] --- yaml --- r: 137598 b: refs/heads/master c: e8f6386c01a5699c115bdad10271a24076364c97 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/kernel/futex.c | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 59360980df9b..eb96dcd1cb93 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 16f4993f4e9860715918efd4eeac928f8de1218b +refs/heads/master: e8f6386c01a5699c115bdad10271a24076364c97 diff --git a/trunk/kernel/futex.c b/trunk/kernel/futex.c index 6579912ee70c..c980a556f82c 100644 --- a/trunk/kernel/futex.c +++ b/trunk/kernel/futex.c @@ -1567,6 +1567,13 @@ static int futex_lock_pi(u32 __user *uaddr, int fshared, } } + /* + * If fixup_pi_state_owner() faulted and was unable to handle the + * fault, unlock it and return the fault to userspace. + */ + if (ret && (rt_mutex_owner(&q.pi_state->pi_mutex) == current)) + rt_mutex_unlock(&q.pi_state->pi_mutex); + /* Unqueue and drop the lock */ unqueue_me_pi(&q);