The following commit has been merged in the linux branch: commit 2bc872036e1c5948b5b02942810bbdd8dbdb9812 Author: Darren Hart dvhltc@us.ibm.com Date: Wed Oct 14 10:12:39 2009 -0700
futex: Check for NULL keys in match_futex
If userspace tries to perform a requeue_pi on a non-requeue_pi waiter, it will find the futex_q->requeue_pi_key to be NULL and OOPS.
Check for NULL in match_futex() instead of doing explicit NULL pointer checks on all call sites. While match_futex(NULL, NULL) returning false is a little odd, it's still correct as we expect valid key references.
Signed-off-by: Darren Hart dvhltc@us.ibm.com Cc: Peter Zijlstra peterz@infradead.org Cc: Ingo Molnar mingo@elte.hu CC: Eric Dumazet eric.dumazet@gmail.com CC: Dinakar Guniguntala dino@in.ibm.com CC: John Stultz johnstul@us.ibm.com Cc: stable@kernel.org LKML-Reference: 4AD60687.10306@us.ibm.com Signed-off-by: Thomas Gleixner tglx@linutronix.de
diff --git a/kernel/futex.c b/kernel/futex.c index 5c88839..06938e5 100644 --- a/kernel/futex.c +++ b/kernel/futex.c @@ -150,7 +150,8 @@ static struct futex_hash_bucket *hash_futex(union futex_key *key) */ static inline int match_futex(union futex_key *key1, union futex_key *key2) { - return (key1->both.word == key2->both.word + return (key1 && key2 + && key1->both.word == key2->both.word && key1->both.ptr == key2->both.ptr && key1->both.offset == key2->both.offset); }