从自定义系统调用生成段错误
我正在从系统调用中执行copy_to_user(). 如何在错误时生成段错误或sigbus,就像用户空间试图访问相同的内存一样? 最佳答案 好吧,一般来说,你做不到.除非你打算重写内核.当内核访问用户模式地址时,它使用安全表单,通常是copy_from_user,copy_to_user,get_user,… – 正如您所提到的那样.这些宏具有内核检查的返回值,并且在大多数情况下将返回-EFAULT. 然后,通常会出现libc并调整返回值以适合手册页 – 这意味着如果结果是错误的,则设置errno(取决于调用的是哪个系统调用). 例如,内核中的常见代码段如下:
(取自sendfile64系统调用在fs / read_write.c的实现) 如您所见,当内核无法从usermode读取时,它返回-EFAULT. 鉴于可以将多个指针传递给某些系统调用,可能无法确定哪个引发了-EFAULT.因此,没有通用的用户模式方法来代表内核检查无效的内存访问时发送SIGSEGV. 但是,如果您自己编写内核系统调用,并且想要触发信号,那就不难了.我没有在内核中挖掘过多,但是在send_sig_info(或kernel / signal.c中的其他合适函数)中调用某些东西是你正在寻找的东西. (编辑:台州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- LINUX入门:CentOS 7 配置本地yum 源
- chmod以数字形式改变文件权限
- linux – 我的引导程序无法使用gcc 4.6和4.7 …只编译4.5
- search – sed:无法读取:没有这样的文件或目录
- Linux中的Netbeans和Xdebug
- Install Tomcat 6 on CentOS or RHEL --转载
- linux – i386:x64-32 vs i386 vs i386:x86_64之间的区别
- linux – 为什么`ls`每行列出多个文件,但`ls pipe / redire
- LINUX教程:CentOS 7 挂载ntfs磁盘格式的U盘
- linux – 使用$(basename $(notdir $@))了解Makefile