copy_to_user,copy_from_user,get_user,put_user函数比较
2015-10-15 11:04
841 查看
copy_to_user,copy_from_user,get_user,put_user函数比较
copy_to_user -- Copy a block of data into user space.
copy_from_user -- Copy a block of data from user space.
get_user -- Get a simple variable from user space.
put_user -- Write a simple value into user space.
Linux中put_user和memcpy的区别
首先 Linux的kernel和user app运行在不同的模式。在ARM上就是kernel运行在SVC模式(最高级),App运行在user模式。当user app执行一个system call调用kernel代码,kernel会完成CPU的模式切换。SVC模式能访问的寄存器更多,如果在kernel中对user app传入的地址直接访问,可能会有以下问题:传入的地址是错误的,则kernel也可以访问,可能会破坏其他kernel内容,这会引起安全问 题,memcpy不会进行地址检查,使用专用的put_user就会执行地址检查,判断是否是<0xc0000000,是否在user app地址空间之内。同时在ARM平台上,最后调用的函数是__put_user_1/2/4/8。这个是一个汇编函数,使用的数据访问指令为 ldrbt,这个ARM汇编指令使用user mode来访问内存,如果这个访问非法,这会触发一个exception,在kernel中都加入了一个异常函数表,出现异常则调用 __get_user_bad相关文章推荐
- Nginx配置文件nginx.conf中文详解(总结)
- Linux下时间设置的相关命令小结
- hadoop 安全模式
- opencv第二章-显示一张图片和播放avi视频
- Nignx 连接tomcat时会话粘性问题分析及解决方法
- linux sed
- 有趣linux小程序总结(持续更新)
- shell三剑客之sed(一)
- Linux下如何知道自己外网的IP
- Linux学习记录(17)SSH协议及Linux日志基础
- linux的用户态和内核态
- Nginx 关于 Rewrite 执行顺序详解
- Linux信号机制学习笔记-----Linux信号机制的疑问?????
- Myeclipse8.5启动tomcat控制台显示java.lang.OutOfMemoryError: Java heap space的解决
- Apache—DBUtils简介
- VS 开发 Apache 服务模块
- openstack从零开始(2)——基础知识openstack中消息通信
- linux配置JAVA环境
- 10月13日全球域名商(国际域名)解析量排行榜TOP20
- 讨论实现单片机程序架构(STC15W204S单片机)