linux空间(linux基础命令表)
linux空间(linux基础命令表)
一、 问题描述
access_ok函数是什么原理?
问题二、问题分析
我们在内核空间和用户空间进行数据拷贝的时候必须判断用户空间地址是否合法。 主要通过偶函数access_ok来判断。1. Linux用户空间与内核地址空间
Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中。
通常32位Linux内核地址空间划分0~3G为用户空间,3~4G为内核空间。注意这里是32位内核地址空间划分,64位内核地址空间划分是不同的。
进程寻址空间0~4G
进程在用户态只能访问0~3G,只有进入内核态才能访问3G~4G
进程通过系统调用进入内核态
每个进程虚拟空间的3G~4G部分是相同的
进程从用户态进入内核态不会引起CR3的改变但会引起堆栈的改变2. access_ok详解
原型:access_ok(type,addr,size);
功能:
access_ok — 检查用户空间指针是否有效 注意,根据体系结构的不同,这个函数可能只是检查指针是否在用户空间范围内,在调用这个函数之后,内存访问函数可能仍然返回 -EFAULT
参数说明:
typeType of access: VERIFY_READ or VERIFY_WRITE. 请注意,VERIFY_WRITE是VERIFY_READ的超集——如果写入一个块是安全的,那么从它读取总是安全的。addr要检查的块的开始的用户空间指针size要检查的块的大小
返回值:
此函数检查用户空间中的内存块是否可用。如果可用,则返回真(非0值),否则返回假 (0) 。2. 源码分析#defineaccess_ok(type,addr,size)(__range_ok(addr,size)==0)/*Weuse33-bitarithmetichere...*/#define__range_ok(addr,size)({\ unsignedlongflag,roksum;\ __chk_user_ptr(addr);\ __asm__("adds%1,%2,%3;sbcccs%1,%1,%0;movcc%0,#0"\ :"=&r"(flag),"=&r"(roksum)\ :"r"(addr),"Ir"(size),"0"(current_thread_info()->addr_limit)\ :"cc");\ flag;})staticinlinevoid__chk_user_ptr(constvolatilevoid*p,size_tsize) { assert(p>=__user_addr_min&&p+size<=__user_addr_max); }
其中__range_ok详解如下: 参数对应:flag--------%0roksum--------%1addr--------%2size--------%3
汇编指令详解adds%1,%2,%3
等价于:rosum=addr+size
这个操作会影响状态位(目的是影响是进位标志C)。
以下的两个指令都带有条件CC,也就是当C=0的时候才执行; 如果上面的加法指令进位了(C=1),则以下的指令都不执行,flag就为初始值current_thread_info()->addr_limit(非0),并返回。 如果没有进位(C=0),就执行下面的指令:sbcccs%1,%1,%0
该指令等价于rosum=rosum-flag-1
也就是(addr + size) - (current_thread_info()->addr_limit) - 1,操作影响符号位。.
如果(addr + size) >= (current_thread_info()->addr_limit) - 1,则C=1 如果(addr + size) < (current_thread_info()->addr_limit) - 1,则C=0 当C=0的时候执行以下指令,否则跳过(flag非零)。movcc%0,#0
等价于flag=0,给flag赋值0。
综上所述:__range_ok宏等价于:如果(addr+size)>=(current_thread_info()->addr_limit)-1,返回非零值 如果(addr+size)<(current_thread_info()->addr_limit),返回零
而access_ok就是检验将要操作的用户空间的地址范围是否在当前进程的用户地址空间限制中。这个宏的功能很简单,完全可以用C实现,不是必须使用汇编。 由于这两个函数使用频繁,就使用汇编来实现部分功能来增加效率。3. 使用实例
我们在内核拷贝数据到用户空间或者从用户空间拷贝数据到内核空间,都需要判断用户空间地址是否在用户空间。staticinlineunsignedlong__must_checkcopy_from_user(void*to,constvoid__user*from,unsignedlongn){ if(access_ok(VERIFY_READ,from,n)) n=__copy_from_user(to,from,n); else/*securityhole-plugit*/memset(to,0,n); returnn; }staticinlineunsignedlong__must_checkcopy_to_user(void__user*to,constvoid*from,unsignedlongn){ if(access_ok(VERIFY_WRITE,to,n))
茶叶怎么样(各种茶叶的功效大全)茶的保健能力之强,而因制作工艺的不同被分为六大类,分别以绿茶黄茶白茶青茶红茶黑茶来命名,其功效也各有差异,喝对了能保健养生,但喝错了也可能伤身,到底该怎么喝?绿茶绿茶是这六种茶中唯
白族服饰特点(中国大理的白族服饰体现了什么艺术特点)白族服饰特点(中国大理的白族服饰体现了什么艺术特点)大理白族是中国西南地区各民族中经济较为发达,文化水平较高的民族。早在3千多年前,白族先民就以磨制的石斧石刀骨角器作为生产工具,生
杨木怎么样(杨木材质特点)武汉建筑模板材质怎么选?,这是前几日,收到一位网友的私信问的问题,想要知道建筑模板材质怎么选择,我们先要知道建筑模板是由面板支撑结构和连接件三个部分组成的。现在知道了建筑模板的组成
千岛湖旅游(千岛湖旅游攻略)千岛湖旅游(千岛湖旅游攻略)千岛湖的日落太安静,连风吹树叶都变得小心翼翼,千岛湖登岛有三条路线。线路推荐梅峰岛月光岛鱼乐岛6小时左右,梅峰岛龙山岛月光岛45小时左右,龙山岛月光岛3
开箱安装容易经济实惠Tendac50s云管家监控录影一把罩近几年来家用型消费级监控摄影机市场需求愈来愈庞大各种网通品牌也陆续推出了符合家用需求的入门机种这也使得家中安装一台监控网路摄影机也不再像过去那样门槛那么高尤其是当家中有长辈小孩或有
新款苹果原味手錶AppleWatch上线圆形錶面价格更低随着现在的生活水准越来越高,大家购买苹果的产品也是越来越多了,那么苹果的产品当中有很多的功能大家是未必知道如何去使用的,当然也包括要去多了解苹果新出的新功能之类的,那么今天小编就收
oppo售后在哪里(oppo官方维修点查询)手机知识小课堂为您网罗并分析手机日常使用中需要注意的小问题,避免一些坏习惯造成对手机的良好体验。之前有小伙伴私信问道,听说OPPO售后是全国联保的,可是茫茫人海中,如何找到离我最近
如何斗蟋蟀(以为斗蟋蟀很简单,打脸了)如何斗蟋蟀(以为斗蟋蟀很简单,打脸了)在儿时的玩乐中,斗蟋蟀是一种很受小孩子欢迎的游戏,小伙伴们玩得不亦乐乎。蟋蟀又名促织,中国北方俗称蛐蛐。蟋蟀只有一百多天的寿命,活跃在秋季。蟋
奇石有哪些(各地奇石图片)我国赏石之风始于夏朝,到隋唐形成时尚,为达官贵人文人墨客所热衷,而赏石之风在明清达到极盛。古代的奇石价值多少,很多已无法用今天的货币准确衡量,但是目前我国最有名的四大奇石价值均已超
集显哪个好(集成显卡有好的吗)显卡是电脑中非常重要的硬件之一,又称为显示器适配卡,显卡是连接主机与显示器的接口卡,常见的显示传输接口有VGADVIDDVIDPHDMI等几种接口,显示卡分ISAPCIAGPVES
深圳汉唐经方中医馆(倪海厦汉唐中医官网)深圳汉唐经方中医馆(倪海厦汉唐中医官网)资料先生年或在六十左右,早年从台湾入籍于美国,大学期间研修西药化学,深思其利害,已有心斥之。后习中医,钟情于经方,亦用意其间,至于针灸,似师
太空沙怎么做(怎么做太空沙不用胶水)不知道你小的时候喜不喜欢玩泥沙啊,是不是每一次玩都被你的爹妈痛骂一顿,但是等你当了爹妈之后,你有没有发现你的孩子也依然喜欢玩泥沙,对泥沙的玩耍热情,似乎是刻在我们人类的基因里一样,
怎么做太空沙(面粉做太空沙)太空沙是现在很火的一款玩具,无论是孩子还是儿童,都可以找到乐趣,让你在家就可以玩海沙,享受阳光沙滩的感觉,那么,太空沙多少钱一套?太空沙多少钱一套其实太空沙的价格是由太空沙的重量,
表格公式怎么下拉复制(表格公式往下拉全部一模一样)将Excel的单元格拖动下拉,相当于复制公式,也可以复制单元格内容顺序编号等,但是拖动下拉这件事情很玄妙,要它复制的时候,偏偏递增了要顺序编号呢,它却仅仅复制了一下。到底在什么场景
痰多是什么原因(不咳嗽但有吐不完的白色粘痰)引言在我们的日常生活中,当我们行走在路上时,可能经常会听到有人喉咙发出呵的声音,然后就吐了痰。可能有人会选择拿纸包好,但有的人很可能只是拿脚一戳就离开,可以说,这种情况在生活中非常
咳嗽痰多吃什么药(咳嗽变异性哮喘自愈)咳嗽是临床很常见的症状,一年四季都可以出现,秋冬和春季更多。咳嗽可以由急性呼吸道疾病引起,也可见于慢性呼吸道疾病,具体原因很复杂。所以止咳化痰药是临床上一大类药物。本文想介绍一下常
怎么把痰咳出来(长期咳果冻痰怎么回事)严寒冬季,正是呼吸道疾病高发期,如慢阻肺支气管炎和肺炎等。最让人们难受的是总感觉喉咙有痰,但不管怎么咳都咳不出来,也咽不下去,有时会感觉到喉咙瘙痒,那面对此问题该如何缓解。为什么总
有痰咳不出怎么办(有痰咳不出来小偏方)平时我们的身上总是会出现一些小毛病,比如很多人总是觉得喉咙里有痰,用力咳的时候咳不出来,但每次想咽下去又很费力,给我们的生活带来了很大的影响,真是让人抓狂。由于不是什么大问题,因此
防盗门锁具(家用防盗门锁)防盗门锁具(家用防盗门锁)目前市面上防盗门锁芯一般分为三个等级,分别为A级,B级和C级,其中有些厂家将立即分为普通B级和超B级,实际这两个是一个档次,也就是同级别的C级有些厂家也分
门锁怎么换(门锁怎么换把手方向)门锁的种类很多,在家里少不了门锁坏了要拆掉。那么,针对不同的门锁,你都会拆吗?接下来,PChouse就为大家细细道来。一球形门锁怎么拆1在相对里面的方向看锁的把手,在把手上有个小孔
交换机和路由器区别(交换机和路由器的区别与联系)交换机和路由器区别(交换机和路由器的区别与联系)相信有很多人在学习网络的过程中,都会对路由器与交换机的区别与联系感到疑惑不解,因为这两台设备的功能看起来似乎一样。然而,其实路由器与
路由器和交换机的区别!(路由器和交换机的区别简单易懂!)路由器和交换机的区别!(路由器和交换机的区别简单易懂!)路由器和交换机都是构成计算机通信的主要网络设备,千千万万的路由器和交换机再加上连接他们的光纤或者网线就构成了现代信息通信的高