Linux 6.3 に存在する潜在的に厄介なオープンソース NVIDIA「Nouveau」ドライバーのバグの続報として、この問題は解明されたと考えられており、この問題に対処するパッチが保留中であると考えられています。
このカーネル グラフィックス ドライバー内の解放後の使用の問題のため、現在の Linux 6.3 安定版シリーズで Nouveau を使用しないようにするための警告が数日前に送信されました。 use-after-free はカーネル メモリの破損につながる可能性があり、さらにはセキュリティ上の問題になる可能性があることは言うまでもなく、ファイル システムの破損やその他のシステムの問題を引き起こす可能性があります。
Red Hat の David Airlie 氏は、1 か月前の 問題を解決できたと信じています。バグレポート。 Airlie は昨日修正案としてパッチを投稿しました。これまでのところ、Red Hat の Nouveau 開発者 Karol Herbst 氏と、以前はこの問題に悩まされていた別のユーザーの両方が、解放後の使用の問題は現在回避されていると述べています。
Airlie は、パッチを dri-develに投稿するときに説明しました。>:
“これは次のようです以前から存在していましたが、9bff18d13473a9fdf81d5158248472a9d8ecf2bd 以降はより顕著になりました (drm/ttm: BO クリーンアップ ワーカーごとに使用)
私の分析:
2 つのスレッドが実行されており、1 つはフェンスに信号を送信する irq で、dma_fence_signal_timestamp_locked で実行されています。 DMA_FENCE_FLAG_SIGNALLED_BIT 設定は完了しましたが、まだコールバックに到達していません。nouveau_cli_work_ready の 2 番目のスレッドでは、フェンスにシグナルが送信されたことを確認し、フェンスを配置し、オブジェクトをクリーンアップして、作業項目を解放します。コールバックが含まれています。
スレッド 1 が再び実行され、コールバックを呼び出そうとし、解放後の使用が発生します。
提案された修正:
nouveau_cli_work_ready でフェンス シグナル チェックをロックするしたがって、コールバックが完了するか、メモリが解放されます。」
数行のコードで、問題はおそらく解決されます。
現時点では、パッチはまだメーリング リストに残っていますが、おそらくメインライン カーネルに送信される次の DRM 修正ラウンドに送信される予定です。