• Thomas Gleixner's avatar
    futex: Make unlock_pi more robust · ccf9e6a8
    Thomas Gleixner authored
    The kernel tries to atomically unlock the futex without checking
    whether there is kernel state associated to the futex.
    
    So if user space manipulated the user space value, this will leave
    kernel internal state around associated to the owner task. 
    
    For robustness sake, lookup first whether there are waiters on the
    futex. If there are waiters, wake the top priority waiter with all the
    proper sanity checks applied.
    
    If there are no waiters, do the atomic release. We do not have to
    preserve the waiters bit in this case, because a potentially incoming
    waiter is blocked on the hb->lock and will acquire the futex
    atomically. We neither have to preserve the owner died bit. The caller
    is the owner and it was supposed to cleanup the mess.
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Darren Hart <darren@dvhart.com>
    Cc: Davidlohr Bueso <davidlohr@hp.com>
    Cc: Kees Cook <kees@outflux.net>
    Cc: wad@chromium.org
    Link: http://lkml.kernel.org/r/20140611204237.016987332@linutronix.deSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    ccf9e6a8
futex.c 81.1 KB