2010-12-31 9 views
3

すべて 私はこのcppコードを書いて、スタックとヘッドをテストします。そして、私はLinuxがその出来事を妨げないことを知っています。 (Linux devlinux11 2.6.9-78.ELsmp#1 SMP Wed 7月9日15:39:47 EDT 2008 i686 i686 i386 GNU/Linux gccバージョン3.4.6 20060404(Red Hat 3.4.6-10) ありそのイベントを防ぐ方法はありますか?Linuxはスタックとヒープの相互増殖を防ぎますか?

#include <iostream> 
using namespace std; 
const int _1_m = 10 * 1024 * 1024; 
const int _1_k = 1024 * 110; 

void testStack(); 

int main(int argc, char** argv) 
{ 

    char* cur = (char*)calloc(_1_m, 1); 
    char* prev = 0; 
    while(cur != 0) 
    { 
     prev = cur; 
     cur = (char*)calloc(_1_m, 1); 
    } 

    cout << "Hi, Da:" << endl; 

    for (int i=0; i< _1_m; i++) 
    { 
     if (prev[i]) 
     { 
      cout << "Nothing to say....." << endl; 
      break; 
     } 

    } 

    cout << "[God is tesing you ......]" << endl; 

    testStack(); 

    for (int i=0; i< _1_m; i++) 
    { 
     if (prev[i]) 
     { 
      cout << "You're a super man!!!" << endl; 
      return 0; 
     } 

    } 

    cout<< " You're a bad guy!!!!!" << endl; 
    return 0; 
} 
void testStack() 
{ 
char a1[_1_k] = {0}; 
char a2[_1_k] = {0}; 
char a3[_1_k] = {0}; 
char a4[_1_k] = {0}; 
char a5[_1_k] = {0}; 
char a6[_1_k] = {0}; 
char a7[_1_k] = {0}; 
char a8[_1_k] = {0}; 
char a9[_1_k] = {0}; 
char a10[_1_k] = {0}; 
char a11[_1_k] = {0}; 
char a12[_1_k] = {0}; 
char a13[_1_k] = {0}; 
char a14[_1_k] = {0}; 
char a15[_1_k] = {0}; 
char a16[_1_k] = {0}; 
char a17[_1_k] = {0}; 
char a18[_1_k] = {0}; 
char a19[_1_k] = {0}; 
char a20[_1_k] = {0}; 
char a21[_1_k] = {0}; 
char a22[_1_k] = {0}; 
char a23[_1_k] = {0}; 
char a24[_1_k] = {0}; 
char a25[_1_k] = {0}; 
char a26[_1_k] = {0}; 
char a27[_1_k] = {0}; 
char a28[_1_k] = {0}; 
char a29[_1_k] = {0}; 
char a30[_1_k] = {0}; 
char a31[_1_k] = {0}; 
char a32[_1_k] = {0}; 
char a33[_1_k] = {0}; 
char a34[_1_k] = {0}; 
char a35[_1_k] = {0}; 
char a36[_1_k] = {0}; 
char a37[_1_k] = {0}; 
char a38[_1_k] = {0}; 
char a39[_1_k] = {0}; 
char a40[_1_k] = {0}; 
char a41[_1_k] = {0}; 
char a42[_1_k] = {0}; 
char a43[_1_k] = {0}; 
char a44[_1_k] = {0}; 
char a45[_1_k] = {0}; 
char a46[_1_k] = {0}; 
char a47[_1_k] = {0}; 
char a48[_1_k] = {0}; 
char a49[_1_k] = {0}; 
char a50[_1_k] = {0}; 
char a51[_1_k] = {0}; 
char a52[_1_k] = {0}; 
char a53[_1_k] = {0}; 
char a54[_1_k] = {0}; 
char a55[_1_k] = {0}; 
char a56[_1_k] = {0}; 
char a57[_1_k] = {0}; 
char a58[_1_k] = {0}; 
char a59[_1_k] = {0}; 
char a60[_1_k] = {0}; 
char a61[_1_k] = {0}; 
char a62[_1_k] = {0}; 
char a63[_1_k] = {0}; 
char a64[_1_k] = {0}; 
char a65[_1_k] = {0}; 
char a66[_1_k] = {0}; 
char a67[_1_k] = {0}; 
char a68[_1_k] = {0}; 
char a69[_1_k] = {0}; 
char a70[_1_k] = {0}; 
char a71[_1_k] = {0}; 
char a72[_1_k] = {0}; 
char a73[_1_k] = {0}; 
char a74[_1_k] = {0}; 
char a75[_1_k] = {0}; 
char a76[_1_k] = {0}; 
char a77[_1_k] = {0}; 
char a78[_1_k] = {0}; 
char a79[_1_k] = {0}; 
char a80[_1_k] = {0}; 
char a81[_1_k] = {0}; 
char a82[_1_k] = {0}; 
char a83[_1_k] = {0}; 
char a84[_1_k] = {0}; 
char a85[_1_k] = {0}; 
char a86[_1_k] = {0}; 
char a87[_1_k] = {0}; 
char a88[_1_k] = {0}; 
char a89[_1_k] = {0}; 
char a90[_1_k] = {0}; 
char a91[_1_k] = {0}; 
char a92[_1_k] = {0}; 
char a93[_1_k] = {0}; 
char a94[_1_k] = {0}; 
char a95[_1_k] = {0}; 
char a96[_1_k] = {0}; 
char a97[_1_k] = {0}; 
char a98[_1_k] = {0}; 
char a99[_1_k] = {0}; 
char a100[_1_k] = {0}; 
for (int i =0 ; i < _1_k; i++) 
{ 
    a100[i] = 1; 
} 
} 

答えて

4

ご使用のLinuxのバージョンが古いか、維持されていません。これはXorgのセキュリティ上の欠陥が導入されたため、最近のリリースで修正されています。あなたのディストリビューションがこのパッチをバックポートしていない場合は、そのパッチから離れてください。

は欠陥を説明するためのパッチ、または http://www.invisiblethingslab.com/resources/misc-2010/xorg-large-memory-attacks.pdfためhttp://git.kernel.org/linus/320b2b8de12698082609ebbc1a17165727f4c893を参照します。

1

は、Linuxでは、あなたはそれぞれulimit -sulimit -mを経由して、プロセスごとのスタックとヒープのサイズを制限することができます。

関連する問題