1

私たちの製品ではmalloc、メモリ割り当てをmmapのみに依存する実装を使用しています。allocaまた、 ingのフェアユースも行っています。mmapがスタックスペースに予約する必要のある領域を割り当てるという問題が発生しました(したがって、より大きなアロカの1つがmallocされた領域に流出すると、非常に悪いことが起こります)。

プロセスの割り当ての制限は、物理メモリではなく、VMアドレス空間です。プロセスの実行中に/proc/ * / mapsファイルを監視し、mallocが使用可能なアドレス空間を使い果たすのを監視しました。最終的には、スタックのrlimit-set範囲内にアドレスを割り当てることに頼り、最終的には大幅に拡張さallocaれます。

起動時にスタック制限全体を使用して回避allocaしようとしましたが、プラットフォーム間で安定していることが証明されていません(alloca2.6本番マシンで動作しているときに2.4開発ボックスのdメモリにアクセスしようとするとsegfaultsが発生します) 。

実際にアドレス空間を予約する方法はありますか?他に何ができますか?

4

2 に答える 2

0

古いバージョンの heartbeat では、一度に 1Kb を 0xff に memset() する再帰関数を呼び出すことで、スタック領域が確実にコミットされていました。Heartbeat は、必要になる可能性のあるすべてのメモリを mlock() できるようにするためにこれを行いました。

于 2010-07-28T17:03:19.153 に答える
0

これは明らかに、最近文書化されたセキュリティの脆弱性であり、権限昇格のエクスプロイトで使用されています。新しいカーネル バージョンにはパッチが適用されるとされています。

http://www.exploit-db.com/download_pdf/14696/

于 2010-09-07T23:10:43.267 に答える