Linux kernel是美国Linux基金会发布的开源操作系统Linux所使用的内核。NFSv4 implementation是其中的一个分布式文件系统协议。 Linux Kernel没有确保某些32位参数执行了正确的符号扩展便接受了用户空间的64位寄存器所传送的32位参数,如果向有漏洞的系统调用传送了特制参数便可以导致系统崩溃或获得权限提升。 某些架构的ABI定义函数的调用程序必须将每个参数符号扩展为完整的寄存器宽度,这在Linux系统调用处理中可能导致问题,例如64位系统上的以下调用: asmlinkage long sys_example(unsigned int index) { if (index > 5) return -EINVAL; return example_array[index]; } 调用程序必须将索引符号扩展为64位,而在这种情况下调用程序是用户空间,因此不能依赖符号扩展。
Linux kernel是美国Linux基金会发布的开源操作系统Linux所使用的内核。NFSv4 implementation是其中的一个分布式文件系统协议。 Linux Kernel没有确保某些32位参数执行了正确的符号扩展便接受了用户空间的64位寄存器所传送的32位参数,如果向有漏洞的系统调用传送了特制参数便可以导致系统崩溃或获得权限提升。 某些架构的ABI定义函数的调用程序必须将每个参数符号扩展为完整的寄存器宽度,这在Linux系统调用处理中可能导致问题,例如64位系统上的以下调用: asmlinkage long sys_example(unsigned int index) { if (index > 5) return -EINVAL; return example_array[index]; } 调用程序必须将索引符号扩展为64位,而在这种情况下调用程序是用户空间,因此不能依赖符号扩展。