CVE-2026-72221 in Linux
Riassunto
di VulDB • 16/08/2026
Nel kernel Linux, è stata risolta la seguente vulnerabilità:
sunrpc: attendere il callback della fase di handshaking TLS in corso quando l'annullamento subisce una condizione di gara (race condition)
Quando wait_for_completion_interruptible_timeout() in svc_tcp_handshake() restituisce 0 (timeout) o -ERESTARTSYS (segnale) e tls_handshake_cancel() restituisce false, handshake_complete() ha vinto la race per l'annullamento: ha impostato HANDSHAKE_F_REQ_COMPLETED ed è sul punto di invocare svc_tcp_handshake_done(), ma gli effetti collaterali del callback su xpt_flags e su svsk->sk_handshake_done non sono ancora stati applicati.
Il codice corrente legge immediatamente xpt_flags per decidere se la sessione è andata a buon fine. Ne risultano due condizioni di gara (race conditions).
Se il callback ha eseguito set_bit(XPT_TLS_SESSION) ma non ha ancora eseguito clear_bit(XPT_HANDSHAKE), svc_tcp_handshake() rileva una sessione, accoda il trasporto e restituisce il controllo. Successivamente, svc_xprt_received() cancella XPT_BUSY, un thread di lavoro preleva il trasporto, il dispatcher in svc_handle_xprt() osserva che XPT_HANDSHAKE è ancora impostato e xpo_handshake viene invocato una seconda volta. In questo scenario, svc_tcp_handshake() chiama init_completion(&svsk->sk_handshake_done) mentre il callback originale chiama contemporaneamente complete_all(), corrompendo la swait_queue incorporata.
Se il callback ha impostato HANDSHAKE_F_REQ_COMPLETED ma non è ancora entrato in svc_tcp_handshake_done(), svc_tcp_handshake() legge XPT_TLS_SESSION come cancellato e interrompe la connessione, anche se l'handshaking sta per avere successo.
Attendere che il callback applichi le modifiche prima di ispezionare xpt_flags. Il completamento è garantito perché handshake_complete() invoca svc_tcp_handshake_done() in modo incondizionato una volta impostato HANDSHAKE_F_REQ_COMPLETED.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.