Quali sono le implicazioni della macro __user di Linux?

Quali sono le implicazioni della macro __user di Linux?


Speravo che qualcuno potesse spiegare le sfumature della macro __user usata nel sorgente del kernel Linux.


Innanzitutto la macro:


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

Ora, dopo aver cercato su Google ho letto che questa macro consente di designare un puntatore come appartenente allo spazio degli indirizzi dell'utente e che non dovrebbe essere dereferenziato.


Potrebbero mancare alcuni fatti ovvi, ma qualcuno potrebbe spiegare le implicazioni di una tale macro? Ad esempio, qual è un buon esempio di dove questa macro potrebbe essere utile? Ancora una volta, perdonami se mi sfugge qualcosa di ovvio.


Per mettere questo in un certo contesto, mi sono imbattuto nella macro mentre esaminavo del codice USB (linux/usbdevice_fs.h). Sto solo cercando una comprensione generale dell'uso di queste macro (o altre simili) all'interno del kernel.


Grazie per lo sguardo!


Risposte:


Consente a strumenti come sparse di dire agli sviluppatori del kernel che potrebbero utilizzare un puntatore non attendibile (o un puntatore che potrebbe non essere valido nella mappatura dell'indirizzo virtuale corrente) in modo improprio.