• Carlos Llamas's avatar
    binder: fix hang of unregistered readers · 31643d84
    Carlos Llamas authored
    With the introduction of binder_available_for_proc_work_ilocked() in
    commit 1b77e9dc ("ANDROID: binder: remove proc waitqueue") a binder
    thread can only "wait_for_proc_work" after its thread->looper has been
    marked as BINDER_LOOPER_STATE_{ENTERED|REGISTERED}.
    
    This means an unregistered reader risks waiting indefinitely for work
    since it never gets added to the proc->waiting_threads. If there are no
    further references to its waitqueue either the task will hang. The same
    applies to readers using the (e)poll interface.
    
    I couldn't find the rationale behind this restriction. So this patch
    restores the previous behavior of allowing unregistered threads to
    "wait_for_proc_work". Note that an error message for this scenario,
    which had previously become unreachable, is now re-enabled.
    
    Fixes: 1b77e9dc ("ANDROID: binder: remove proc waitqueue")
    Cc: stable@vger.kernel.org
    Cc: Martijn Coenen <maco@google.com>
    Cc: Arve Hjønnevåg <arve@google.com>
    Signed-off-by: default avatarCarlos Llamas <cmllamas@google.com>
    Link: https://lore.kernel.org/r/20240711201452.2017543-1-cmllamas@google.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    31643d84
binder.c 188 KB