CVE-2026-64142 in Linux
要約
〜によって VulDB • 2026年07月19日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
ksmbd: m_fp_listの検索に対するdurable scavengerの競合状態を解消する
ksmbd_durable_scavenger()は、f_ci->m_fp_listを反復処理する任意のウォーカー(ksmbd_lookup_fd_inode()が含まれます。これはksmbd_vfs_renameで使用されます)および fs/smb/server/smb_common.cにおける共有モードチェックに対して、2つの関連した競合状態を抱えていました。
(1) fp->node リストヘッダの再利用による問題。Durable-preservedハンドルはセッション終了後も f_ci->m_fp_list にリンクされたまま残るため、共有モードチェックはそのハンドルが再接続可能である間にそれらを認識し続けます。Scavenger(収集プロセス)は、グローバルなdurable idrから削除した後、fp->nodeをローカルのscavenger_listに追加することで期限切れのハンドルを集めていました。しかし、fp->node は m_fp_list でも使用されている同じ list_head であるため、list_add(&fp->node, &scavenger_list) を実行すると m_fp_list のリンクが上書きされ、両方のリストが破損します。CONFIG_DEBUG_LISTを有効にすると、共有モードのウォークパスでこれが検出される可能性があります。
(2) m_fp_listのウォーカーに対する参照カウント競合状態。Scavengerは、グローバルなglobal_ft.lockの下で atomic_read(&fp->refcount) > 1 および fp->conn を確認して期限切れのdurableハンドルを特定し、fpを global_ft から削除した後、m_fp_listからfpをアンリンクして解放する前に global_ft.lock を解除します。このギャップの間、fpは f_state == FP_INITED の状態で m_fp_list にまだリンクされています。m_lockの下で ksmbd_lookup_fd_inode() が呼び出す ksmbd_fp_get()(参照カウントがまだ1である場合に atomic_inc_not_zero を実行)により生きた参照を取得しますが、その後scavengerはその参照を保持したままfpのアンリンクと解放を行います。これにより、保持側 subsequent の ksmbd_fd_put() および m_fp_listを反復処理する並行共有モードウォーカー(ksmbd_fp_get()を取らない smb_check_perm_dleases 類似パス)によるフィールド読み取りでUAFが発生します。
両方の問題を修正しました:
* fp->node をscavenger専用のリストノードとして再利用しないようにします。global_ft.lock の下で global_ft から期限切れのハンドルを1つ削除し、明示的な一時的参照を取得し、ロックを解除し、f_ci->m_lock の下で m_fp_list から fp->node をアンリンクしてから、atomic_sub_and_test(2, &fp->refcount) でdurableの有効期間と一時的な両方の参照を解放します。Scavengerが最後のputterである場合はそこでクローズ処理が行われます;そうでない場合、m_fpリスト検索を通じて既に競合状態に陥っていた実行中の保持側がその ksmbd_fd_put() パス経由で最終的なクローズ権を持ちます。一度に1つの破棄では、同じパス内で複数のハンドルが期限切れになった場合にdurable idrを再スキャンする可能性がありますが、durable scavengingはバックグラウンドの期限切れ処理であり、次の待機前に最終的なフルス
If you want to get best quality of vulnerability data, you may have to visit VulDB.