2017-02-22 60 views
-1

我很困惑!copy_to/from_user和malloc在用户空间

我有发送/经由ioctl从chardev接收缓冲区/简单chardev和用户空间的应用。

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

,如果我取代由alloca()malloc()(在栈上分配的buf)一切工作正常,每次。

另外我试过memset(buf, 0x42, buf_len)之后调用malloc(为了避免编译优化或懒惰分配/拷贝写入) 并且它没有帮助。

能否请您解释一下这样的行为? malloc有什么问题/我做错了什么?

+2

确实需要查看代码来识别问题。 –

+0

可能是缓冲区溢出和未定义的行为。 –

+1

另外两个猜测:你的驱动程序在用户空间释放后尝试访问缓冲区(如果你使用正确的函数,不应该引起内核恐慌);您的驱动程序在另一个进程的上下文中尝试写入用户空间。 – yeputons

回答

0

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

我只是觉得,有一些特殊的规则,把缓冲区上堆到内核空间。