我可以将指针传递给Linux内核空间以获取__user参数吗?
发布时间:2020-12-14 01:20:15 所属栏目:Linux 来源:网络整理
导读:我已经读过 Linux内核中的__user说明符,用于标记 Sparse的函数参数以检查函数参数. 特别是,给定 int foo1( char * buf ); 一个人不能将指针传递给buf的用户空间. 反过来怎么样?在 int foo2( char __user * buf ); 可能或必须通过用户提供的指针?我猜测前者
我已经读过
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)来访问指针.正常的内存访问根本不起作用,因为它会尝试取消引用内核地址空间中的指针,它可能无效. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- 我使用“dd”将驱动器克隆到更大的驱动器.我如何
- linux-networking – Linux e1000e(英特尔网络驱
- 使用Linux文件系统编写一次,多次读取(WORM)
- Linux如何编程,例如bash或python脚本,知道它是如
- linux – 修补和编译Ext4作为内核模块
- linux – Apache“服务器配置拒绝客户端”,尽管允
- linux – 意外地以root身份运行“chown www-data
- 服务器如何利用iptables的recent模块来抵御DDOS攻
- 在OS X上用sed和shell变量替换路径
- linux – firmware:无法加载iwlwifi-8000C-25 /
热点阅读