Linux __user マクロの意味は何ですか?



Linux カーネル ソースで使用されている __user マクロのニュアンスを誰かが説明してくれることを期待していました.


まず、マクロ:


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

さて、グーグルで調べたところ、このマクロを使用すると、ポインターをユーザーアドレス空間に属するものとして指定でき、逆参照してはならないことがわかりました.


いくつかの明白な事実を見逃しているかもしれませんが、誰かがそのようなマクロの意味を説明してくれませんか?たとえば、このマクロが役立つ場所の良い例は何ですか?繰り返しますが、明らかな何かが欠けている場合はご容赦ください。


これを何らかの文脈で説明すると、いくつかの USB コード (linux/usbdevice_fs.h) を調べているときにマクロに出くわしました。私は、カーネル内でのこのマクロ (またはそれに似た他のマクロ) の使用についての一般的な理解を求めているだけです。


ご覧いただきありがとうございます!


答え:


これにより、sparse のようなツールが、信頼されていないポインター (または現在の仮想アドレス マッピングでは無効である可能性があるポインター) を不適切に使用している可能性があることをカーネル開発者に伝えることができます。