CVE-2026-64281 in Linux情報

要約

〜によって VulDB • 2026年07月25日

Linuxカーネルにおいて、以下の脆弱性が修正されました:

svcrdma: トランスポートがクローズされた際にsqの待機スレッドをウェイクアップする

svc_rdma_sq_wait()内でsc_sq_ticket_waitまたはsc_send_waitに駐車されているスレッドは、トランスポートの分解(teardown)中にTASK_UNINTERRUPTible状態で無限にハングし、svc_xprt参照をピン留めしたままsvc_rdma_free()をブロックすることがあります。

クローズパスではxpo_detachを呼び出す前にXPT_CLOSEを設定しますが、両方のwait_event述語にはXPT_CLOSEの項が含まれています。ただし、述語はウェイクアップ時のみ再評価されます。sc_sq_ticket_waitには完了駆動型のウェイクアップパスがなく、svc_rdma_sq_wait()内部でのチェーンされたチケット引き渡しによってのみ進行します。クローズ時に明示的なウェイクアップがないため、駐車されているスレッドはXPT_CLOSEを観測できず、svc_xprt_get参照を永遠に保持したままになり、xpt_refが0になるのを待ってsvc_rdma_free()がブロックされます。

このトランスポートには2つのクローズエントリポイントがあります。ローカル分解では、ワーカースレッド上でsvc_handle_xprt() -> svc_delete_xprt() -> xpo_detach()からsvc_rdma_detach()が実行されます。リモート切断はsvc_rdma_cma_handler()で受信され、ここでsvc_xprt_deferred_close()を呼び出します:これはXPT_CLOSEを設定しトランスポートをキューに入れますが、RDMAの待機キューにはアクセスしないため、すでにsvc_rdma_sq_wait()に駐車されているワーカーはその述語を再評価しません。このトランスポート上ですべてのワーカーが駐車されると、ローカル分解を実行できるスレッドが存在せず、そのウェイクアップサイトは到達不能になります。

svc_xprt_deferred_close()を呼び出した後にsc_sq_ticket_waitとsc_send_waitの両方をウェイクアップする薄いsvcrdmaラッパーであるsvc_rdma_xprt_deferred_close()を導入します。svc_xprt_deferred_close()を直接呼び出していたsvcrdmaのプロデューサーを変換します:svc_rdma_cma_handler()、qp_event_handler()、svc_rdma_post_send_err()、svc_rdma_wc_send()、sendtoドロップパス、rw完了エラーパス、recvfromフラッシュおよびread-listエラーパス。

また、svc_rdma_detach()からも両方の待機キューをウェイクアップします。同期型のsvc_xprt_close()パス(バックチャネルのENOTCONN、svc_rdma_xprt_done経由でのデバイス削除)はsvc_xprt_deferred_close()を経由せずにdetachに到達するため、新しいヘルパー関数は呼び出されません。

[ cel: 修正を完了するためにsvc_rdma_xprt_deferred_close()を追加 ]

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

責任者

Linux

予約する

2026年07月19日

モデレーション

承諾済み

エントリ

VDB-383077

EPSS

0.00000

アクティビティ

低い

ソース

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!