当我打印在用户空间中初始化的字符*时会发生什么



我实现了一个新的系统调用作为介绍练习。它所做的只是接收缓冲区并打印该缓冲区。后来我才知道,正确的做法是使用copy_from_user。

这只是验证地址的预防措施,还是我的系统调用导致了一些我看不到的错误(页面错误?

如果它只是一种预防措施,它保护什么?

谢谢!

有几个原因。

  1. 某些体系结构使用分段内存,其中用户内存有一个单独的分段。在这种情况下,copy_from_user对于实际获得正确的内存地址至关重要。
  2. 内核可以访问所有内容,包括(几乎根据定义)许多特权信息。不使用copy_from_user可能会在用户传入内核地址时允许信息泄露。更糟糕的是,如果您在没有copy_to_user的情况下写入用户提供的缓冲区,则用户可能会覆盖内核内存。
  3. 您希望仅通过传入错误的指针来防止用户使内核模块崩溃;使用copy_from_user可以防止错误,例如系统调用处理程序可以返回EFAULT以响应错误的用户指针。

相关内容

  • 没有找到相关文章

最新更新