最近、Linus Torvalds は、新しいカーネル コードを積極的に開発するよりも、新しいコードを Linux カーネルに取り込んで門番を務めることに主に取り組んでいますが、開発中の Linux 6.4 では、少しコーディングを行っていることに気付きました。
先週述べたように、彼は個人的に Linux 6.4 の x86 メモリ コピー コードをクリーンアップしました。今週、Intel のエンジニアが Linear Address Masking の有効化の一環としてマージしたコードの一部に問題があったため、彼は自分のコードをさらにマージしました。
昨年末の Linux 6.2 デイズの間、Linus は当時の Intel LAM コードをさまざまな技術的問題で拒否しました。その後、Intel は Linux 6.4 用に作り直しました。
今回、Linus は Intel を合併しました。 LAM は Linux 6.4 に組み込まれました。この新しい CPU 機能は、ユーザー空間がメタデータを使用前にマスキングせずにポインターの一部のビット内に格納できるようにします。 Intel LAM は、Arm TBI と同様に、仮想マシン、プロファイリング/サニタイザー/タグ付け、およびその他のアプリケーションに使用できます。しかし、今回は理想的とは言えないコードがいくつかあり、彼は個人的に改良を加えました。
Linus は新しい マージ 金曜日:
私の x86 uaccess アップデート ブランチをマージします。
このリリースでの LAM (「リニア アドレス マスキング」) の更新により、「access_ok()」の実行方法に不満が残りました。実際には、いくつかの小さなバグも含まれていることが判明しました。これはコードのクリーンアップです:
-アドレスをマスクして TASK_SIZE 範囲に対してチェックするのではなく、__user ポインターの符号ビットを使用します。
この部分は get/put_user() 側で既に実行しましたが、’access_ok()’はナイーブな「マスクと範囲チェック」を実行しました。 __access_ok 自体がうまく機能しなかったため、copy_from_user_nmi() が正しくチェックできませんでした。
-64 ビットのみのすべてのコードを 64 ビット バージョンのヘッダー ファイルに移動して、共有 x86 コードを不必要に汚染したり、LAM が動作するように見せたりしないようにします。 32ビットも。
-アドレス マスキングのバグを修正します (問題にはなりません。この場合、修正はバグのあるコードを完全に削除することでした)。
-いくつかの些細なクリーンアップと、access_ok() ルールに関する解説の追加。
したがって、Intel LAM は Linux 6.4 に対応する準備ができており、Torvalds は約 100 を作り直しました。それをクリーンアップするためのコード行。
Linux ユーザー空間で Intel LAM を利用する準備をします。