Может ли msgget быть вредоносным? - PullRequest
1 голос
/ 26 ноября 2010

Я недавно встречался с таким вопросом о msgget .

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

Вскоре он потребляет все msqid в ядре.

Поскольку msgget являетсяпостоянный, в следующий раз процесс запускается и завершается с ENOSPC без перерыва.

Хотя настройка sysconf позволяет решить проблему.но я должен переконфигурировать снова и снова, если вредоносный код продолжает работать.

Это серьезная утечка, по моему мнению, и заставить другой процесс испытывать недостаток в msqid.

Как может системный администратор избежать этого?

Ответы [ 2 ]

3 голосов
/ 26 ноября 2010

Все интерфейсы SysV IPC (разделяемая память, семафоры и т. Д.) Имеют такую ​​же проблему, как и многие другие проблемы, наихудшей из которых является чудовищная производительность из-за плохой конструкции, когда каждая операция требует вызова в пространство ядра.Если можете, откажитесь от этих интерфейсов и используйте эквивалентные замены POSIX (mq_* для очередей сообщений).

0 голосов
/ 26 ноября 2010

Используйте top и strace, чтобы найти процесс, который продолжает создавать очереди сообщений, и завершить этот процесс. (предполагается, что Linux; другие Unix-ы имеют эквивалентные инструменты)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...