msgget可以是恶意的吗?

时间:2010-11-26 11:55:31

标签: c linux msg

我最近遇到了关于 msgget 的问题。

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

很快,它会消耗内核中的所有msqid。

因为msgget是内核持久性的,所以下次进程运行并立即退出ENOSPC。

虽然配置sysconf来解决问题。但如果恶意代码继续运行,我应该反复重新配置。

在我看来,这是一种严重的泄漏,并使其他过程缺乏msqid。

系统管理员如何避免这种情况?

2 个答案:

答案 0 :(得分:3)

所有SysV IPC接口(共享内存,信号量等)在许多其他问题中都存在同样的问题,其中最糟糕的是由于设计不良而导致性能恶劣,其中每个操作都需要调用内核空间。如果可以,请放弃这些接口并使用等效的POSIX替换(mq_*作为消息队列。)

答案 1 :(得分:0)

使用top和strace查找不断创建消息队列并终止该进程的进程。 (这假设是linux;其他unix拥有相同的工具)