seccomp(2)
可用于严格限制特定进程可以进行的系统调用,包括引入不确定性的系统调用,例如getrandom(2)
和gettimeofday(2)
。有没有办法强制进程执行完全确定性的?
至少,我猜我需要阻止该进程使用RDTSC
.我发现这篇旧博文描述prctl(PR_SET_TSC)
x86_64 上的实际损坏情况。是否有一种现代方法可以解决这个问题,或者是否不可能强制执行完美的确定性执行?
答案1
非决定论有很多来源,而不仅仅是 RDTSC。一方面,如果程序是多线程的,它将能够从调度决策中获取熵,尤其是在 SMP 系统上。如果我们谈论的是 IPC 受到严格限制的单线程程序,那么限制性的 seccomp 监狱可能就可以解决问题。
您始终可以修补内核以修复 RDTSC 缺陷。正如@Gilles 提到的,您可能还需要禁用 ASLR。