使用 Sys::SigAction::timeout_call 不安全吗?
我刚刚读过 Leon Timmermans 的文章 关于基于信号的超时您应该了解什么,我想知道它/如果它适用于使用Sys::SigAction::timeout_call()
。
1)首先,似乎 timeout_call()
使用 longjmp
和不安全信号,因此CERT 安全编码规则SIG32-C适用。
2) 如果监视超时的代码仅包含纯 Perl 代码(即不调用 XS 模块),那么使用 timeout_call
是否安全?
I've just read Leon Timmermans' article What you should know about signal based timeouts and I was wondering how it/if it applies to the use of Sys::SigAction::timeout_call()
.
1) First of all, it seems that timeout_call()
uses longjmp
and unsafe signals, and therefore CERT Secure Coding rule SIG32-C is applicable.
2) Is timeout_call
safe to use if the code being monitored for timeouts only contains pure-perl code (i.e. no calls to XS modules)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
1)
timeout_call()
使用几乎完全相同的习惯用法将系统调用包装在eval/alarm
块中,如 Leon 的示例:So if
set_sig_handler
禁用/覆盖安全信号处理,那么timeout_call
也会。2) 纯 Perl 仍然可以与操作系统进行大量交互,并且每个系统调用响应信号的方式在平台之间可能存在很大差异。所以总的来说答案是否定的。
1)
timeout_call()
uses almost the exact same idiom to wrap a system call in aneval/alarm
block as Leon's example:So if
set_sig_handler
disables/overrides safe signal handling, thentimeout_call
will, too.2) Pure Perl can still have plenty of interaction with the operating system, and how each system call responds to signals can vary widely between platforms. So in general the answer is no.