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

shmem 메모리를 만들려고 시도하고 나중에 거대한 거친 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

흠 ... 어떻게 SHM_HUGETLB없이 작동하는지 설명 할 수 있습니까? 감사! –

답변

0

이유였습니다 우분투 16.04 거대한 페이지 수 0으로 설정되었다.

$sysctl vm.nr_hugepages 
vm.nr_hugepages = 0 

다른 값으로 변경하여 프로그램이 작동했습니다.

$sysctl -w vm.nr_hugepages=512