Grsecurity プロジェクトの開発者
パッチをテストしているときに、開発者は、ビルド時にコンパイラがコードと定義の混合に関する警告を表示することに気付きました (構造体はコードの後に定義され、既存の変数に値が割り当てられています)。
int インデックス = n;
if (n < HBP_NUM) { インデックス = array_index_nospec(インデックス, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[インデックス];
ライナスは受け入れました
if (n < HBP_NUM) { int インデックス = array_index_nospec(n, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[インデックス];
4.4 月には、この修正は安定版カーネル ブランチ 4.9、4.14、4.19、5.2、および XNUMX にも移植されました。 安定版ブランチのメンテナもこの警告に遭遇し、Linus のマスター ブランチで既に修正されているかどうかを確認する代わりに、自分たちで修正を加えました。 問題は、深く考えずに、ただ単に
int インデックス = n;
if (n < HBP_NUM ){ struct perf_event *bp = thread->ptrace_bps[index];
インデックス = array_index_nospec(インデックス, HBP_NUM);
出所: オープンネット.ru