CVE-2026-64281 in Linux
Riassunto
di VulDB • 25/07/2026
Nel kernel Linux, è stata risolta la seguente vulnerabilità:
svcrdma: sveglia i waiters della coda di invio (sq) quando il trasporto viene chiuso.
I thread in attesa all'interno di svc_rdma_sq_wait() su sc_sq_ticket_wait o sc_send_wait possono rimanere bloccati indefinitamente nello stato TASK_UNINTERRUPTIBLE durante la fase di teardown del trasporto, mantenendo i riferimenti a svc_xprt e impedendo l'esecuzione di svc_rdma_free().
Il percorso di chiusura imposta XPT_CLOSE prima di invocare xpo_detach; entrambi i predicati wait_event includono un termine XPT_CLOSE, ma tali predicati vengono rivalutati solo in fase di sveglia. sc_sq_ticket_wait non dispone di un percorso di sveglia guidato dal completamento (completion-driven); viene avanzato esclusivamente tramite il passaggio a catena dei ticket all'interno della stessa svc_rdma_sq_wait(). Senza una sveglia esplicita durante la chiusura, i thread in attesa non osservano mai XPT_CLOSE, mantengono per sempre il riferimento svc_xprt_get e svc_rdma_free() si blocca in attesa che xpt_ref scenda a zero.
Due punti di ingresso della fase di close raggiungono questo trasporto. Il teardown locale esegue svc_rdma_detach() da svc_handle_xprt() -> svc_delete_xprt() -> xpo_detach() su un thread worker. Una disconnessione remota arriva a svc_rdma_cma_handler(), che chiama svc_xprt_deferred_close(): questa funzione imposta XPT_CLOSE e accoda il trasporto, ma non accede ad alcuna coda di attesa RDMA (RDMA waitqueue), pertanto un worker già in attesa all'interno di svc_rdma_sq_wait() non rivaluta mai il proprio predicato. Con tutti i thread in attesa su questo trasporto, nessun thread è disponibile per eseguire anche il teardown locale e il punto di sveglia risulta irraggiungibile.
Viene introdotta la funzione svc_rdma_xprt_deferred_close(), un wrapper leggero svcrdma che chiama svc_xprt_deferred_close() e successivamente sveglia sia sc_sq_ticket_wait che sc_send_wait. Vengono convertiti i produttori svcrdma che chiamavano direttamente svc_xprt_deferred_close(): svc_rdma_cma_handler(), qp_event_handler(), svc_rdma_post_send_err(), svc_rdma_wc_send(), il percorso di drop per sendto, i percorsi di errore per il completamento rw e i percorsi di flush ed errore per read-list in recvfrom.
Viene inoltre eseguita la sveglia su entrambe le code di attesa anche da svc_rdma_detach(). Il percorso sincrono svc_xprt_close() (ENOTCONN backchannel, rimozione del dispositivo tramite svc_rdma_xprt_done) raggiunge detach senza passare attraverso svc_xprt_deferred_close() e quindi non invoca il nuovo helper.
[ cel: aggiunta di svc_rdma_xprt_deferred_close() per completare la correzione ]
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.