在信号中也会发生竞争条件。程序可以注册处理各种类型的信号,但是信号可能会在最不合适的时候出现,包括您正在处理另一个信号的时候。在一个信号处理器内部,您通常应该做的一件事是,设置一个将在以后处理的全局标记。还有几个操作可以在信号中安全地完成,但不是很多,而且在处理信号之前,您必须对它有深入的理解。那是因为只有一些系统调用可以安全地调用内部信号:只有可重入的(re-entrant)或者不被信号中断的调用才可以被安全地调用。您可以调用库函数,但是只有极少数函数是被安全调用的;在一个信号处理器中调用大部分函数是出问题的主要原因,比如 free() 或者 syslog()。要获得更多资料,请阅读 Michal Zalewski 的名为 “Delivering Signals for Fun and Profit”的一篇文章。但是您最好只在一个信号处理器中设置标记(别的什么都不做),这胜过尝试创建复杂的处理器。
Kris Kennaway's posting to Bugtraq about temporary files(2000 年 12 月)深入讨论了临时文件。
Michael Zalewski 的 Delivering Signals for Fun and Profit: Understanding, exploiting and preventing signal-handling related vulnerabilities(2001 年 5 月)描述了信号处理,这是引入竞争条件的另一种方式。
Michal Zalewski 的 Problems with mkstemp() 讨论了源于自动清除临时目录的安全性问题。
Security section of the GNOME Programming Guidelines 给出了关于如何创建临时文件的合理建议。
Single Unix Specification version 3, 2004 版,a.k.a. IEEE Std 1003.1,2004 版,是对“类 UNIX”系统必须做什么的通用说明。
Solar Designer 的 Linux kernel patch from the OpenWall project 引入了一些有趣的安全对策,包括预防有限的一组文件系统竞争条件攻击的附加访问限制。更具体地讲,它限制用户使用在某些目录下创建的不受信任的符号链接,并限制用户创建指向他们不能读写访问的文件的硬链接。