Linux x86系统调用355在启动时重复运行,除非返回-ENOSYS,否则会导致崩溃

Linux x86系统调用355在启动时重复运行,除非返回-ENOSYS,否则会导致崩溃,linux,linux-kernel,x86,system-calls,Linux,Linux Kernel,X86,System Calls,内核版本:3.14.33 在我添加任何系统调用之前,x86(32位)的最高编号是352。然后,我添加了353-357,只需在arch/x86/syscall/syscall_32.tbl中各添加一行,然后在kernel/*中适当地使用syscall_DEFINEx 问题在于编号为355的系统调用。它在引导时重复运行,如果它没有直接返回-ENOSYS,它会在引导时崩溃内核,并在systemd中使用失败的断言(sd_id128_randomize()返回

内核版本:3.14.33

在我添加任何系统调用之前,x86(32位)的最高编号是352。然后,我添加了353-357,只需在arch/x86/syscall/syscall_32.tbl中各添加一行,然后在kernel/*中适当地使用syscall_DEFINEx

问题在于编号为355的系统调用。它在引导时重复运行,如果它没有直接返回-ENOSYS,它会在引导时崩溃内核,并在systemd中使用失败的断言(sd_id128_randomize()返回<0)。当355直接返回-ENOSYS时,系统将正常引导

我还需要采取其他步骤来“正式”安装系统调用吗?比如增加一些最大值?355是为我搞砸的东西保留的吗


我只跳过了355就解决了这个问题,所以我非常确定这不是我的系统调用实现中的一个bug,因为内核的最新版本似乎包含了额外的系统调用,其中355是
getrandom()
。systemd戳这个系统调用号,查看正在运行的内核是否有内置的随机化器,如果返回值不是ENOSYS,它认为syscall是getrandom(),可能会出错

参考资料:

只是好奇,为什么要实现新的系统调用?如果这不是一个学习练习,那么您应该知道,99.99%的时候,进行新的系统调用是做任何您想做的事情的错误方式。不能掉以轻心。你能提供一个补丁让人们测试并解决这个问题吗?