gpt4 book ai didi

我可以为 __user 参数传递一个指向 linux 内核空间的指针吗?

转载 作者:太空狗 更新时间:2023-10-29 15:21:47 26 4
gpt4 key购买 nike

我读过 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) 来访问指针.正常的内存访问根本不起作用,因为它会尝试取消引用内核地址空间中的指针,这可能是无效的。

关于我可以为 __user 参数传递一个指向 linux 内核空间的指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29900669/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com