2017-12-04 20 views
0
cat /proc/sys/kernel/shmmax 
18446744073692774399 

shmemメモリを作成しようとしていて、後でそれをunsigned HUGE Dirty COW脆弱性を上書きします。IPC SysV共有メモリ - shmget()、shmat()が動作しない

どういうわけかMAXMYMEMの割り当てがエラー「メモリを割り当てることができません」を示し、エラーコード12

それが動作しないのはなぜ?

allocate.c

#include <sys/ipc.h> 
#include <sys/shm.h> 
#include <errno.h> 
#include <string.h> 

#define MAXMYMEM 0x200000 

int main(int argc, char **argv) 
{ 
int shID; 
char *myPtr; 
int i; 

    shID = shmget(2409, MAXMYMEM, IPC_CREAT | SHM_HUGETLB | 0666); 
    if (shID >= 0) { 
     myPtr = shmat(shID, 0, 0); 
     if (myPtr==(char *)-1) { 
      perror("shmat"); 
     } else { 
      for (i=0; i<MAXMYMEM; i++) { 
       myPtr[i] = 'A'+i; 
      } 
      getchar(); 
      shmdt(myPtr); 
     } 
    } else { 
     perror("shmget"); 
    } 
} 

アップデート1:

grep -i huge /proc/meminfo 
AnonHugePages: 1714176 kB 
HugePages_Total:  0 
HugePages_Free:  0 
HugePages_Rsvd:  0 
HugePages_Surp:  0 
Hugepagesize:  2048 kB 

アップデート2:

$cat /proc/sys/vm/hugetlb_shm_group 
0 
$uname -a 
Linux 4.4.0-101-generiC#124-Ubuntu SMP Fri Nov 10 18:29:59 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 
+0

'SHM_HUGETLB'フラグを付けずに試してみてください。 –

+0

うん、それはSHM_HUGETLBフラグなしで動作する –

+0

hmmm ..どのようにSHM_HUGETLBなしで動作することを説明できますか?ありがとう! –

答えて

0

理由であることが確認されたUbuntuの16.04巨大なページの数に0に設定した。

$sysctl vm.nr_hugepages 
vm.nr_hugepages = 0 

これを別の値に変更すると、プログラムが機能しました。

$sysctl -w vm.nr_hugepages=512 
関連する問題