从userland复制变量

时间:2012-12-05 04:37:00

标签: c linux kernel kernel-module

我觉得这个问题已得到解答,但我没有通过谷歌搜索发现它提供了我需要的保护。

我正在使用linux 3.2.2。

我希望尽可能安全地将变量从用户空间复制到内核空间。这包括结构指针和空终止字符串。我怎么能确保我的结构指针有效? (access_ok on(void *)-1没有抓住它)我希望它基本上是白痴证明......

对于以null结尾的字符串,我不知道长度,并且复制这些空终止字符串的一些函数需要大小。

2 个答案:

答案 0 :(得分:0)

使用ioctl我们应该能够将结构复制到内核空间。我已成功使用创建的虚拟ioctl将变量复制到内核。

答案 1 :(得分:0)

解决:所以我找到的最佳解决方案实际上是我使用的代码只是放了一个而不是一个或。

首先检查ptr是否为null。 然后

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/