Implementé algún tipo de dispositivo de caracteres y necesito ayuda con la función copy_ from_user.Linux Kernel: copy_from_user - struct con punteros
tengo una estructura:
struct my_struct{
int a;
int *b;
};
que inicializarlo en el espacio de usuario y pass puntero a my_struct a mi dispositivo de caracteres utilizando la función de 'escribir'. En la función 'escribir' del dispositivo de personaje Space de Kernel lo echo de un * char a este tipo de estructura. Asigno algo de memoria para una estructura usando kmalloc y hago copy_from_user
en ella.
Está bien para 'int a' simple, pero copia solo el puntero (dirección) del valor b, no el valor apuntado por b, entonces ahora estoy en Kernel Space y estoy trabajando con un puntero que apunta a una memoria de espacio de usuario. ¿Es esto incorrecto y no debería acceder al puntero de espacio de usuario directamente y tengo que marcar copy_from_user
cada puntero en mi estructura y luego copiar cada puntero en la función "leer" usando la función copy_to_user
?
También me gustaría señalar que no puedo pensar en ningún syscalls o ioctls que tomen structs con punteros en ellos. Incluso aquellos que tienen cadenas tendrán una matriz de caracteres en la estructura en su lugar. El hecho de que sea muy molesto escribir código para hacer esto para cada miembro del puntero podría tener algo que ver con eso. :-) – asveikau
@asveikau: 'readv()' y 'writev()'? – caf