Esperaba que alguien pudiera explicar los matices de la macro __user utilizada en la fuente del kernel de Linux.¿Cuáles son las implicaciones de la macro linux __user?
En primer lugar, la macro:
# define __user __attribute__((noderef, address_space(1)))
Ahora, después de algunas google leí que esta macro le permite a uno para designar a un puntero como pertenecientes al espacio de direcciones del usuario, y que no se deben dereferenciar.
Me pueden estar perdiendo algunos hechos obvios, pero ¿podría alguien explicar las implicaciones de tal macro? Por ejemplo, ¿cuál es un buen ejemplo de dónde esta macro sería útil? Nuevamente, perdónenme si me falta algo obvio.
Para poner esto en contexto, crucé la macro mientras examinaba un código USB (linux/usbdevice_fs.h). Solo estoy buscando una comprensión general de estas macros (u otras similares) en el kernel.
¡Gracias por mirar!
Consulte la fuente do_execve() para ver un buen ejemplo. Vea cómo se usa argv en count(). Si simplemente desreferencia (* argv [0]) o algo así, escaso (1) lo advertirá. address_space dice que no todos los punteros son iguales, requieren reglas diferentes (deferencia) y no deben mezclarse. – adobriyan