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

copy_to_user,copy_from_user,get_user,put_user函数比较的更多相关文章

  1. [转] copy_to_user和copy_from_user两个函数的分析

    在内核的学习中会遇到很多挺有意思的函数,而且能沿着一个函数扯出来很多个相关的函数.copy_to_user和copy_from_user就是在进行驱动相关程序设计的时候,要经常遇到的两个函数.由于内核 ...

  2. IOCTL函数用法

    http://blog.163.com/he_junwei/blog/static/19793764620152510533753/ http://blog.csdn.net/styyzxjq2009 ...

  3. linux设备驱动归纳总结(三):4.ioctl的实现【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-59419.html linux设备驱动归纳总结(三):4.ioctl的实现 一.ioctl的简介: 虽 ...

  4. linux设备驱动归纳总结(三):4.ioctl的实现

    linux设备驱动归纳总结(三):4.ioctl的实现 一.ioctl的简单介绍: 尽管在文件操作结构体"struct file_operations"中有非常多相应的设备操作函数 ...

  5. 【Linux开发】linux设备驱动归纳总结(三):4.ioctl的实现

    linux设备驱动归纳总结(三):4.ioctl的实现 一.ioctl的简介: 虽然在文件操作结构体"struct file_operations"中有很多对应的设备操作函数,但是 ...

  6. linux内核中的get_user和put_user

    linux内核中的get_user和put_user 在 内核空间和用户空间交换数据时,get_user和put_user是两个两用的函数.相对于copy_to_user和 copy_from_use ...

  7. Missing access checks in put_user/get_user kernel API (CVE-2013-6282)

    /* 本文章由 莫灰灰 编写,转载请注明出处. 作者:莫灰灰    邮箱: minzhenfei@163.com */ 1.漏洞成因 Linux kernel对ARM上的get_user/put_us ...

  8. Linux驱动总结3- unlocked_ioctl和堵塞(waitqueue)读写函数的实现 【转】

    转自:http://blog.chinaunix.net/uid-20937170-id-3033633.html 学习了驱动程序的设计,感觉在学习驱动的同时学习linux内核,也是很不错的过程哦,做 ...

  9. Linux 驱动学习笔记05--字符驱动实例,实现一个共享内存设备的驱动

    断断续续学驱动,好不容易有空,做了段字符驱动的例子.主要还是跟书上学习在此记录下来,以后说不定能回过头来温故知新. 首先上驱动源码 gmem.c: /************************* ...

随机推荐

  1. verilog简易实现CPU的Cache设计

    verilog简易实现CPU的Cache设计 该文是基于博主之前一篇博客http://www.cnblogs.com/wsine/p/4661147.html所增加的Cache,相同的内容就不重复写了 ...

  2. ArcGIS Server10.2服务启动不了之http://localhost:6080/arcgis/manager无法打开之arcMap 无法打开6080admin问题解决之路

    遇到的问题:在services.msc中可以正常启动arcGIS server ,但是过几秒种服务就自动关闭, 而且manager打不开, 各种方法都试过了,什么关闭杀毒软件,更改服务配置文件,更改a ...

  3. js原型继承与多态 How to apply virtual function in javascript

    function BaseClass() { this.hello = function() { this.talk(); } this.talk = function() { document.wr ...

  4. maven安装报错

    今天在安装maven时安照说明配置环境变量,通过命令检查: mvn -v 竟然出现以下错误,很郁闷的是我明明配置了JAVA_HOME,并且别的依赖java的东西都能用,通过java -version也 ...

  5. 在Mac中如何显示和隐藏文件

    1.显示Mac隐藏文件的命令: 在终端中输入"defaults write com.apple.finder AppleShowAllFiles YES":  鼠标单击窗口左上角 ...

  6. HTML5中的Canvas精品教程

    http://javascript.ruanyifeng.com/htmlapi/canvas.html

  7. Window 添加定时任务

    简单任务 右键点击 我的电脑->管理->任务计划程序库->创建基本任务 然后选择任务类型,触发时间,触发程序就可以了,可以精确到秒 带参数的计划任务 如果执行程序是cmd 可选参数那 ...

  8. Function模式 -- 深入理解javascript

    /* 一.回调函数 函数A作为另外一个函数B的参数 */ var menuId = $("ul.nav").first().attr("id"); var re ...

  9. 使用feof()函数判断文件是否结束

    课本上时这样写的:(用putchar(ch);代表对取出来的字符的处理.) while(!feof(fp)) { ch=fgetc(fp); putchar(ch); } 但是,这样写的话,fgetc ...

  10. 总结 | 如何测试你自己的 RubyGem

    如何测试一个Gem gem 开发完了,想要给别人用,那就需要测试啊,测试一个 gem 其实很简单,这里我们用 minitest 为例, rspec 也一样适用.先来看看我们当前这个 gem 的目录结构 ...