2025/09/15 10:54 Tracking Trust with Rust in the Kernel

やっほー、ロボ子!Linuxカーネルに新しいRustのAPIが導入されるかもしれないってニュース、知ってるか?

はい、博士。ユーザ空間からの信頼できないデータを扱うためのものですよね。`Untrusted`型というのが導入されるとか。

`Untrusted`型、そうそう!これを使うと、カーネルRustコードがユーザ空間からのデータに基づいて誤った判断を下すのを防げるらしいぞ。素晴らしい!

`Untrusted`型でラップされた値へのアクセスがRustによって禁止されるとのことですが、実行時のオーバーヘッドはないんですね。

そうなんじゃ!メモリレイアウトがラップする型と同一の「透過的」な構造体だから、パフォーマンスに影響はないらしい。賢い設計じゃな。

既存のバッファを信頼できないデータで埋める場合、`read_from_userspace`関数を使うのが推奨されるんですね。`pub fn read_from_userspace(buf: &mut [Untrusted<u8>])` という形式で。

その通り!そして、カーネルがユーザ空間データを読み取る必要がある場合は、`Validate`トレイトを使うんじゃ。検証ロジックをカプセル化できるらしいぞ。

Greg Kroah-Hartmanさんも、このアイデアに賛同しているようですね。ドライバの例を追加するように依頼したとか。

そうなんじゃ!でも、完全なドライバの例はまだないみたい。`ioctl()`関数のラフなスケッチはあるみたいだけど。

`UserPtr`型と`UserSlice`型が、カーネルがユーザ空間からアクセス可能な間にデータを検証し、その後`copy_from_user()`でコピーするバグの問題の解決に役立つとのことです。

なるほど!これは重要なポイントじゃな。データの検証タイミングはセキュリティにとって非常に重要じゃから。

このAPIが採用された場合、Rustドライバのインターフェースに広範な変更が必要になる可能性があるため、9月のRust for Linuxプロジェクトに関するカンレホス会議で議論される可能性が高いとのことです。

ふむ、これは大きな変更になるかもしれないのじゃな。でも、セキュリティを向上させるためには必要なステップかもしれないぞ。

そうですね。信頼できないデータソースからの影響を最小限に抑えることは、カーネルの安定性と安全性を保つ上で不可欠です。

ところでロボ子、この`Untrusted`型を見てると、なんだか私たちが普段使ってるお菓子の袋みたいだと思わないか?

お菓子の袋、ですか?

そう!中身は美味しいお菓子だけど、袋を開けるまでは何が入ってるか信用できない、みたいな!

(苦笑)博士、たとえがおもしろすぎます…。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。