¿Por qué se necesitan `copy_from_user()` y `copy_to_user()` cuando el kernel está asignado al mismo espacio de direcciones virtuales que el proceso mismo?

¿Por qué se necesitan `copy_from_user()` y `copy_to_user()` cuando el kernel está asignado al mismo espacio de direcciones virtuales que el proceso mismo?

¿Por qué son necesarios copy_from_user()y copy_to_user()cuando el núcleo está asignado al mismo espacio de direcciones virtuales que el proceso mismo?

Después de haber desarrollado algunos módulos del kernel (de juguete) con fines de aprendizaje, rápidamente los reconocí copy_from_user()y copy_to_user()eran necesarios para copiar datos desde/hacia los buffers del espacio de usuario; de lo contrario, los errores relacionados con direcciones no válidas provocaban fallos.

Pero si 0x1fffffuna dirección virtual apunta a un búfer de espacio de usuario, ¿por qué esa dirección no es válida en el kernel? El kernel está en el mismo espacio de direcciones virtuales, por lo que 0x1fffffestaría asignado a la misma memoria física.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Respuesta1

La asignación del espacio de direcciones es la misma en algunas arquitecturas (¡no en todas!), pero incluso en arquitecturas donde son iguales, los niveles de protección no lo son. copy_from_useretc. tienen tres propósitos principales:

  • verifican que los permisos en la memoria para leer o escribir permitan que el proceso que se ejecuta en el espacio del usuario lea o escriba en ella; esto garantiza que los procesos no puedan engañar al kernel para que acceda a la memoria; el proceso no debería ser capaz de;
  • permiten un manejo de errores específico para que las fallas de protección no bloqueen el kernel, por ejemplo, si las direcciones solicitadas no están asignadas actualmente (piense en páginas cero o páginas intercambiadas);
  • aseguran que el núcleo no tropiece con su propia protección,p.ej SMAPo espacios de direcciones específicos del kernel (S/390).

Algunas arquitecturas utilizan diseños de memoria que permiten que estas funciones tomen atajos,p.ejusando un mapeo directo de la memoria física, pero no se puede asumir que ese sea el caso, y de todos modos no maneja todas las situaciones (las páginas intercambiadas no están presentes en la memoria física).

información relacionada