2010-11-26 2 views
1

최근에 msg120에 관한 질문을 만났습니다.msgget이 악의적 일 수 있습니까?

while(1) 
{ 
    msqid = msgget(IPC_PRIVATE,IPC_CREAT); 
    if(msqid<0) 
      break; 
    printf("msqid=%d\n",msqid); 
} 

곧 커널의 모든 msqid를 사용합니다.

msgget이 커널 지속성이므로 다음에 프로세스가 실행되고 ENOSPC를 사용하여 종료됩니다.

sysconf를 구성하여 문제가 나 빠지지 만. 악의적 인 코드가 계속 실행되면 다시 구성해야합니다.

내 의견에 심각한 누수가 있고 다른 프로세스가 msqid가 부족합니다.

어떻게 시스템 관리자가이를 피할 수 있습니까?

답변

3

모든 SysV IPC 인터페이스 (공유 메모리, 세마포어 등)는 다른 많은 문제들 중에서도 가장 나쁜 것은 나쁜 모든 작업이 커널 공간으로의 호출을 필요로하는 설계. 가능한 경우 이러한 인터페이스를 포기하고 동등한 POSIX 대체품 (메시지 대기열의 경우 mq_*)을 사용하십시오.

0

top 및 strace를 사용하여 메시지 대기열을 생성하고 해당 프로세스를 종료하는 프로세스를 찾습니다. (이것은 리눅스를 가정하고, 다른 유닉스는 동등한 도구를 가지고있다)

관련 문제