| Date | Fri, 30 Jul 2021 15:51:00 +0200 | From | Thomas Gleixner <> | Subject | [patch 53/63] futex: Validate waiter correctly in futex_proxy_trylock_atomic() |
| |
From: Thomas Gleixner <tglx@linutronix.de>
The loop in futex_requeue() has a sanity check for the waiter which is missing in futex_proxy_trylock_atomic(). In theory the key2 check is sufficient, but futexes are cursed so add it for completness and paranoia sake.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de> --- kernel/futex.c | 4 ++++ 1 file changed, 4 insertions(+) --- --- a/kernel/futex.c +++ b/kernel/futex.c @@ -1879,6 +1879,10 @@ futex_proxy_trylock_atomic(u32 __user *p if (!top_waiter) return 0; + /* Ensure that this is a waiter sitting in futex_wait_requeue_pi() */ + if (!top_waiter->rt_waiter || top_waiter->pi_state) + ret = -EINVAL; + /* Ensure we requeue to the expected futex. */ if (!match_futex(top_waiter->requeue_pi_key, key2)) return -EINVAL;
|