process.cのarch_align_stack()を変更して、モジュロの2番目の引数を次のように増やすことにより、自分のx8632ビットマシンでASLRを「改善」しようとしました。
if (!(current->personality & ADDR_NO_RANDOMIZE) && randomize_va_space)
sp -= get_random_int() % 8192;
return sp & ~0xf;
しかし、これを改ざんしすぎるとカーネルパニックが発生することにすぐに気付きました。そして、それを少し改ざんしただけでもシステムが不安定になるのではないかと思います(運が良ければしばらくは存続するでしょう?)。
これにより、なぜこれが発生するのかについて質問するようになりました(スタックをページ揃えする必要があるのはなぜですか?)。どうやらこれは、(ユーザー "mpe"が述べたように)8 kiBの場合のデフォルトのスタックサイズ(8192バイト)が原因です。それで、拡張によってカーネルのスタックサイズを増やすことによって、この引数(8192)を増やすことができるはずですか?また、スタック自体の場所をランダム化できることも言及されました。
Paxはこれを行いますか?そうでない場合は、なぜですか?
カーネルで指定されているスタックサイズはどのように/どこにありますか?これは32ビットと64ビットで異なりますか?
これについて、32ビットと64ビットの間に違いはありますか?64ビットはまだこのようなものにprocess.cを使用していますか?process_64.cには、このコードに相当するものは何もないようです。