码迷,mamicode.com
首页 > 其他好文 > 详细

copy_to_user,copy_from_user,get_user,put_user函数比较

时间:2015-10-15 11:16:06      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

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函数比较

标签:

原文地址:http://www.cnblogs.com/jingzhishen/p/4881754.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!