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。
我很困惑!
我有一个简单的 chardev 和用户 space 应用程序,通过 ioctl
.
当我通过 malloc
(在堆上)分配缓冲区(在用户 space 中)时,我有时会在 free()
上的用户 space 应用程序中出现分段错误,或者内核恐慌。
每次都是其中之一。
但是,如果我用alloca()
替换malloc()
(在堆栈上分配buf)每次都工作正常。
我也在调用 malloc
后尝试了 memset(buf, 0x42, buf_len)
(以避免编译器优化或延迟分配/写时复制)
但这并没有帮助。
你能解释一下这种行为吗?
malloc
有什么问题/我做错了什么?
感谢您的建议! 问题出在用户 space 端(典型的用户 space 内存损坏症状)。 因此,在内核 space <-> 用户 space 通信中使用 malloced 缓冲区是安全的。
我只是觉得有一些特殊的规则可以将堆上的缓冲区放入内核space。