我可以将指针传递给Linux内核空间以获取__user参数吗?

我已经读过 Linux内核中的__user说明符,用于标记 Sparse的函数参数以检查函数参数.

特别是,给定

int foo1( char * buf );

一个人不能将指针传递给buf的用户空间.

反过来怎么样?在

int foo2( char __user * buf );

可能或必须通过用户提供的指针?我猜测前者是因为用户提供的指针确实可以是任何东西,但我还没有在任何地方找到__user的正式规范.

解决方法

请记住__user从根本上意味着指针指向用户地址空间.它不一定必须由用户提供,但它确实意味着它不能是指向内核内存的指针.

在某些体系结构上,例如x86和x86_64,内核和用户内存存在于同一地址空间中,并且仅通过边界(即x86中的3G以上的内核)来区分.在这些体系结构中,__ user主要用作注释,以提醒开发人员应该小心对待它.然而,这并非总是如此!一些体系结构,例如PowerPC,实际上完全为内核使用单独的地址空间;在这些体系结构上,__ user具有新的重要性,因为它表明必须使用特殊函数(如copy_from_user)来访问指针.正常的内存访问根本不起作用,因为它会尝试取消引用内核地址空间中的指针,它可能无效.

相关文章

/etc/sysctl.conf这个目录主要是配置一些系统信息,/etc/sys...
1.作用 useradd或adduser命令用来建立用户帐号和创建用户的起...
它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅...
不管是我们在安装软件还是监测软件的使用性能,我们都要随时...
装好Tomcat7后,发现除了本机能访问外界访问不了,岂有此理。...
修改防火墙配置需要修改 /etc/sysconfig/iptables 这个文件,...