Was sind die Auswirkungen des Linux-Makros __user?

Was sind die Auswirkungen des Linux-Makros __user?


Ich hatte gehofft, jemand könnte die Nuancen des __user-Makros erklären, das in der Linux-Kernel-Quelle verwendet wird.


Zuerst das Makro:


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

Nun, nach einigem Googeln habe ich gelesen, dass dieses Makro es einem ermöglicht, einen Zeiger als zum Benutzeradressraum gehörig zu kennzeichnen, und dass er nicht dereferenziert werden sollte.


Mir fehlen vielleicht einige offensichtliche Fakten, aber könnte jemand bitte die Auswirkungen eines solchen Makros erklären? Was ist zum Beispiel ein gutes Beispiel dafür, wo dieses Makro nützlich wäre? Verzeihen Sie mir noch einmal, wenn ich etwas Offensichtliches übersehe.


Um dies in einen Zusammenhang zu bringen, bin ich beim Untersuchen von USB-Code (linux/usbdevice_fs.h) auf das Makro gestoßen. Ich suche nur nach einem allgemeinen Verständnis der Verwendung dieser Makros (oder anderer ähnlicher) innerhalb des Kernels.


Danke fürs Schauen!


Antworten:


Es ermöglicht Tools wie Sparse, Kernel-Entwicklern mitzuteilen, dass sie möglicherweise einen nicht vertrauenswürdigen Zeiger (oder einen Zeiger, der in der aktuellen virtuellen Adresszuordnung ungültig sein könnte) falsch verwenden.