Quelles sont les implications de l'linux __utilisateur macro?

J'espérais que quelqu'un pourrait expliquer les nuances de l' __utilisateur macro utilisé dans les sources du noyau linux.

Tout d'abord, la macro:

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

Maintenant, après quelques recherches sur google, j'ai lu que cette macro permet de désigner un pointeur comme appartenant à l'espace d'adressage utilisateur, et qu'il ne devrait pas être déréférencés.

J'ai peut-être raté quelques faits évidents, mais quelqu'un pourrait-il expliquer les implications d'une telle macro? Par exemple, ce qui est un bon exemple de cas où cette macro serait d'utilisation? Encore une fois, pardonnez-moi si je suis absent quelque chose d'évident.

Pour mettre cela en contexte, je suis tombé sur la macro lors de l'examen de certains USB code (linux/usbdevice_fs.h). Je suis seulement à la recherche d'une compréhension générale de ce macros( ou autres) d'utiliser dans le noyau.

Merci pour regarder!

  • Voir do_execve() source pour de bon exemple. Voir comment argv est utilisé dans la fonction count(). Si vous souhaitez simplement de déréférencement (*argv[0]) ou de quelque chose, peu dense(1) pour les avertir à ce sujet. address_space dit de ne pas tous les pointeurs sont égaux, nécessitant différents (déréférencement) les règles et ne doivent pas être mélangés.