使用 Sys::SigAction::timeout_call 不安全吗?

发布于 2024-12-25 21:35:47 字数 581 浏览 2 评论 0原文

我刚刚读过 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

顾铮苏瑾 2025-01-01 21:35:47

1) timeout_call() 使用几乎完全相同的习惯用法将系统调用包装在 eval/alarm 块中,如 Leon 的示例:

my $ALARM_EXCEPTION = "alarm clock restart";
my $h;
eval {
    $h = set_sig_handler('ALRM', sub { die $ALARM_EXCEPTION }, { });
    alarm 10;
    flock $fh, 2 or die "cannot flock: $!";
    alarm 0;
};
alarm 0;
$SIG{ALRM} = $h;
if ($@ && $@ !~ quotemeta($ALARM_EXCEPTION)) { die }

So if set_sig_handler禁用/覆盖安全信号处理,那么 timeout_call 也会。

2) 纯 Perl 仍然可以与操作系统进行大量交互,并且每个系统调用响应信号的方式在平台之间可能存在很大差异。所以总的来说答案是否定的。

1) timeout_call() uses almost the exact same idiom to wrap a system call in an eval/alarm block as Leon's example:

my $ALARM_EXCEPTION = "alarm clock restart";
my $h;
eval {
    $h = set_sig_handler('ALRM', sub { die $ALARM_EXCEPTION }, { });
    alarm 10;
    flock $fh, 2 or die "cannot flock: $!";
    alarm 0;
};
alarm 0;
$SIG{ALRM} = $h;
if ($@ && $@ !~ quotemeta($ALARM_EXCEPTION)) { die }

So if set_sig_handler disables/overrides safe signal handling, then timeout_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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文