Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux kernel 当我打印在用户空间中初始化的char*时会发生什么?_Linux Kernel_System Calls_Kernel_Printk - Fatal编程技术网

Linux kernel 当我打印在用户空间中初始化的char*时会发生什么?

Linux kernel 当我打印在用户空间中初始化的char*时会发生什么?,linux-kernel,system-calls,kernel,printk,Linux Kernel,System Calls,Kernel,Printk,作为介绍练习,我实现了一个新的系统调用。它所做的只是接收一个缓冲区并打印该缓冲区。后来我了解到正确的做法是使用copy_from_user 这只是验证地址的预防措施,还是我的系统调用导致了一些我看不见的错误(页面错误?) 如果这只是一种预防措施,那么它能防止什么呢 谢谢 有几个原因 有些体系结构使用分段内存,其中用户内存有一个单独的段。在这种情况下,copy\u from\u user对于实际获取正确的内存地址至关重要 内核可以访问所有内容,包括(几乎按定义)大量特权信息。如果用户传入内核地址,

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

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

如果这只是一种预防措施,那么它能防止什么呢


谢谢

有几个原因

  • 有些体系结构使用分段内存,其中用户内存有一个单独的段。在这种情况下,
    copy\u from\u user
    对于实际获取正确的内存地址至关重要
  • 内核可以访问所有内容,包括(几乎按定义)大量特权信息。如果用户传入内核地址,不使用
    copy\u from\u user
    可能会导致信息泄露。更糟糕的是,如果您在没有
    copy\u to\u user
    的情况下写入用户提供的缓冲区,用户可能会覆盖内核内存
  • 您希望通过传递错误的指针来防止用户破坏内核模块;使用
    copy\u from\u user
    可以防止出现故障,例如,系统调用处理程序可以返回
    EFAULT
    ,以响应错误的用户指针