我很困惑!
我有一个简单的chardev和用户空间应用程序,通过ioctl
向chardev发送/接收缓冲区。
当我通过malloc
(在堆上)分配缓冲区(在用户空间中)时,我有时会在free()
上的用户空间应用程序或内核崩溃中出现分段错误。
每次都是其中之一。
但是,如果我将malloc()
替换为alloca()
(在堆栈上分配buf),每次都能正常运行。
我在调用memset(buf, 0x42, buf_len)
后尝试malloc
(以避免编译器优化或写入时的惰性分配/复制)
它没有帮助。
你能解释一下这种行为吗?
malloc
/我做错了什么问题?
答案 0 :(得分:0)
感谢您的建议! 问题出在用户空间方面(经典的用户空间内存损坏症状)。 因此,在内核空间中使用malloced缓冲区是安全的< - >用户空间通信。
我只是认为有一些特殊的规则可以将缓冲区放在内核空间中。