我希望有人能解释linux内核源代码中使用的_用户宏的细微差别.

首先,宏观方面:

# define __user         __attribute__((noderef, address_space(1)))

现在,在谷歌搜索之后,我读到这个宏允许一个人指定一个指针属于用户地址空间,并且它不应该被取消引用.

我可能遗漏了一些显而易见的事实,但有人能解释一下这样一个宏观的含义吗?例如,这个宏在哪里有用的一个好例子是什么?再说一次,如果我遗漏了一些明显的东西,请原谅我.

为了将其放在某个上下文中,我在判断一些USB代码(linux/usbdevice_fs.h)时遇到了宏.我只想了解一下这个宏(或其他类似的宏)在内核中的使用情况.

谢谢您的观看!

推荐答案

它允许像sparse这样的工具告诉内核开发人员,他们可能不正确地使用了不受信任的指针(或在当前虚拟地址映射中可能无效的指针).

C++相关问答推荐

海湾合作委员会是否保证大小匹配的访问?

如何将匿名VLA分配给指针?

函数指针始终为零,但在解除引用和调用时有效

sizeof结果是否依赖于字符串的声明?

找出文件是否包含给定的文件签名

Ebpf内核代码:permission denied:invalid access to map value

显式地将值转换为它从函数返回的类型的含义是什么?

#If指令中未定义宏?

轮询libusb_pollfd struct 列表的正确方式是什么?

如何使用[BTStack]BLE发送大型(>;2kb)信息包

关于";*(++p)->;t";、&++p->;t";和&q;++*p->;t";的问题

如何在C中使数组变量的值为常量?

在for循环中指向数组开头之前

C I/O:在Windows控制台上处理键盘输入

C代码可以在在线编译器上运行,但不能在Leetcode上运行

如何在C宏定义中包含双引号?

如何打印循环调度问题的时间表

Tcl_GetDoubleFromObj在列表的迭代中是一个缺点

C循环条件内的函数

当 n 是我们从用户那里获得的整数时,创建 n 个 struct 参数