このウェブページスクリーンショットから、以下の脆弱性に関する重要な情報を取得できます。 1. 脆弱性情報: - タイトル: - 説明:コールバックのキャンセル処理中に 関数が失敗します。これにより、2つのコールバックが互いの実行完了を待ってデッドロックを引き起こすことになり、ロックが導入されます。 2. コード例: - コードスニペット: 関数内で、2つのコールバックが互いの実行完了を待つことでデッドロックが発生する様子を示しています。 3. 解決策: - 解決策: 構造体に という名前の原子型カウンタを追加します。このカウンタは、実行中のすべてのキャンセルリクエストを追跡するために使用されます。BPF タイマーをキャンセルする際、完了していないキャンセルリクエストがないか確認し、必要に応じてエラー(-EDEADLK)を返します。 4. 背景情報: - 背景:以前のバージョンでは、キャンセル状態を追跡するために というブール変数を使用していましたが、この方法では競合状態やデッドロックの原因となる可能性があります。 5. 修正と署名: - 修正: 構造体に という名前の原子型カウンタを追加しました。 - 署名:Kumar Kartikeya Dwivedi およびその他の開発者によって署名されています。 6. レポートとリンク: - レポート:Dohyun Kim および Neel Natu によって報告されました。 - リンク:アップストリームコミットへのリンクが提供されています。 7. Diffstat: - ファイル変更: ファイルで、35行の挿入と3行の削除が発生しました。 8. Diff: - コード差分: ファイル内の 構造体の変更を示しており、 フィールドが追加されています。 これらの情報から、この脆弱性はBPFタイマーのキャンセル処理において、コールバック間の同期が適切に処理されなかったことが原因で発生することが示されています。修正方法として、 構造体に原子型カウンタを追加してキャンセルリクエストを追跡することで、デッドロックを防ぐようにしています。