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关闭这个特性。
