exec*パーミッション

MLで質問してみた。素晴らしい回答が帰ってきた。
さすがSmalley氏。
http://marc.theaimsgroup.com/?l=selinux&m=113440812327410&w=2
paxtest(後述)によるデータ付き。
exec*パーミッション(execmem,execstackなど)は,Exec Shieldにプラスすることで,さらにバッファオーバーフロー攻撃耐性を高めるものだとか。
Exec Shieldが無い環境では意味なし。
つまり,
Exec Shield:スタックなどを実行不可にする。
が,mprotectシステムコールで「スタックを実行可」とすると,
Exec Shieldを解除できるようだ。
Exec Shieldの解除を防ぐためにexec*パーミッションがあるわけですな。
根本的な疑問として,
「スタックなどが実行不可なのに,攻撃者はどうやってmprotectを呼ぶか?」
というのがある。
が,「間違ってmprotectを呼んでしまうプログラムによってExec Shieldを解除されることを防止する」ことはできる。