copy_to/from_user 和用户 space 中的 malloc

copy_to/from_user and malloc in user space

我很困惑!

我有一个简单的 chardev 和用户 space 应用程序,通过 ioctl.

sends/receives 缓冲区 to/from chardev

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

但是,如果我用alloca()替换malloc()(在堆栈上分配buf)每次都工作正常。

我也在调用 malloc 后尝试了 memset(buf, 0x42, buf_len)(以避免编译器优化或延迟分配/写时复制) 但这并没有帮助。

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

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

我只是觉得有一些特殊的规则可以将堆上的缓冲区放入内核space。