Linux x86 系统调用 355 在启动时重复 运行 并导致崩溃,除非 returns -ENOSYS

Linux x86 syscall 355 is run repeatedly on bootup and causes crash unless returns -ENOSYS

内核版本:3.14.33

在我添加任何系统调用之前,x86(32 位)的最高编号是 352。然后我通过简单地向 arch/x86/syscall/syscall_32.tbl 添加一行然后使用 SYSCALL_DEFINEx 在内核中适当/*.

问题出在编号为 355 的系统调用上。它在启动时重复 运行 并且当它不直接 return -ENOSYS 时,它在启动时崩溃内核并在中断言失败systemd (sd_id128_randomize() returns < 0)。直接355 returns -ENOSYS时,系统启动正常。

我还需要采取其他步骤来 "officially" 安装系统调用吗?喜欢增加一些最大数量? 355 是为我完全搞砸的东西保留的吗?

我设法通过简单地跳过 355 来解决问题,所以我非常确定这不是我的系统调用实现中的错误

似乎更新的内核版本包含额外的系统调用,其中 355 是 getrandom()。 systemd 查看这个系统调用号,看看 运行 内核是否有内置的随机化器,如果 return 不是 ENOSYS,它认为系统调用是 getrandom() 并且可能会出错。

参考资料: http://lxr.free-electrons.com/source/arch/x86/syscalls/syscall_32.tbl http://lwn.net/Articles/606141/