我实施了一个新的系统调用作为介绍练习。它只需要一个缓冲区和printk缓冲区。我后来才知道正确的做法是使用copy_from_user。
这只是一种预防措施来验证地址,还是我的系统调用导致了一些我看不到的错误(页面错误?)?
如果这只是一种预防措施,它有什么保护作用?
谢谢!
答案 0 :(得分:6)
有几个原因。
copy_from_user
对于实际获取正确的内存地址至关重要。copy_from_user
可能允许信息泄露。更糟糕的是,如果您在没有copy_to_user
的情况下写入用户提供的缓冲区,则用户可能会覆盖内核内存。copy_from_user
可以防止出现故障,例如系统调用处理程序可以返回EFAULT
以响应错误的用户指针。