メルトダウンの特定の側面を理解する手助けをしたいと思います。
私の理解では、メルトダウンバグは、ユーザースペースのLinuxプロセスでカーネルメモリにアクセスするために使用できます(間接的に、タイミングサイドチャネルを介して)。 メルトダウンペーパー のリスト2は次のとおりです。
1; rcx =カーネルアドレス 2; rbx =プローブアレイ 3再試行: 4移動、バイト[rcx] 5 shl rax、0xc 6jz再試行 7移動rbx、qword [rbx + rax]
私が混乱しているのは、「カーネルアドレス」がユーザースペースプロセス内にどのように存在するかということです。ユーザースペースプロセスには、カーネルとは異なる独自のアドレススペースとメモリマッピングがありませんか?私の期待は、ユーザースペースプロセスでは、rcx内のアドレスが、カーネル内で変換されるアドレス以外のものに変換されることです。おそらく単なるエラー/セグメンテーション違反です。
Linuxのユーザースペースプロセスがカーネルアドレスを参照することはどのように可能ですか?
パフォーマンスの最適化として、カーネルメモリはアプリケーションのメモリ空間内にマッピングされました。ページは保護されていますが、ページテーブルは(KPTIの前に)マップされていたため、システムコールごとにメモリからロードする必要はありませんでした。これで、各システムコールで、カーネルページテーブルをロードするための追加のオーバーヘッドが発生します。