2008年12月24日水曜日

randomize_va_spaceの値

とある理由で2.6.24を採用するディストリビューションとFedora 10を見比べていて気がついたが,Fedora 10では/proc/sys/kernel/randomize_va_spaceに「2」などという数値が設定されている。このrandomize_va_spaceはプロセス空間内の各種データの配置位置をランダム化する機能を有効/無効にするファイルだ。これまでは「0」でランダム化無効,「1」で有効になっていた。ランダム化されるのは,スタックやヒープ,DSO,実行コードとかの配置位置。佐藤さんのブログ記事に詳しく紹介してある。


それで「2」とは何ぞや?と思ったわけだが,どうもカーネル2.6.25以降で設定可能になった「COFIG_COMPAT_BRK」という設定を無効化するためのものらしい。COFIG_COMPAT_BRKはヒープについてだけランダム化を無効にするための設定だ。ランダム化はセキュリティ的に有効だけど,ヒープの場合はランダム化すると古いプログラムの実行に問題が生じることが多く,こうした設定が用意されたのだろう。標準ではCOFIG_COMPAT_BRKは有効になっている。


というわけで,「0」はこれまで通りランダム化無効,「1」はヒープを除いてランダム化有効,「2」はCOFIG_COMPAT_BRKの設定にかかわらず,すべてのランダム化を有効にするということになる。fs/binfmt_elf.cには,


#ifdef arch_randomize_brk
if ((current->flags & PF_RANDOMIZE) && (randomize_va_space > 1))
current->mm->brk = current->mm->start_brk =
arch_randomize_brk(current->mm);
#endif

とあるので,現状では2じゃなくても1より大きければ何でもいいようだけど。

0 件のコメント: