Para ser claros, este es un diseño en lugar de una pregunta de implementación¿Por qué las llamadas al sistema devuelven EFAULT en lugar de enviar una segfault?
Quiero saber la razón de por qué POSIX se comporta de esta manera. Las llamadas al sistema POSIX cuando se le da una ubicación de memoria no válida devuelven EFAULT en lugar de bloquear el programa de espacio de usuario (mediante el envío de un sigsegv), lo que hace que su comportamiento sea inconsistente con las funciones de espacio de usuario.
¿Por qué? ¿Esto no solo oculta los errores de memoria? ¿Es un error histórico o hay una buena razón para ello?
Para mí, un sigsegv/sigbus tiene más sentido también. En este momento estoy jugando con 2 syscalls personalizadas que también deberían tener emulaciones de espacio de usuario (más lentas). No veo por qué el syscall real y la emulación deberían comportarse de manera diferente si se pasan los búferes no válidos. Incluso POSIX parece ser de la opinión de que los usuarios no deberían tener que preocuparse de si una función del sistema es una función real de syscall o un espacio de usuario. Mi pregunta relacionada: https: //stackoverflow.com/questions/44239545/generating-segfault-from-a-custom-syscall/44251112 – PSkocik