当前位置: 首页 > news >正文

kernel能否访问用户态空间

kernel能否访问用户态空间

一般来说,kernel拥有最高的权限,可以访问任意的地址空间。但是cpu有一个特性可以禁止kernel访问用户空间.在x86上这个feature是SMAP(Supervisor Mode Access Prevention), 在arm上这个feature是PAN(Privileged Access Never)

一个问题是,如果开启了这个feature,kernel想要访问用户空间,比如通过copy_from_user,该怎么做呢?

kernel会暂时关闭这个特性,在访问结束之后,开启这个特性。这个开启关闭必须通过专门的接口,一般就是copy_from/to_user接口。

开关这个特性会引起性能问题,因为它会暂时禁止cpu投机执行,带来前端bound升高。

在5.18以前,x86上有CONFIG_X86_SMAP这个开关可以控制是否开启smap,但是在这之后,内核删除了这个配置,强制开启smap。

也许可以通过clearcpuid=smap关闭这个特性。