我觉得这个问题已经得到解答,但我通过谷歌搜索没有找到任何实现它提供了我需要的保护。
我正在使用 linux 3.2.2。
我希望尽可能安全地将变量从用户空间复制到内核空间。这包括一个结构指针和一个以空结尾的字符串。我如何确保我的结构指针有效?(access_ok on (void*) -1 没有捕捉到它)我希望它基本上是白痴证明......
对于以空结尾的字符串,我不知道长度,并且复制这些以空结尾的字符串的一些函数需要大小。
我觉得这个问题已经得到解答,但我通过谷歌搜索没有找到任何实现它提供了我需要的保护。
我正在使用 linux 3.2.2。
我希望尽可能安全地将变量从用户空间复制到内核空间。这包括一个结构指针和一个以空结尾的字符串。我如何确保我的结构指针有效?(access_ok on (void*) -1 没有捕捉到它)我希望它基本上是白痴证明......
对于以空结尾的字符串,我不知道长度,并且复制这些以空结尾的字符串的一些函数需要大小。
使用ioctl我们应该能够将结构复制到内核空间。我已经使用创建的虚拟 ioctl 成功地将变量复制到内核。
已解决:所以我发现的最佳解决方案实际上是我使用的代码只是放了一个和而不是一个或。
首先检查 ptr 是否为空。然后
access_ok(VERIFY_READ/WRITE,ptr,structsize)
如果这通过了我们的 usr ptr 或 struct 在用户地址空间内。最后使用
int copy_from_user(void* dest, void* src,size_t len)
并确保 destPtr 指向内核中的空间,该空间的大小显然 >= structsize。即使是现在,也不能保证结构中的数据是有用的,或者根本不是你想要的。它只是不会导致内核恐慌的原始数据。所以现在您可以检查结构的每个成员是否有有效数据。有一些更有用的信息
https://www.ibm.com/developerworks/linux/library/l-kernel-memory-access/