用户空间中的copy_to / from_user和malloc

时间:2017-02-22 13:37:16

标签: c linux memory-management linux-kernel kernel-module

我很困惑!

我有一个简单的chardev和用户空间应用程序,通过ioctl向chardev发送/接收缓冲区。

当我通过malloc(在堆上)分配缓冲区(在用户空间中)时,我有时会在free()上的用户空间应用程序或内核崩溃中出现分段错误。 每次都是其中之一。

但是,如果我将malloc()替换为alloca()(在堆栈上分配buf),每次都能正常运行。

我在调用memset(buf, 0x42, buf_len)后尝试malloc(以避免编译器优化或写入时的惰性分配/复制) 它没有帮助。

你能解释一下这种行为吗? malloc /我做错了什么问题?

1 个答案:

答案 0 :(得分:0)

感谢您的建议! 问题出在用户空间方面(经典的用户空间内存损坏症状)。 因此,在内核空间中使用malloced缓冲区是安全的< - >用户空间通信。

我只是认为有一些特殊的规则可以将缓冲区放在内核空间中。