我实现了一个新的系统调用作为介绍练习。它所做的只是接收一个缓冲区并打印该缓冲区。后来我了解到正确的做法是使用 copy_from_user。
这只是验证地址的预防措施,还是我的系统调用导致了一些我看不到的错误(页面错误?)?
如果这只是一种预防措施,那么它可以防止什么?
谢谢!
我实现了一个新的系统调用作为介绍练习。它所做的只是接收一个缓冲区并打印该缓冲区。后来我了解到正确的做法是使用 copy_from_user。
这只是验证地址的预防措施,还是我的系统调用导致了一些我看不到的错误(页面错误?)?
如果这只是一种预防措施,那么它可以防止什么?
谢谢!
有几个原因。
copy_from_user
对于实际获得正确的内存地址至关重要。copy_from_user
如果用户传入内核地址,则不使用可能会导致信息泄露。更糟糕的是,如果您在没有 的情况下写入用户提供的缓冲区copy_to_user
,则用户可能会覆盖内核内存。copy_from_user
可以防止错误,例如系统调用处理程序可以返回EFAULT
以响应错误的用户指针。